From 590923475ba7c75fb2d9394feca2480cfd745ad3 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Wed, 23 Dec 2015 16:56:05 +0000 Subject: [PATCH 01/42] add quiet switch to install.ps1 --- scripts/ps/install.ps1 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/ps/install.ps1 b/scripts/ps/install.ps1 index 7fc57a43fa..e578c731bf 100644 --- a/scripts/ps/install.ps1 +++ b/scripts/ps/install.ps1 @@ -2,7 +2,8 @@ # Script to install the latest dependencies for OpenRCT2 ######################################################### param ( - [switch]$Force + [switch]$Force, + [switch]$Quiet ) Write-Host "Installing OpenRCT2 development environment for Windows" -ForegroundColor Cyan @@ -37,7 +38,7 @@ if ($currentLibsVersion -ge $libsVersion) $libsPathExists = Test-Path $libsPath if ($libsPathExists -and -not $updateLibs -and -not $Force) { - if (Prompt-User "Dependencies already exists, reinstall?") + if (-not $Quiet -and (Prompt-User "Dependencies already exists, reinstall?")) { $updateLibs = $true } From 783cd2115a077d24f3a2bdf8bde2acc33075f23e Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Wed, 23 Dec 2015 17:22:08 +0000 Subject: [PATCH 02/42] turn publish into tasks and fix nsis installer --- distribution/windows/build.ps1 | 2 +- distribution/windows/win32.txt | 2 +- scripts/ps/publish.ps1 | 74 ++++++++++++++++++++++++++-------- 3 files changed, 60 insertions(+), 18 deletions(-) diff --git a/distribution/windows/build.ps1 b/distribution/windows/build.ps1 index 45c83c6b9b..2836e38771 100644 --- a/distribution/windows/build.ps1 +++ b/distribution/windows/build.ps1 @@ -1,3 +1,3 @@ $path = Split-Path $Script:MyInvocation.MyCommand.Path -Write-Output "Building Windows Installer (NSIS script)"; +Write-Host "Building Windows Installer (NSIS script)"; makensis /DVERSION_INCLUDE=$path\win32.txt $path\install.nsi > $path\win32.log; diff --git a/distribution/windows/win32.txt b/distribution/windows/win32.txt index 7d960db79f..a33ea783b6 100644 --- a/distribution/windows/win32.txt +++ b/distribution/windows/win32.txt @@ -1,5 +1,5 @@ !define APPBITS 32 ; Define number of bits for the architecture !define EXTRA_VERSION "Vista, 7, 8.1 and 10" !define APPARCH "win32" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}build\Release" +!define BINARY_DIR "${PATH_ROOT}bin" InstallDir "$PROGRAMFILES32\OpenRCT2\" diff --git a/scripts/ps/publish.ps1 b/scripts/ps/publish.ps1 index 0cb8f90179..c55e4fb973 100644 --- a/scripts/ps/publish.ps1 +++ b/scripts/ps/publish.ps1 @@ -5,6 +5,9 @@ # - Creates a ZIP for distribution ######################################################### param ( + [Parameter(Position = 1)] + [string]$Task = "all", + [string]$Server = "", [string]$BuildNumber = "", [string]$GitBranch = "", @@ -20,7 +23,7 @@ Import-Module "$scriptsPath\common.psm1" -DisableNameChecking $rootPath = Get-RootPath # Set build attributes -function do-prepareSource() +function Do-PrepareSource() { Write-Host "Setting build #defines..." -ForegroundColor Cyan if ($GitBranch -eq "") @@ -48,19 +51,21 @@ function do-prepareSource() # Set the environment variable which the msbuild project will use $env:OPENRCT2_DEFINES = $defineString; + return 0 } # Building OpenRCT2 -function do-build() +function Do-Build() { Write-Host "Building OpenRCT2..." -ForegroundColor Cyan & "$scriptsPath\build.ps1" all -Rebuild + return $LASTEXITCODE } # Package -function do-package() +function Do-Package() { - Write-Host "Publishing OpenRCT2..." -ForegroundColor Cyan + Write-Host "Publishing OpenRCT2 as zip..." -ForegroundColor Cyan $releaseDir = "$rootPath\bin" $distDir = "$rootPath\distribution" $tempDir = "$rootPath\artifacts\temp" @@ -89,19 +94,25 @@ function do-package() if (-not (AppExists($7zcmd))) { Write-Host "Publish script requires 7z to be in PATH" -ForegroundColor Red - exit 1 + return 1 } } - & $7zcmd a -tzip -mx9 $outZip "$tempDir\*" + & $7zcmd a -tzip -mx9 $outZip "$tempDir\*" | Write-Host + if ($LASTEXITCODE -ne 0) + { + Write-Host "Failed to create zip." -ForegroundColor Red + return 1 + } # Remove temp directory Remove-Item -Force -Recurse $tempDir -ErrorAction SilentlyContinue + return 0 } # Installer -function do-installer() +function Do-Installer() { - Write-Host "Publishing OpenRCT2..." -ForegroundColor Cyan + Write-Host "Publishing OpenRCT2 as installer..." -ForegroundColor Cyan $artifactsDir = "$rootPath\artifacts" $installerDir = "$rootPath\distribution\windows" @@ -113,26 +124,57 @@ function do-installer() if ($LASTEXITCODE -ne 0) { Write-Host "Failed to create installer." -ForegroundColor Red - exit 1 + if (Test-Path -PathType Leaf "$installerDir\win32.log") + { + Get-Content "$installerDir\win32.log" | Write-Host + } + return 1 } $binaries = (Get-ChildItem "$installerDir\*.exe" | Sort-Object -Property LastWriteTime -Descending) if ($binaries -eq 0) { Write-Host "Unable to find created installer." -ForegroundColor Red - exit 1 + return 1 } Copy-Item $binaries[0].FullName $artifactsDir + return 0 } -do-prepareSource -do-build -if ($Installer) +function Do-Task-Build() { - do-installer + if (($result = (Do-PrepareSource)) -ne 0) { return $result } + if (($result = (Do-Build )) -ne 0) { return $result } + return 0 } -else + +function Do-Task-Package() { - do-package + if ($Installer) + { + if (($result = (Do-Installer)) -ne 0) { return $result } + } + else + { + if (($result = (Do-Package)) -ne 0) { return $result } + } + return 0 +} + +function Do-Task-All() +{ + if (($result = (Do-Task-Build )) -ne 0) { return $result } + if (($result = (Do-Task-Package)) -ne 0) { return $result } + return 0 +} + +# Script entry point +switch ($Task) +{ + "build" { $result = Do-Task-Build } + "package" { $result = Do-Task-Package } + "all" { $result = Do-Task-All } + default { Write-Host "Unknown publish task." -ForegroundColor Red + $result = 1 } } From ce0f7ab426c9d741934c9c3acc6974ac35e21978 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Thu, 24 Dec 2015 01:35:14 +0000 Subject: [PATCH 03/42] fix #2536: Client crashes when building new Rides --- src/windows/new_ride.c | 30 ++++++++++++++++++++---------- src/windows/track_list.c | 8 -------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/windows/new_ride.c b/src/windows/new_ride.c index e07076fbb2..6f54926539 100644 --- a/src/windows/new_ride.c +++ b/src/windows/new_ride.c @@ -19,20 +19,21 @@ *****************************************************************************/ #include "../addresses.h" -#include "../config.h" #include "../audio/audio.h" +#include "../config.h" #include "../game.h" -#include "../management/news_item.h" -#include "../management/research.h" -#include "../object.h" -#include "../rct1.h" -#include "../ride/ride.h" -#include "../localisation/localisation.h" -#include "../world/scenery.h" -#include "../ride/track.h" #include "../interface/widget.h" #include "../interface/window.h" #include "../interface/themes.h" +#include "../localisation/localisation.h" +#include "../management/news_item.h" +#include "../management/research.h" +#include "../network/network.h" +#include "../object.h" +#include "../rct1.h" +#include "../ride/ride.h" +#include "../ride/track.h" +#include "../world/scenery.h" #define _window_new_ride_current_tab RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB, uint8) @@ -933,7 +934,16 @@ static void window_new_ride_select(rct_window *w) window_close(w); window_close_construction_windows(); - if (ride_type_has_flag(item.type, RIDE_TYPE_FLAG_HAS_TRACK)) { + bool allowTrackDesigns = true; +#ifndef NETWORK_DISABLE + // TODO: FIX NETWORK TRACKS + // Until tracks work with the network this will disable them + if (network_get_mode() != NETWORK_MODE_NONE) { + allowTrackDesigns = false; + } +#endif + + if (allowTrackDesigns && ride_type_has_flag(item.type, RIDE_TYPE_FLAG_HAS_TRACK)) { track_load_list(item); char *trackDesignList = RCT2_ADDRESS(RCT2_ADDRESS_TRACK_LIST, char); diff --git a/src/windows/track_list.c b/src/windows/track_list.c index 3847a7acc5..e5ad05a6e8 100644 --- a/src/windows/track_list.c +++ b/src/windows/track_list.c @@ -30,7 +30,6 @@ #include "error.h" #include "../interface/themes.h" #include "../rct1.h" -#include "../network/network.h" enum { WIDX_BACKGROUND, @@ -146,13 +145,6 @@ void window_track_list_open(ride_list_item item) RCT2_GLOBAL(RCT2_ADDRESS_TRACK_DESIGN_SCENERY_TOGGLE, uint8) = 0; window_push_others_right(w); RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_ROTATION, uint8) = 2; - -#ifndef NETWORK_DISABLE - // TODO: FIX NETWORK TRACKS - // Until tracks work with the network this will disable them - if (network_get_mode() != NETWORK_MODE_NONE) - RCT2_ADDRESS(RCT2_ADDRESS_TRACK_LIST, utf8)[0] = 0; -#endif } /** From f93a134aa6fb3e60f5b3b45ca3ac7dfd51a21fcc Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Thu, 24 Dec 2015 01:40:03 +0000 Subject: [PATCH 04/42] fix map size error when sending network game information --- src/network/network.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 81d087295f..d3e65468b6 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -921,7 +921,7 @@ void Network::AdvertiseHeartbeat() json_object_set_new(body, "players", json_integer(network_get_num_players())); json_t *gameInfo = json_object(); - json_object_set_new(gameInfo, "mapSize", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE, uint8) - 2)); + json_object_set_new(gameInfo, "mapSize", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE_MINUS_2, sint16))); json_object_set_new(gameInfo, "day", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_TICKS, uint16))); json_object_set_new(gameInfo, "month", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16))); json_object_set_new(gameInfo, "guests", json_integer(RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_IN_PARK, uint16))); From 652031e0fec826b6ec92961ad2d2d34f7bc54f0b Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 24 Dec 2015 04:00:18 +0000 Subject: [PATCH 05/42] Merge Localisation/master into OpenRCT2/develop. --- data/language/korean.txt | 679 ++++++++++++++++++++------------------- 1 file changed, 342 insertions(+), 337 deletions(-) diff --git a/data/language/korean.txt b/data/language/korean.txt index 7cc446f991..932e5a7d16 100644 --- a/data/language/korean.txt +++ b/data/language/korean.txt @@ -3918,6 +3918,11 @@ STR_5578 :러시아 루블 (R) STR_5579 :창 크기 조절 배수: STR_5580 :체코 코루나 (Kc) STR_5581 :FPS 보기 +STR_5582 :마우스 커서를 창 밖으로 나가지 못하게 +STR_5583 :{COMMA1DP16}m/s +STR_5584 :국제단위(SI)법 +STR_5585 :{SMALLFONT}{BLACK}체인/발사 속력을 {VELOCITY}으로 만드는 것과 같이 일부 놀이기구 운행 제한을 없애줍니다 + ############################################################################### ## RCT2 Objects ############################################################################### @@ -4731,16 +4736,16 @@ STR_NAME :Corrugated Steel Roof STR_NAME :Corrugated Steel Base [CWBCRV32] -STR_NAME :Curved Wall +STR_NAME :곡선형 벽 [CWBCRV33] -STR_NAME :Curved Block +STR_NAME :곡선형 블록 [CWFCRV32] -STR_NAME :Curved Wall +STR_NAME :곡선형 벽 [CWFCRV33] -STR_NAME :Curved Block +STR_NAME :곡선형 블록 [FERN1] STR_NAME :Giant Fern @@ -4749,13 +4754,13 @@ STR_NAME :Giant Fern STR_NAME :Giant Grass [HANG1] -STR_NAME :Gallows +STR_NAME :교수대 [HELMET1] STR_NAME :American Football Helmet [ICECUBE] -STR_NAME :Ice Cube +STR_NAME :얼음 큐브 [IGROOF] STR_NAME :이글루 천장 @@ -4764,7 +4769,7 @@ STR_NAME :이글루 천장 STR_NAME :젤리빈 [JELBAB1] -STR_NAME :Jelly Baby +STR_NAME :젤리빈 [JELDROP1] STR_NAME :Fruit Drop @@ -5055,16 +5060,16 @@ STR_NAME :클레오파트라의 바늘 STR_NAME :이집트식 기둥 [TERB] -STR_NAME :Stone Block +STR_NAME :돌 블록 [TERS] -STR_NAME :Ruined Statue +STR_NAME :부서진 동상 [TES1] -STR_NAME :Egyptian Statue +STR_NAME :이집트 동상 [TF1] -STR_NAME :Fruit Tree +STR_NAME :과일 나무 [TF2] STR_NAME :과일 나무 @@ -5211,16 +5216,16 @@ STR_NAME :나무 STR_NAME :Meyer's Blue Juniper Tree [TMC] -STR_NAME :Monterey Cypress Tree +STR_NAME :왕느릅나무 [TMG] -STR_NAME :Magnolia Tree +STR_NAME :목련 [TMJ] -STR_NAME :Junk +STR_NAME :잔해 [TML] -STR_NAME :Logs +STR_NAME :나무 [TMM1] STR_NAME :Graveyard Monument @@ -5754,28 +5759,28 @@ STR_NAME :Town Hall STR_NAME :Tavern [WWBANK] -STR_NAME :Bank +STR_NAME :은행 [SSIG2] -STR_NAME :3D Sign +STR_NAME :3D 팻말 [SSIG3] -STR_NAME :Vertical 3D Sign +STR_NAME :수직 3D 팻말 [SSIG4] -STR_NAME :3D Sign +STR_NAME :3D 팻말 [SSIG1] -STR_NAME :Scrolling Sign +STR_NAME :스크롤링 전광판 [GLTHENT] -STR_NAME :'Goliath' Sign +STR_NAME :'골리앗' 팻말 [PRSHIP] -STR_NAME :Pirate Ship +STR_NAME :해적선 [SCOL] -STR_NAME :Roman Colosseum +STR_NAME :로마 콜로세움 [SIP] STR_NAME :Ice Palace @@ -5811,7 +5816,7 @@ STR_NAME :벽 STR_NAME :벽 [WALLBB34] -STR_NAME :Stone Wall +STR_NAME :돌 벽 [WALLBB8] STR_NAME :벽 @@ -5826,7 +5831,7 @@ STR_NAME :벽 STR_NAME :벽 [WALLBRWN] -STR_NAME :Window +STR_NAME :창문 [WALLCB16] STR_NAME :벽 @@ -5838,7 +5843,7 @@ STR_NAME :벽 STR_NAME :벽 [WALLCBWN] -STR_NAME :Window +STR_NAME :창문 [WALLCF16] STR_NAME :벽 @@ -5850,10 +5855,10 @@ STR_NAME :벽 STR_NAME :벽 [WALLCFAR] -STR_NAME :벽 Arch +STR_NAME :벽 아치 [WALLCFWN] -STR_NAME :Window +STR_NAME :창문 [WALLCO16] STR_NAME :Corrugated Steel Wall @@ -5871,13 +5876,13 @@ STR_NAME :벽 STR_NAME :벽 [WALLIG16] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [WALLIG24] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [WALLJB16] -STR_NAME :Jellybean Wall +STR_NAME :젤리빈 벽 [WALLJN32] STR_NAME :벽 @@ -5895,19 +5900,19 @@ STR_NAME :Railings STR_NAME :벽 [WALLNT32] -STR_NAME :Tennis Net Wall +STR_NAME :테니스 네트 벽 [WALLNT33] -STR_NAME :Tennis Net Wall +STR_NAME :테니스 네트 벽 [WALLPG32] STR_NAME :벽 [WALLPOST] -STR_NAME :Post +STR_NAME :기둥 [WALLPR32] -STR_NAME :Rigging +STR_NAME :지붕 [WALLPR33] STR_NAME :벽 @@ -5922,7 +5927,7 @@ STR_NAME :벽 STR_NAME :벽 [WALLRK32] -STR_NAME :Rock Wall +STR_NAME :바위 벽 [WALLRS16] STR_NAME :벽 @@ -5955,16 +5960,16 @@ STR_NAME :강철 벽 STR_NAME :강철 벽 [WALLSTFN] -STR_NAME :Steel Fence +STR_NAME :강철 울타리 [WALLSTWN] STR_NAME :강철 벽 [WALLTN32] -STR_NAME :Poles +STR_NAME :기둥 [WALLTXGT] -STR_NAME :'Texas Giant' Sign +STR_NAME :'텍사스 자이언트' 팻말 [WALLU132] STR_NAME :벽 @@ -5973,55 +5978,55 @@ STR_NAME :벽 STR_NAME :벽 [WALLWD16] -STR_NAME :Wooden Wall +STR_NAME :나무 벽 [WALLWD32] -STR_NAME :Wooden Wall +STR_NAME :나무 벽 [WALLWD33] -STR_NAME :Wooden Wall +STR_NAME :나무 벽 [WALLWD8] -STR_NAME :Wooden Wall +STR_NAME :나무 벽 [WALLWDPS] STR_NAME :Wooden Post Fence [WBR1] -STR_NAME :Brick Wall +STR_NAME :벽돌 벽 [WBR1A] -STR_NAME :Brick Wall +STR_NAME :벽돌 벽 [WBR2] -STR_NAME :Stone Wall +STR_NAME :돌 벽 [WBR2A] -STR_NAME :Stone Wall +STR_NAME :돌 벽 [WBR3] -STR_NAME :Stone Wall +STR_NAME :돌 벽 [WBRG] -STR_NAME :Brick Wall +STR_NAME :벽돌 벽 [WBW] -STR_NAME :Bone Fence +STR_NAME :뼈 울타리 [WC1] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC10] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC11] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC12] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC13] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC14] STR_NAME :벽 @@ -6030,37 +6035,37 @@ STR_NAME :벽 STR_NAME :벽 [WC16] -STR_NAME :Fence +STR_NAME :울타리 [WC17] -STR_NAME :Wooden Fence +STR_NAME :나무 울타리 [WC18] STR_NAME :Wooden Post Wall [WC2] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC3] STR_NAME :Roman Column Wall [WC4] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC5] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC6] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC7] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC8] -STR_NAME :Castle Wall +STR_NAME :성벽 [WC9] -STR_NAME :Castle Wall +STR_NAME :성벽 [WCH] STR_NAME :Conifer Hedge @@ -6075,19 +6080,19 @@ STR_NAME :Playing Card Wall STR_NAME :Playing Card Wall [WEW] -STR_NAME :Egyptian Wall +STR_NAME :이집트 벽 [WFW1] -STR_NAME :Wooden Fence +STR_NAME :나무 울타리 [WFWG] -STR_NAME :Wooden Fence +STR_NAME :나무 울타리 [WHG] -STR_NAME :Hedge +STR_NAME :생울타리 [WHGG] -STR_NAME :Hedge +STR_NAME :생울타리 [WJF] STR_NAME :Jungle Fence @@ -6102,13 +6107,13 @@ STR_NAME :Mesh Fence STR_NAME :Martian Wall [WMWW] -STR_NAME :Wooden Fence +STR_NAME :나무 울타리 [WPF] -STR_NAME :Fence +STR_NAME :울타리 [WPFG] -STR_NAME :Fence +STR_NAME :울타리 [WPW1] STR_NAME :Wooden Post Wall @@ -6117,7 +6122,7 @@ STR_NAME :Wooden Post Wall STR_NAME :Wooden Post Wall [WPW3] -STR_NAME :Wooden Fence +STR_NAME :나무 울타리 [WRW] STR_NAME :Roman Wall @@ -6141,19 +6146,19 @@ STR_NAME :Railings STR_NAME :Tall Wooden Fence [WWTWA] -STR_NAME :Wooden Fence Wall +STR_NAME :나무 울타리 Wall [WALLBRDR] -STR_NAME :Doorway +STR_NAME :출입구 [WALLCBDR] -STR_NAME :Doorway +STR_NAME :출입구 [WALLCBPC] STR_NAME :Portcullis Door [WALLCFDR] -STR_NAME :Doorway +STR_NAME :출입구 [WALLCFPC] STR_NAME :Portcullis Door @@ -6285,10 +6290,10 @@ STR_NAME :대기줄 TV STR_NAME :추상적인 테마 [SCGCANDY] -STR_NAME :Giant Candy Themeing +STR_NAME :대형 사탕 테마 [SCGCLASS] -STR_NAME :Classical/Roman Themeing +STR_NAME :클래식/로마 테마 [SCGEGYPT] STR_NAME :이집트 테마 @@ -6300,7 +6305,7 @@ STR_NAME :울타리와 벽 STR_NAME :정원 [SCGGIANT] -STR_NAME :Giant Garden Themeing +STR_NAME :대형 정원 테마 [SCGHALLO] STR_NAME :으스스한 테마 @@ -6321,371 +6326,371 @@ STR_NAME :화성 테마 STR_NAME :중세 테마 [SCGMINE] -STR_NAME :Mine Themeing +STR_NAME :광산 테마 [SCGORIEN] -STR_NAME :Pagoda Themeing +STR_NAME :탑 테마 [SCGPATHX] -STR_NAME :Signs and Items for Footpaths +STR_NAME :팻말과 보도 아이템 [SCGPIRAT] -STR_NAME :Pirates Themeing +STR_NAME :해적 테마 [SCGSHRUB] -STR_NAME :관목s and Ornaments +STR_NAME :관목과 장식품 [SCGSIXFL] -STR_NAME :식스 플래그 Themeing +STR_NAME :식스 플래그 테마 [SCGSNOW] -STR_NAME :Snow and Ice Themeing +STR_NAME :눈과 얼음 테마 [SCGSPACE] -STR_NAME :Space Themeing +STR_NAME :우주 테마 [SCGSPOOK] -STR_NAME :Spooky Themeing +STR_NAME :으스스한 테마 [SCGSPORT] -STR_NAME :Sports Themeing +STR_NAME :스포츠 테마 [SCGTREES] -STR_NAME :나무s +STR_NAME :나무 [SCGURBAN] -STR_NAME :Urban Themeing +STR_NAME :도시 테마 [SCGWALLS] -STR_NAME :벽s and Roofs +STR_NAME :벽과 지붕 [SCGWATER] -STR_NAME :Water Feature Themeing +STR_NAME :인공 폭포 테마 [SCGWOND] -STR_NAME :Wonderland Themeing +STR_NAME :동화나라 테마 [SCGWWEST] -STR_NAME :Wild West Themeing +STR_NAME :황량한 서부 테마 [PKEMM] -STR_NAME :Park Entrance Gates +STR_NAME :공원 출입구 [PKENT1] -STR_NAME :Traditional Park Entrance +STR_NAME :기본 공원 입구 [PKESFH] STR_NAME :Park Entrance Building [WTRCYAN] -STR_NAME :Natural Water +STR_NAME :기본 물 [WTRGREEN] -STR_NAME :Acid Green Water +STR_NAME :독성 녹색 물 [WTRGRN] -STR_NAME :Green Water +STR_NAME :녹색 물 [WTRORNG] -STR_NAME :Orange Water +STR_NAME :오렌지색 물 ############################################################################### ## Wacky Worlds Objects ############################################################################### [LONDONBS] -STR_NAME :London Bus Tram -STR_DESC :Replica trams +STR_NAME :런던 버스 전차 +STR_DESC :전차 모형 STR_CPTY :차량당 10명의 승객 [MINELIFT] -STR_NAME :Mine Lift +STR_NAME :탄광 엘리베이터 STR_DESC :Guests ride in an elevator up or down a vertical tower to get from one level to another STR_CPTY :승객 16명 [SANFTRAM] -STR_NAME :San Francisco Tram -STR_DESC :Replica trams +STR_NAME :샌프란시스코 전차 +STR_DESC :전차 모형 STR_CPTY :차량당 10명의 승객 [STEAMTRN] -STR_NAME :Maharaja Steam Train +STR_NAME :마하라자 증기 기관차 STR_DESC :Miniature steam trains consisting of a replica steam locomotive and tender, pulling closed-top wooden carriages STR_CPTY :객차당 6명의 승객 [BLACKCAB] -STR_NAME :London Taxi Black Cab Ride +STR_NAME :런던 택시 블랙 캡 라이드 STR_DESC :Powered vehicles in the shape of London Taxis STR_CPTY :차량당 2명의 승객 [CRNVBFLY] -STR_NAME :Carnival Float Ride - Butterfly Cars +STR_NAME :카니발 플로트 라이드 - 나비 차량 STR_DESC :Roller coaster cars in the shape of butterfly carnival floats STR_CPTY :차량당 2명의 승객 [CRNVFROG] -STR_NAME :Carnival Float Ride - Frog Cars +STR_NAME :카니발 플로트 라이드 - 개구리 차량 STR_DESC :Roller coaster cars in the shape of frog carnival floats STR_CPTY :차량당 2명의 승객 [CRNVLZRD] -STR_NAME :Carnival Float Ride - Lizard Cars +STR_NAME :카니발 플로트 라이드 - 도마뱀 차량 STR_DESC :Roller coaster cars in the shape of lizard carnival floats STR_CPTY :차량당 2명의 승객 [DRAGDODG] -STR_NAME :Chinese Dragonhead Ride +STR_NAME :차이니즈 드래곤헤드 라이드 STR_DESC :Self-drive electric dodgem cars -STR_CPTY :1 person per car +STR_CPTY :차량당 1명의 손님 [HIPPORID] -STR_NAME :Hippo Ride +STR_NAME :히포 라이드 STR_DESC :Riders ride in a submerged submarine through an underwater course STR_CPTY :차량당 5명의 승객 [HUSKIE] -STR_NAME :Huskie Car +STR_NAME :허스키 카 STR_DESC :Powered vehicles in the shape of Huskie sleds which follow a track-based route STR_CPTY :차량당 2명의 승객 [KILLWHAL] -STR_NAME :Killer Whale +STR_NAME :범고래 STR_DESC :Riders ride in a submerged submarine through an underwater course STR_CPTY :차량당 5명의 승객 [SKIDOO] -STR_NAME :Skidoo Dodgems +STR_NAME :설상 스쿠터 범퍼카 STR_DESC :Self-drive electric dodgem cars -STR_CPTY :1 person per car +STR_CPTY :차량당 1명의 승객 [ANACONDA] -STR_NAME :Anaconda Ride +STR_NAME :아나콘다 라이드 STR_DESC :Spacious trains with simple lap restraints STR_CPTY :차량당 6명의 승객 [BOMERANG] -STR_NAME :Boomerang Coaster +STR_NAME :부메랑 코스터 STR_DESC :After an exhilarating air-powered launch, the train speeds up a vertical track, over the top, and vertically down the other side to return to the station STR_CPTY :차량당 2명의 승객 [BULLET] -STR_NAME :Bullet Coaster +STR_NAME :신칸센 코스터 STR_DESC :Roller coaster with Japanese Bullet Train themed cars STR_CPTY :차량당 4명의 승객 [CADDILAC] -STR_NAME :Limousine Rollercoaster +STR_NAME :리무진 롤러코스터 STR_DESC :Roller coaster with Limousine themed cars STR_CPTY :차량당 4명의 승객 [CONDORRD] -STR_NAME :Condor Ride +STR_NAME :콘도르 라이드 STR_DESC :Passengers ride face-down in a lying position, suspended in a Condor-shaped car from the single-rail track, swinging freely from side to side around corners STR_CPTY :승객 1명 per car [CONGAEEL] -STR_NAME :Conga Eel Coaster +STR_NAME :콩가 뱀장어 코스터 STR_DESC :A compact steel-tracked roller coaster where the Eel-shaped train travels through corkscrews and loops STR_CPTY :차량당 4명의 승객 [DRAGON] -STR_NAME :Dragon Coaster +STR_NAME :드래곤 코스터 STR_DESC :Roller coaster with dragon-themed cars STR_CPTY :차량당 4명의 승객 [FOOTBALL] -STR_NAME :Football Ride +STR_NAME :풋볼 라이드 STR_DESC :Suspended roller coaster train consisting of football-shaped cars able to swing freely as the train goes around corners STR_CPTY :차량당 4명의 승객 [GORILLA] -STR_NAME :Gorilla Ride +STR_NAME :고릴라 라이드 STR_DESC :Suspended roller coaster train consisting of gorilla-shaped cars able to swing freely as the train goes around corners STR_CPTY :차량당 4명의 승객 [GRATWHTE] -STR_NAME :Great White Shark Ride +STR_NAME :대백상어 라이드 STR_DESC :Spacious trains with simple lap restraints STR_CPTY :차량당 6명의 승객 [JAGUARRD] -STR_NAME :Jaguar Ride +STR_NAME :재규어 라이드 STR_DESC :A compact roller coaster with individual cars and smooth twisting drops. STR_CPTY :차량당 4명의 승객 [KOLARIDE] -STR_NAME :Koala Ride +STR_NAME :코알라 라이드 STR_DESC :Large coaster car for the Reverse Freefall Coaster STR_CPTY :차량당 8명의 승객 [LIONRIDE] -STR_NAME :Lion Ride +STR_NAME :사자 라이드 STR_DESC :A compact roller coaster with individual cars and smooth twisting drops. STR_CPTY :차량당 4명의 승객 [MINECART] -STR_NAME :Mine Cart Ride +STR_NAME :탄광 카트 라이드 STR_DESC :우든 롤러코스터 차량 with padded seats and lap bar restraints STR_CPTY :차량당 4명의 승객 [OSTRICH] -STR_NAME :Ostrich Ride +STR_NAME :타조 라이드 STR_DESC :A looping roller coaster where the riders ride in a standing position STR_CPTY :차량당 4명의 승객 [PENGUINB] -STR_NAME :Penguin Bobsleigh +STR_NAME :펭귄 봅슬레이 STR_DESC :Riders career down a twisting track in penguin-shaped cars guided only by the curvature and banking of the semi-circular track STR_CPTY :차량당 2명의 승객 [POLARBER] -STR_NAME :Polar Bear Rollercoaster +STR_NAME :북극곰 롤러코스터 STR_DESC :Riders sit in pairs facing either forwards or backwards as they loop and twist through tight inversions STR_CPTY :차량당 4명의 승객 [RHINORID] -STR_NAME :Rhino Ride +STR_NAME :코뿔소 라이드 STR_DESC :A compact steel-tracked roller coaster with a spiral lift hill and cars with in-line seating STR_CPTY :차량당 6명의 승객 [ROCKET] -STR_NAME :1950's Rocket Ride +STR_NAME :1950년대 로켓 라이드 STR_DESC :Inverted roller coaster trains are accelerated out of the station to travel up a vertical spike of track, then reverse back through the station to travel backwards up another vertical spike of track STR_CPTY :차량당 4명의 승객 [RSSNCRRD] -STR_NAME :Russian Cars +STR_NAME :러시아 차량 STR_DESC :Roller coaster cars in the shape of automobiles STR_CPTY :차량당 4명의 승객 [SEALS] -STR_NAME :Seals Rollercoaster +STR_NAME :물개 롤러코스터 STR_DESC :A compact steel-tracked roller coaster where the train travels through corkscrews and loops STR_CPTY :차량당 4명의 승객 [SLOTH] -STR_NAME :Sloth Ride +STR_NAME :나무늘보 라이드 STR_DESC :Suspended roller coaster train consisting of Sloth-shaped cars able to swing freely as the train goes around corners STR_CPTY :차량당 4명의 승객 [SPUTNIKR] -STR_NAME :Sputnik Suspended Flying Coaster +STR_NAME :스푸트니크 서스펜디드 플라잉 코스터 STR_DESC :Passengers ride face-down in a lying position, suspended in a specially designed car from the single-rail track, swinging freely from side to side around corners STR_CPTY :승객 2명 per car [STGCCSTR] -STR_NAME :Stage Coach Rollercoaster -STR_DESC :우든 롤러코스터 차량 with padded seats and lap bar restraints +STR_NAME :역마차 롤러코스터 +STR_DESC :좌석이 넓고 무릎에만 안전바가 있는 우든 롤러코스터 차량 STR_CPTY :차량당 4명의 승객 [SURFBRDC] -STR_NAME :Surfing Coaster +STR_NAME :서핑 코스터 STR_DESC :Riders ride in a standing position in wide coaster trains with specially designed restraints as they race down smooth drops and through multiple inversions STR_CPTY :차량당 4명의 승객 [TAXICSTR] -STR_NAME :Yellow Taxi Coaster +STR_NAME :옐로 택시 코스터 STR_DESC :A giant steel roller coaster capable of smooth drops and hills of over 300ft STR_CPTY :차량당 4명의 승객 [TGVTRAIN] -STR_NAME :TGV Train Roller Coaster +STR_NAME :TGV 트레인 롤러코스터 STR_DESC :Roller coaster trains are accelerated out of the station by linear induction motors to speed through twisting inversions STR_CPTY :차량당 4명의 승객 [TIGRTWST] -STR_NAME :Bengal Tiger Rollercoaster +STR_NAME :뱅갈 호랑이 롤러코스터 STR_DESC :Roller coaster cars capable of heartline twists STR_CPTY :차량당 4명의 승객 [WHICGRUB] -STR_NAME :Witchity Grub Ride -STR_DESC :Roller coaster trains with small Grub-shaped cars +STR_NAME :애벌레 라이드 +STR_DESC :작은 유충 모양의 차량이 있는 롤러코스터 차량 STR_CPTY :차량당 2명의 승객 [COFFEECU] -STR_NAME :Coffee Cup Ride +STR_NAME :커피 컵 라이드 STR_DESC :Riders ride in pairs of seats rotating around the ends of three long rotating arms STR_CPTY :승객 18명 [DIAMONDR] -STR_NAME :Diamond Ride +STR_NAME :다이아몬드 라이드 STR_DESC :Riders ride in pairs of seats rotating around the ends of three long rotating arms STR_CPTY :승객 18명 [FABERGE] -STR_NAME :Faberge Egg Ride +STR_NAME :파베르의 달걀 라이드 STR_DESC :Riders ride in pairs of seats rotating around the ends of three long rotating arms STR_CPTY :승객 18명 [FIGHTKIT] -STR_NAME :Fighting Kite Ride +STR_NAME :파이팅 카이트 라이드 STR_DESC :Riders ride in pairs of seats rotating around the ends of three long rotating arms STR_CPTY :승객 18명 [FIRECRAK] -STR_NAME :Fire Cracker Ride +STR_NAME :파이어 크래커 라이드 STR_DESC :Rotating wheel with suspended passenger pods, which first starts spinning and is then tilted up by a supporting arm STR_CPTY :승객 16명 [ITALYPOR] -STR_NAME :Italian Police Ride +STR_NAME :이탈리안 폴리스 라이드 STR_DESC :Riders ride in pairs of seats rotating around the ends of three long rotating arms STR_CPTY :승객 18명 [JUNKSWNG] -STR_NAME :Chinese Junk Swing Ride +STR_NAME :차이니즈 정크 스윙 라이드 STR_DESC :Ship is attached to an arm with a counterweight at the opposite end, and swings through a complete 360 degrees STR_CPTY :승객 12명 [CROCFLUM] -STR_NAME :Crocodile Ride +STR_NAME :악어 라이드 STR_DESC :Crocodile-shaped boats travel along a water channel, splashing down steep slopes to soak the riders STR_CPTY :보트당 4명의 승객 [DHOWWATR] -STR_NAME :Dhow water ride +STR_NAME :다우 워터 라이드 STR_DESC :Decorative fishing boat, which the passengers paddle themselves STR_CPTY :보트당 2명의 승객 [DOLPHINR] -STR_NAME :Dolphin Ride +STR_NAME :돌고래 라이드 STR_DESC :Single-seater Dolphin-shaped vehicles which riders can drive themselves STR_CPTY :1 rider per vehicle [MANDARIN] -STR_NAME :Mandarin Duck Water Ride +STR_NAME :원앙새 워터 라이드 STR_DESC :Swan shaped boat, propelled by the pedalling front seat passengers STR_CPTY :보트당 4명의 승객 [MANTARAY] -STR_NAME :Manta Ray Ride +STR_NAME :쥐가오리 라이드 STR_DESC :Large capacity boats travel along a wide water channel, propelled up slopes by a conveyor belt, accelerating down steep slopes to soak the riders with a giant splash STR_CPTY :보트당 16명의 승객 [OUTRIGGR] -STR_NAME :Outrigger Ride +STR_NAME :아웃리거 라이드 STR_DESC :Long canoes which the passengers paddle themselves STR_CPTY :canoe당 2명의 승객 [TUTLBOAT] -STR_NAME :Turtle Water Ride +STR_NAME :거북이 워터 라이드 STR_DESC :Small circular dinghies powered by a centrally-mounted motor controlled by the passengers STR_CPTY :보트당 2명의 승객 [1X1ATRE2] -STR_NAME :Vine Tree +STR_NAME :덩굴 [1X1ATREE] -STR_NAME :Low 수풀 +STR_NAME :키 작은 수풀 [1X1BRANG] -STR_NAME :Boomerang +STR_NAME :부메랑 [1X1DIDGE] -STR_NAME :Digeridoo +STR_NAME :디제리두 [1X1EMUXX] -STR_NAME :Emu +STR_NAME :에뮤 [1X1JUGT2] STR_NAME :Small Rainforest Tree 1 @@ -6694,13 +6699,13 @@ STR_NAME :Small Rainforest Tree 1 STR_NAME :Small Rainforest Tree 2 [1X1KANGA] -STR_NAME :Kangaroo +STR_NAME :캥거루 [1X1TERMM] STR_NAME :Termite Mound [ADPANDA] -STR_NAME :Adult Panda +STR_NAME :어른 팬더 [ANTILOPF] STR_NAME :Antelope Female @@ -6712,7 +6717,7 @@ STR_NAME :Antelope Male STR_NAME :Antelope Pair [BABPANDA] -STR_NAME :Baby Panda +STR_NAME :아기 팬더 [BABYELE] STR_NAME :Baby Indian Elephant @@ -6724,52 +6729,52 @@ STR_NAME :Ball Lantern STR_NAME :Ball Lantern [BambooBs] -STR_NAME :Bamboo 수풀 +STR_NAME :대나무 수풀 [BAMBOOPL] STR_NAME :Bamboo Plinth [BSTATUE1] -STR_NAME :Broken Statue +STR_NAME :부서진 동상 [FSTATUE1] STR_NAME :Fixed Statue [JACHTREE] -STR_NAME :Japanese Cherry Tree +STR_NAME :벚나무 [JAPCHBLO] -STR_NAME :Japanese Cherry Blossom Tree +STR_NAME :벚나무 [JAPPINTR] -STR_NAME :Japanese Pine Tree +STR_NAME :일본 소나무 [JAPSNOTR] -STR_NAME :Japanese Snowball Tree +STR_NAME :까마귀밥나무 [ORIEGONG] -STR_NAME :Asian Gong +STR_NAME :징 [PCG] -STR_NAME :Pipe +STR_NAME :파이프 [PCO] -STR_NAME :Pipe +STR_NAME :파이프 [POSTBOX] -STR_NAME :British Post Box +STR_NAME :영국식 우편함 [PST] -STR_NAME :Pipe +STR_NAME :파이프 [PTJ] -STR_NAME :Pipe +STR_NAME :파이프 [PTK] -STR_NAME :Pipe +STR_NAME :파이프 [PVA] -STR_NAME :Pipe +STR_NAME :파이프 [RBRICK01] STR_NAME :Red Brick Inverted Roof Piece @@ -6889,22 +6894,22 @@ STR_NAME :Georgian Flat Roof Corner STR_NAME :Georgian Roof Piece 7 [ROOFICE1] -STR_NAME :Ice Roof +STR_NAME :눈 지붕 [ROOFICE2] -STR_NAME :Ice Roof +STR_NAME :눈 지붕 [ROOFICE3] -STR_NAME :Ice Roof +STR_NAME :눈 지붕 [ROOFICE4] -STR_NAME :Ice Roof +STR_NAME :눈 지붕 [ROOFICE5] -STR_NAME :Ice Roof +STR_NAME :눈 지붕 [ROOFICE6] -STR_NAME :Ice Roof +STR_NAME :눈 지붕 [RKREML01] STR_NAME :Kremlin Minaret Piece 1 @@ -6970,28 +6975,28 @@ STR_NAME :Curved Mud Wall Piece STR_NAME :Mud Roof Piece [ROOFIG01] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [ROOFIG02] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [ROOFIG03] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [ROOFIG04] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [ROOFIG06] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [RSHOGI1] -STR_NAME :Shogi Roof +STR_NAME :장기 지붕 [RSHOGI2] -STR_NAME :Shogi Roof +STR_NAME :장기 지붕 [RSHOGI3] -STR_NAME :Shogi Roof +STR_NAME :장기 지붕 [SMALLGEO] STR_NAME :Small Geosphere @@ -7054,7 +7059,7 @@ STR_NAME :Tee Pee STR_NAME :Wagon Wheel [SBH2SHLT] -STR_NAME :Search Light +STR_NAME :서치라이트 [SBH3CAC1] STR_NAME :선인장 @@ -7069,7 +7074,7 @@ STR_NAME :선인장 STR_NAME :Cattle Skull [SBH3OSCR] -STR_NAME :Rollercoaster Award Statue +STR_NAME :롤러코스터 어워드 상 [SBH3PLM1] STR_NAME :야자수 @@ -7081,7 +7086,7 @@ STR_NAME :야자수 STR_NAME :야자수 [SBH3RT66] -STR_NAME :Route 66 Sign +STR_NAME :66번도 팻말 [SBH4TOTM] STR_NAME :Large Totem Pole @@ -8299,10 +8304,10 @@ STR_NAME :Ice Wall STR_NAME :Ice Wall [WIGLOO1] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [WIGLOO2] -STR_NAME :Igloo Wall +STR_NAME :이글루 벽 [WKREML07] STR_NAME :Kremlin Wall Piece 5 @@ -8608,19 +8613,19 @@ STR_DESC :Large capacity themed monorail trains with streamlined front and re STR_CPTY :5 or 10 passengers per car [BMVOCTPS] -STR_NAME :Blob from Outer Space Ride +STR_NAME :외계 전망탑 STR_DESC :A themed rotating observation cabin which travels up a tall tower STR_CPTY :승객 20명 [CYCLOPSX] STR_NAME :사이클롭스 라이드 STR_DESC :Riders drive the Eye of a Giant Cyclops -STR_CPTY :1 person per car +STR_CPTY :차량당 1명의 손님 [FIGTKNIT] -STR_NAME :Fighting Knights Dodgem Cars +STR_NAME :파이팅 나이트 범퍼카 STR_DESC :Riders joust on Horse-themed dodgem cars -STR_CPTY :1 person per car +STR_CPTY :차량당 1명의 손님 [FLWRPOWR] STR_NAME :가든 파워 라이드 @@ -8628,241 +8633,241 @@ STR_DESC :Small flower shaped dinghies powered by a centrally-mounted motor c STR_CPTY :승객 1명 per car [FUNHOUSE] -STR_NAME :Fun House +STR_NAME :펀 하우스 STR_DESC :건물 containing moving walls and floors to disorientate people walking through it STR_CPTY :손님 5명 [HALOFMRS] -STR_NAME :Hall of Mirrors +STR_NAME :거울의 방 STR_DESC :건물 containing warped mirrors which distort the reflection of the viewer STR_CPTY :손님 5명 [HOVERCAR] -STR_NAME :Hover Car Ride +STR_NAME :호버 카 라이드 STR_DESC :Mag Lev technology has been implemented to create the illusion of futuristic hover cars STR_CPTY :차량당 2명의 승객 [MGR2] -STR_NAME :Double Deck Carousel +STR_NAME :2층 회전목마 STR_DESC :Traditional enclosed double-deck carousel with carved wooden horses STR_CPTY :승객 32명 [PEGASUSX] -STR_NAME :Pegasus Ride +STR_NAME :페가수스 라이드 STR_DESC :Powered vehicles in the shape of Pegasus drawing a cart, follow a track-based route STR_CPTY :차량당 2명의 승객 [SPOKPRSN] -STR_NAME :Haunted Jail House -STR_DESC :건물 containing dungeons and mannequins of incarcerated figures, to scare people walking through it +STR_NAME :귀신의 감옥집 +STR_DESC :Building containing dungeons and mannequins of incarcerated figures, to scare people walking through it STR_CPTY :손님 16명 [TIMEMACH] -STR_NAME :Time Machine +STR_NAME :타임 머신 STR_DESC :Guests sit in a specially designed sphere, and experience the illusion of time travel -STR_CPTY :1 per guest +STR_CPTY :손님 1명 [TRICATOP] -STR_NAME :Triceratops Dodgem Cars +STR_NAME :트리케라톱스 범퍼카 STR_DESC :Riders lock horns with each other in Triceratops dodgem cars -STR_CPTY :1 person per car +STR_CPTY :차량당 1명의 손님 [BARNSTRM] -STR_NAME :BarnStorming Coaster +STR_NAME :선거 유세 코스터 STR_DESC :Riders sit in seats suspended beneath the track as they speed through giant loops, twists, and large swooping drops STR_CPTY :차량당 4명의 승객 [BATTRRAM] -STR_NAME :Battering Ram Coaster +STR_NAME :공성 망치 코스터 STR_DESC :A compact steel-tracked roller coaster with a spiral lift hill and cars with in-line seating STR_CPTY :차량당 6명의 승객 [BLCKDETH] -STR_NAME :Black Death Ride +STR_NAME :블랙 데스 라이드 STR_DESC :Riders career down a twisting track in Rat-shaped cars guided only by the curvature and banking of the semi-circular track STR_CPTY :차량당 2명의 승객 [CERBERUS] -STR_NAME :Cerberus Coaster +STR_NAME :케르베로스 코스터 STR_DESC :Sitting in comfortable trains with only simple lap restraints riders enjoy giant smooth drops and twisting track as well as plenty of 'air time' over the hills STR_CPTY :차량당 4명의 승객 [DRAGNFLY] -STR_NAME :Dragonfly Coaster +STR_NAME :잠자리 코스터 STR_DESC :Passengers ride suspended in a specially designed car from the single-rail track, swinging freely from side to side around corners STR_CPTY :승객 2명 per car [GANSTRCR] -STR_NAME :Gangster Car Coaster +STR_NAME :갱스터 카 코스터 STR_DESC :1920s Themed Gangster cars are accelerated out of the station by linear induction motors to speed through twisting inversions STR_CPTY :차량당 4명의 승객 [HARPIESX] -STR_NAME :Harpies Coaster +STR_NAME :하피 코스터 STR_DESC :Riders are held in special harnesses in a lying-down position, travelling through twisted track and inversions either on their backs or facing the ground STR_CPTY :차량당 4명의 승객 [HOTRODXX] -STR_NAME :Hot Rod Coaster +STR_NAME :개조 자동차 코스터 STR_DESC :After an exhilarating air-powered launch, the train speeds up a vertical track, over the top, and vertically down the other side to return to the station STR_CPTY :차량당 2명의 승객 [HOVERBKE] -STR_NAME :Hover Bike Ride +STR_NAME :호버 바이크 라이드 STR_DESC :Riders sit on futuristic bike-shaped vehicles which travel along a single-rail track STR_CPTY :2 riders per vehicle [HOVRBORD] -STR_NAME :Hoverboard Coaster +STR_NAME :호버보드 코스터 STR_DESC :Guests ride on a futuristic hoverboard, swinging freely from side to side around corners STR_CPTY :승객 2명 per car [JETPACKX] -STR_NAME :Jet Pack Booster +STR_NAME :제트 팩 부스터 STR_DESC :Riders sit in a vehicle which is launched up a vertical section of track STR_CPTY :차량당 8명의 승객 [JETPLANE] -STR_NAME :Jet Plane Coaster +STR_NAME :제트여객기 코스터 STR_DESC :A compact roller coaster with individual cars and smooth twisting drops STR_CPTY :차량당 4명의 승객 [JOUSTING] -STR_NAME :Jousting Knights Coaster +STR_NAME :저스팅 나이트 코스터 STR_DESC :Riders sit on the back of Horse-shaped vehicles along a single-rail track STR_CPTY :2 riders per vehicle [POLCHASE] -STR_NAME :Police Chase Coaster +STR_NAME :폴리스 체이스 코스터 STR_DESC :A looping roller coaster where the riders ride in a sitting position STR_CPTY :차량당 4명의 승객 [POLICECR] -STR_NAME :Police Car Coaster +STR_NAME :폴리스 카 코스터 STR_DESC :1960s Themed Police cars run on wooden tracks, turning around on special reversing sections STR_CPTY :차량당 6명의 승객 [PTERODAC] -STR_NAME :Pterodactyl Coaster +STR_NAME :익룡 코스터 STR_DESC :Riders are held in comfortable seats below the track, travelling through twisted track to give the ultimate prehistoric flying experience STR_CPTY :차량당 4명의 승객 [RAPTORXX] -STR_NAME :Raptor Racers Coaster +STR_NAME :랩터 레이서 코스터 STR_DESC :Riders sit on the back of Raptor-shaped vehicles along a single-rail track STR_CPTY :2 riders per vehicle [SEAPLANE] -STR_NAME :Seaplane Ride +STR_NAME :수상비행기 라이드 STR_DESC :Suspended roller coaster train consisting of cars able to swing freely as the train goes around corners STR_CPTY :차량당 4명의 승객 [STAMPHRD] -STR_NAME :Stampeding Herd Coaster +STR_NAME :소 떼 코스터 STR_DESC :A looping roller coaster with vehicles in the shape of a stampeding dinosaur herd. STR_CPTY :차량당 4명의 승객 [VALKYRIE] -STR_NAME :Valkyries Coaster +STR_NAME :발키리 코스터 STR_DESC :Extra-wide cars descend completely vertical sloped track for the ultimate freefall roller coaster experience STR_CPTY :차량당 6명의 승객 [1920RACR] -STR_NAME :1920's Racing Cars +STR_NAME :1920년대 레이싱 카 STR_DESC :Riders race each other in a 1920's Race Car themed Go-Kart STR_CPTY :Single-seater [CAVMNCAR] -STR_NAME :Caveman Cars +STR_NAME :석기시대 차 STR_DESC :Riders race each other in Stone-Age Go-Karts STR_CPTY :Single-seater [DINOEGGS] -STR_NAME :공룡 Egg Ride +STR_NAME :공룡 알 라이드 STR_DESC :Riders ride in pairs, in themed seats rotating around an animated mother Dinosaur. STR_CPTY :승객 18명 [FLALMACE] -STR_NAME :Mace Ride +STR_NAME :메이스 라이드 STR_DESC :Riders sit on a themed chair which is attached to a motor driven spinning arm. STR_CPTY :1 guest per chair [GINTSPDR] -STR_NAME :B-Movie Giant Spider Ride +STR_NAME :B급 영화 자이언트 스파이더 라이드 STR_DESC :Riders ride in pairs of themed seats which rotate around a large B-Movie Spider. STR_CPTY :승객 18명 [MICROBUS] -STR_NAME :MicroBus Ride +STR_NAME :마이크로버스 라이드 STR_DESC :Riders view a film inside the motion simulator pod while it is twisted and moved around by a hydraulic arm STR_CPTY :승객 8명 [NEPTUNEX] -STR_NAME :Neptune Ride +STR_NAME :넵튠 라이드 STR_DESC :Riders ride in pairs, in themed seats rotating around an animated statue of Neptune. STR_CPTY :승객 18명 [TOMMYGUN] -STR_NAME :Tommy Gun Ride +STR_NAME :기관 단총 라이드 STR_DESC :Riders ride in pairs of themed seats which rotate around a large replica Tommy Gun. STR_CPTY :승객 18명 [TREBUCHT] -STR_NAME :Trebuchet Ride +STR_NAME :투석기 라이드 STR_DESC :Passengers ride in a carriage suspended by two large arms, based on a Dark Age Siege Weapon STR_CPTY :승객 8명 [FLYGBOAT] -STR_NAME :Flying Boat Ride +STR_NAME :플라잉 보트 라이드 STR_DESC :Flying Boat shaped cars run on roller coaster track to allow twisting curves and steep drops, splashing down into sections of water for gentle river sections STR_CPTY :보트당 16명의 승객 [OAKBAREL] -STR_NAME :Oak Barrel Ride +STR_NAME :참나무 통 라이드 STR_DESC :Oak Barrels meander along a wide water channel, splashing through waterfalls and thrilling riders through foaming rapids STR_CPTY :보트당 8명의 승객 [RIVRSTYX] -STR_NAME :River Styx +STR_NAME :스틱스 강 STR_DESC :Raft-shaped boats gently meander around a river track STR_CPTY :raft당 4명의 승객 [TRILOBTE] -STR_NAME :Trilobite Boats +STR_NAME :삼엽충 보트 STR_DESC :Trilobite shaped cars run on roller coaster track to allow twisting curves and steep drops, splashing down into sections of water for gentle river sections STR_CPTY :보트당 16명의 승객 [1920SAND] -STR_NAME :Art Deco Food Stall -STR_DESC :A stall selling Noodles and Fresh Lemonade +STR_NAME :아르데코 음식 상점 +STR_DESC :국수와 신선한 레모네이드를 파는 가게 [1960TSRT] -STR_NAME :꽃 Power T-Shirts -STR_DESC :Stall selling T-shirts with a flower motif +STR_NAME :사랑과 평화 티셔츠 +STR_DESC :꽃무늬 티셔츠를 파는 상점 [MEDISOUP] -STR_NAME :Witches Brew Soup -STR_DESC :A Stall selling a thick broth style soup +STR_NAME :마녀의 비약 수프 +STR_DESC :걸쭉한 죽 스타일의 수프를 파는 가게 [MKTSTAL1] -STR_NAME :Toffee Apple Market Stall -STR_DESC :A themed stall selling sticky toffee apples. +STR_NAME :사과 토피 사탕 시장 상점 +STR_DESC :끈적거리는 사과 토피 사탕을 파는 가게 [MKTSTAL2] -STR_NAME :Lemonade Market Stall -STR_DESC :A themed stall selling old style, fresh lemonade. +STR_NAME :레모네이드 시장 상점 +STR_DESC :신선한 레모네이드를 파는 오래된 테마의 가게 [MOONJUCE] -STR_NAME :Moon Juice -STR_DESC :A stall selling the latest soft drinks +STR_NAME :달빛 주스 +STR_DESC :최신 청량음료를 파는 가게 [MYTHOSEA] -STR_NAME :Neptune's Seafood Stall -STR_DESC :A stall selling Neptunes salty treats +STR_NAME :포세이돈의 해산물 가게 +STR_DESC :포세이돈의 짭짤한 음식을 파는 가게 [SOFTOYST] -STR_NAME :Soft Toy Stall -STR_DESC :A stall selling a cute soft toy Dinosaur +STR_NAME :봉제인형 가게 +STR_DESC :귀엽고 부드러운 공룡 인형을 파는 가게 [1920SLMP] STR_NAME :Period Street Lamps @@ -9276,13 +9281,13 @@ STR_NAME :Small Angled Mammoth Fence STR_NAME :Small Angled Mammoth Fence [MCASTL02] -STR_NAME :Castle Wall +STR_NAME :성벽 [MCASTL03] -STR_NAME :Castle Wall +STR_NAME :성벽 [MCASTL04] -STR_NAME :Castle Wall +STR_NAME :성벽 [MCASTL05] STR_NAME :Castle Ramparts Corner @@ -9333,73 +9338,73 @@ STR_NAME :Meteor Crater Wall with Crystals STR_NAME :Minotaur Statue [OLDNYK01] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK02] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK03] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK04] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK05] -STR_NAME :New York Roof Piece +STR_NAME :뉴욕 지붕 조각 [OLDNYK06] -STR_NAME :New York Corner Filler +STR_NAME :뉴욕 구석 충전제 [OLDNYK07] -STR_NAME :New York Inverted Corner Piece +STR_NAME :반전된 뉴욕 구석 조각 [OLDNYK08] -STR_NAME :New York Inverted Corner Piece +STR_NAME :반전된 뉴욕 구석 조각 [OLDNYK09] -STR_NAME :New York Inverted Corner Piece +STR_NAME :반전된 뉴욕 구석 조각 [OLDNYK10] -STR_NAME :New York Inverted Corner Piece +STR_NAME :반전된 뉴욕 구석 조각 [OLDNYK11] -STR_NAME :New York Wall with Line +STR_NAME :선이 있는 뉴욕 벽 [OLDNYK12] -STR_NAME :New York Washing Line +STR_NAME :뉴욕 빨랫줄 [OLDNYK13] -STR_NAME :New York Wall with Line +STR_NAME :선이 있는 뉴욕 벽 [OLDNYK14] -STR_NAME :New York Washing Line +STR_NAME :뉴욕 빨랫줄 [OLDNYK15] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK16] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK17] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK18] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK19] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK31] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK33] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK34] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK35] -STR_NAME :New York Roof Piece +STR_NAME :뉴욕 지붕 조각 [PRIMWAL1] STR_NAME :Wood Fence with Dead Vines @@ -10208,16 +10213,16 @@ STR_NAME :Castle Entrance STR_NAME :Large Elm Tree [OLDNYK24] -STR_NAME :New York Inverted Corner Roof +STR_NAME :뉴욕 Inverted Corner Roof [OLDNYK25] -STR_NAME :New York Roof Piece +STR_NAME :뉴욕 Roof Piece [OLDNYK26] -STR_NAME :New York Entrance +STR_NAME :뉴욕 Entrance [OLDNYK32] -STR_NAME :New York Roof Piece +STR_NAME :뉴욕 Roof Piece [1950SCAR] STR_NAME :1950s Car @@ -10370,28 +10375,28 @@ STR_NAME :Meteor Crater Corner STR_NAME :Meteor Crater Inverted Corner [OLDNYK20] -STR_NAME :New York Roof Piece +STR_NAME :뉴욕 Roof Piece [OLDNYK21] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK22] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK23] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK27] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK28] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK29] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [OLDNYK30] -STR_NAME :New York Wall Piece +STR_NAME :뉴욕 벽 조각 [PEASTHUT] STR_NAME :Peasant Hut @@ -10706,12 +10711,12 @@ STR_DTLS :식스 플래그의 빠진 놀이기구를 건설해보거나, 공 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. +STR_DTLS :다이아몬드 폐광을 물려받은 당신은 값비싼 다이아몬드를 발견했고 그 판매 수익으로 세계 일류의 테마파크를 짓기로 결심했습니다. 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. +STR_DTLS :사막에서 놀이공원을 짓기에 아주 적당한 오아시스를 발견했습니다. 오아시스로 가는 교통편은 이미 존재합니다. STR_SCNR :아프리카 - 빅토리아 폭포 @@ -10719,9 +10724,9 @@ STR_PARK :폭포 너머 STR_DTLS :공원을 운영하기 충분하고 값싼 전기를 생산하는 수력 발전 댐이 지어졌습니다. 댐을 건설하느라 진 빚을 갚기 위해 높은 가치의 놀이공원을 지어야 합니다. -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. +STR_SCNR :남극 - 버려진 환경 복구 +STR_PARK :얼음에 뒤덮인 모험 +STR_DTLS :환경부에서 눈꼴사납고 낡은 정유 시설을 최고의 관광 명소로 만들어달라고 합니다. 땅값은 싸지만 대출 이자는 높습니다. 오래된 건물은 고철로 팔아 버릴 수 있습니다. STR_SCNR :아시아 - 중국 만리장성의 관광 진흥 @@ -10731,22 +10736,22 @@ STR_DTLS :관광 당국이 만리장성 주변의 땅에 놀이공원을 지 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. +STR_DTLS :기존 공원은 이미 공간이 모자랍니다. 대출을 받아서 바다로 확장해나갈 수밖에 없습니다. 지진 우려와 약한 기반을 이유로 건설 높이가 제한됩니다. 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 Maharaja's palace. +STR_DTLS :인도의 왕에게서 국민들에게 즐길 거리를 만들어달라는 임무를 받았습니다. 마하라자 궁전을 연상시키는 공원을 만들어보세요. 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. +STR_DTLS :오스트레일리아 원주민들을 도와 공원을 문화 인식 프로그램의 일환으로 개발하려 합니다. 원주민들의 독특한 문화유산을 알리기 위해 많은 관광객을 모아야 합니다. STR_SCNR :오스트레일리아 - 해변의 즐거움 -STR_PARK :Beach Barbecue Blast -STR_DTLS :A local entrepreneur's 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. +STR_PARK :해변의 바베큐 파티 +STR_DTLS :근처 지역 사업가의 해안 공원이 파산해버렸습니다. 이미 작은 공원을 운영하고 있는 당신은 건설사로부터 그 공원을 구입하였습니다. 두 공원을 합쳐 크게 사업을 확장해보세요. STR_SCNR :유럽 - 유럽 문화 축제 @@ -10756,22 +10761,22 @@ STR_DTLS :유럽 문화 축제의 경영권을 확보한 당신은 이제 유 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. +STR_DTLS :방치되어 있는 낡은 공원이 있습니다. 이 공원이 과거에 누렸던 영광을 재현하기 위해 유럽 연합의 허가를 받았습니다! 허가를 받은 만큼 공원을 혁신해서 보답하세요. 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 area's tourist attraction rating high. +STR_DTLS :하와이 주민들이 이제 파도타기가 지겨워져서 좀 더 자극적인 뭔가를 원하고 있습니다. 주민들도 만족시키면서 이 지역의 관광객들이 찾아오고 싶어하는 공원을 만드세요. STR_SCNR :북 아메리카 - 그랜드 캐니언 STR_PARK :불행의 계곡 -STR_DTLS :이 아름다운 자연의 한 켠에 있는 제한적인 공간에 공원을 만들어야 합니다. 미국 원주민에게서 반대편 땅을 구입할 수 있습니다. 줄어들고 있는 마을 인구를 유지하기 위해서라도 목표를 달성해야 합니다. +STR_DTLS :이 아름답지만 제한적인 공간에 공원을 만들어야 합니다. 미국 원주민에게서 반대편 땅을 구입할 수 있습니다. 줄어들고 있는 마을 인구를 유지하기 위해서라도 목표를 달성해야 합니다. STR_SCNR :북 아메리카 - 롤러코스터 천국 -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! +STR_PARK :롤러코스터 천국 +STR_DTLS :당신은 긴 휴식기를 가지는 동안 이 도시 공원을 롤러코스터 천국으로 바꾸고자 하는 성공한 사업 거물입니다. 돈은 문제가 되지 않는군요! STR_SCNR :남 아메리카 - 잃어버린 도시 잉카 @@ -10780,8 +10785,8 @@ STR_DTLS :이 지역의 관광산업을 보다 활기차게 만들기 위해 STR_SCNR :남 아메리카 - 열대우림 고원 -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. +STR_PARK :열대우림 고원 +STR_DTLS :소중한 열대우림 속의 제한된 공간만을 받았습니다. 이곳의 벌목 산업을 대신할 수 있는 방법을 제공하기 위해 기존의 빈 공간을 최대한 많이 활용해야 합니다. STR_SCNR :남 아메리카 - 리오 축제 @@ -10792,9 +10797,9 @@ STR_DTLS :리오 근처의 작은 공원을 운영하고 있는데 은행이 ## Time Twister Scenarios ############################################################################### -STR_SCNR :암흑 시대 - 성 +STR_SCNR :암흑시대 - 성 STR_PARK :클리프사이드 성 -STR_DTLS :Local members of the battle re-enactment society are rather serious about their hobby. They've entrusted you with the job of constructing a Dark Age theme park on the grounds of Cliffside Castle. +STR_DTLS :이 지역의 전투 재현 단체는 자신들의 취미를 진지하게 생각하고 있습니다. 그들은 당신에게 클리프사이드 성 부지에 암흑시대 테마파크를 건설해달라고 요청해왔습니다. STR_SCNR :암흑 시대 - 로빈 후드 @@ -10809,32 +10814,32 @@ STR_DTLS :먼 행성에서 생명체가 발견되었습니다. 외계인을 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. +STR_DTLS :당신의 미래에 대한 독창적이고 이상적인 시각을 보여줄 때입니다. 첨단의 매력이 느껴지는 미래의 공원 디자인을 제안해봅시다. STR_SCNR :신화 - 영화 세트장 -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. +STR_PARK :애니매트로닉 앤틱스 +STR_DTLS :이번 임무는 옛 영화 세트장에 설립된 기존 테마파크를 운영하고 발전시키는 것입니다. 흑백 스크린에 신화 속 인물을 옮겨놓은 스톱 모션 애니메이션의 선구자들에게 이 공원을 헌정합시다. STR_SCNR :신화 - 문명의 요람 STR_PARK :신화의 광기 -STR_DTLS :You own an island of particular archaeological value. You've decided to fund its preservation by constructing a theme park based on the area's rich Mythological heritage. +STR_DTLS :특별한 고고학적 가치를 가진 섬을 소유하게 되었습니다. 이 지역의 풍부한 신화적 유산을 기반으로 한 테마파크를 건설해서 유산 보존 기금을 마련하기로 결정했습니다. STR_SCNR :선사시대 - 소행성 충돌 후 STR_PARK :크레이터 대학살 -STR_DTLS :당신은 오래된 운석공을 소유하고 있습니다. 기업가 정신을 발휘한 당신은 운석 테마 파크를 건설해서 쓸모없어 보이는 이 땅을 엄청난 행운의 땅으로 바꾸기로 결심햇습니다. +STR_DTLS :당신은 오래된 운석공을 소유하고 있습니다. 기업가 정신을 발휘한 당신은 운석 테마 파크를 건설해서 쓸모없어 보이는 이 땅을 엄청난 행운의 땅으로 바꾸기로 결심했습니다. STR_SCNR :선사시대 - 쥐라기 사파리 STR_PARK :코스터사우르스 -STR_DTLS :You've 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. +STR_DTLS :당신은 쥐라기 시대 놀이공원을 건설하는 임무를 받았습니다. 색다른 식물과 동물 전시장에 관객이 쉽게 접근할 수 있도록 하려면, 계곡을 가로지르는 놀이기구를 만들어야 할 것입니다. STR_SCNR :선사시대 - 석기시대 -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. +STR_PARK :돌무더기 산책 +STR_DTLS :고속도로 개발자들을 막고 고대 열석을 보호하기 위해, 석기 시대 테마파크를 건설하여 수익을 내야 합니다. 하지만 사람이 살기 조금 힘든 곳인만큼 손님을 모으기가 어려울 것입니다. STR_SCNR :광란의 20년대 - 감옥 섬 @@ -10849,14 +10854,14 @@ STR_DTLS :할아버지의 슈나이더 컵 우승 75주년이 얼마 남지 STR_SCNR :광란의 20년대 - 마천루 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. +STR_DTLS :당신은 도시 저층부 근처의 빈 공간을 갖게 되었습니다. 최대한 이익을 많이 얻기 위해, 20년대에 유행했던 아르데코식 건축물을 본딴 마천루 테마파크를 지어보세요. -STR_SCNR :로큰롤 - 플라워 파워 +STR_SCNR :로큰롤 - 사랑과 평화 STR_PARK :우드스톡 STR_DTLS :매년 열리는 대형 음악 축제가 당신의 땅에서 열립니다. 최신 유행하는 놀이공원을 지어, 자유로운 영혼을 가진 관객들이 즐거워할 수 있게 만드세요. 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. +STR_DTLS :이 오래된 놀이공원은 더 나은 미래를 기대하고 있습니다. 소유자를 도와 이 공원을 복고풍의 로큰롤 공원으로 바꾸어 성공적인 장소로 변모시켜보세요. From ba038c10ab7d78cb2316c82bef092e544df71403 Mon Sep 17 00:00:00 2001 From: Ian Spence Date: Thu, 24 Dec 2015 00:00:41 -0800 Subject: [PATCH 06/42] Automatically open shops & stalls - Added a new option under misc to automatically open shops and stalls - Option is disabled by default - When enabled, shops & stalls are automatically opened right after being placed on the map --- data/language/english_uk.txt | 2 ++ src/config.c | 1 + src/config.h | 1 + src/localisation/string_ids.h | 3 +++ src/windows/options.c | 12 +++++++++++- src/windows/ride_construction.c | 6 ++++++ 6 files changed, 24 insertions(+), 1 deletion(-) diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 83ed7fc69b..024aa3a7a3 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3924,6 +3924,8 @@ STR_5582 :Trap mouse cursor in window STR_5583 :{COMMA1DP16}ms{POWERNEGATIVEONE} STR_5584 :SI STR_5585 :{SMALLFONT}{BLACK}Unlocks ride operation limits, allowing for things like {VELOCITY} lift hills +STR_5586 :Automatically open shops and stalls +STR_5587 :{SMALLFONT}{BLACK}When enabled, shops and stalls will be automatically opened after placing then in the map ##################### # Rides/attractions # diff --git a/src/config.c b/src/config.c index d25137180a..708154cb43 100644 --- a/src/config.c +++ b/src/config.c @@ -202,6 +202,7 @@ config_property_definition _generalDefinitions[] = { { offsetof(general_configuration, window_scale), "window_scale", CONFIG_VALUE_TYPE_FLOAT, { .value_float = 1.0f }, NULL }, { offsetof(general_configuration, show_fps), "show_fps", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, { offsetof(general_configuration, trap_cursor), "trap_cursor", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, + { offsetof(general_configuration, auto_open_shops), "auto_open_shops", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, }; config_property_definition _interfaceDefinitions[] = { diff --git a/src/config.h b/src/config.h index d0b9dfa72d..49d3ef42ad 100644 --- a/src/config.h +++ b/src/config.h @@ -171,6 +171,7 @@ typedef struct { float window_scale; uint8 show_fps; uint8 trap_cursor; + uint8 auto_open_shops; } general_configuration; typedef struct { diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 3ed880519a..b8956b8499 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2155,6 +2155,9 @@ enum { STR_KICK_PLAYER = 5556, STR_STAY_CONNECTED_AFTER_DESYNC = 5557, + STR_AUTO_OPEN_SHOPS = 5586, + STR_AUTO_OPEN_SHOPS_TIP = 5587, + STR_RESTART_REQUIRED = 5558, STR_LANGUAGE_LOAD_FAILED = 5561, diff --git a/src/windows/options.c b/src/windows/options.c index 692d581ddd..aaf5e14b74 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -150,6 +150,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_TITLE_SEQUENCE_BUTTON, WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, WIDX_STAY_CONNECTED_AFTER_DESYNC, + WIDX_AUTO_OPEN_SHOPS, // Twitch WIDX_CHANNEL_BUTTON = WIDX_PAGE_START, @@ -270,6 +271,7 @@ static rct_widget window_options_misc_widgets[] = { { WWT_DROPDOWN_BUTTON, 1, 26, 185, 189, 200, STR_EDIT_TITLE_SEQUENCES_BUTTON, STR_NONE }, // Title sequences button { WWT_CHECKBOX, 2, 10, 299, 204, 215, STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM_TIP }, // Allow loading with incorrect checksum { WWT_CHECKBOX, 2, 10, 299, 219, 230, STR_STAY_CONNECTED_AFTER_DESYNC, STR_NONE }, // Do not disconnect after the client desynchronises with the server + { WWT_CHECKBOX, 2, 10, 299, 234, 245, STR_AUTO_OPEN_SHOPS, STR_AUTO_OPEN_SHOPS_TIP }, // Automatically open shops & stalls { WIDGETS_END }, }; @@ -431,7 +433,8 @@ static uint32 window_options_page_enabled_widgets[] = { (1 << WIDX_TITLE_SEQUENCE_DROPDOWN) | (1 << WIDX_TITLE_SEQUENCE_BUTTON) | (1 << WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM) | - (1 << WIDX_STAY_CONNECTED_AFTER_DESYNC), + (1 << WIDX_STAY_CONNECTED_AFTER_DESYNC) | + (1 << WIDX_AUTO_OPEN_SHOPS), MAIN_OPTIONS_ENABLED_WIDGETS | (1 << WIDX_CHANNEL_BUTTON) | @@ -687,6 +690,11 @@ static void window_options_mouseup(rct_window *w, int widgetIndex) gConfigNetwork.stay_connected = !gConfigNetwork.stay_connected; config_save_default(); window_invalidate(w); + break; + case WIDX_AUTO_OPEN_SHOPS: + gConfigGeneral.auto_open_shops = !gConfigGeneral.auto_open_shops; + config_save_default(); + window_invalidate(w); } break; @@ -1345,6 +1353,7 @@ static void window_options_invalidate(rct_window *w) widget_set_checkbox_value(w, WIDX_DEBUGGING_TOOLS, gConfigGeneral.debugging_tools); widget_set_checkbox_value(w, WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, gConfigGeneral.allow_loading_with_incorrect_checksum); widget_set_checkbox_value(w, WIDX_STAY_CONNECTED_AFTER_DESYNC, gConfigNetwork.stay_connected); + widget_set_checkbox_value(w, WIDX_AUTO_OPEN_SHOPS, gConfigGeneral.auto_open_shops); window_options_misc_widgets[WIDX_REAL_NAME_CHECKBOX].type = WWT_CHECKBOX; window_options_misc_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_CHECKBOX; @@ -1359,6 +1368,7 @@ static void window_options_invalidate(rct_window *w) window_options_misc_widgets[WIDX_TITLE_SEQUENCE_BUTTON].type = WWT_DROPDOWN_BUTTON; window_options_misc_widgets[WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM].type = WWT_CHECKBOX; window_options_misc_widgets[WIDX_STAY_CONNECTED_AFTER_DESYNC].type = WWT_CHECKBOX; + window_options_misc_widgets[WIDX_AUTO_OPEN_SHOPS].type = WWT_CHECKBOX; break; case WINDOW_OPTIONS_PAGE_TWITCH: diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 19ce6f9bd1..68c71a752d 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -585,6 +585,12 @@ static void window_ride_construction_close(rct_window *w) uint8 rideIndex = _currentRideIndex; if (sub_6CAF80(rideIndex, &mapElement) || network_get_mode() == NETWORK_MODE_CLIENT) { + + rct_ride *ride = GET_RIDE(rideIndex); + if (ride->mode == RIDE_MODE_SHOP_STALL && gConfigGeneral.auto_open_shops) { + ride->status = 1; + } + window_ride_main_open(rideIndex); } else { int eax = RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8); From 434b62436ce1ba4de298e3da8fdafb672cca5cbf Mon Sep 17 00:00:00 2001 From: Ian Spence Date: Thu, 24 Dec 2015 08:44:12 -0800 Subject: [PATCH 07/42] Addresses code review comments --- data/language/english_uk.txt | 2 +- src/windows/ride_construction.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 024aa3a7a3..13bf2f8ae9 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3925,7 +3925,7 @@ STR_5583 :{COMMA1DP16}ms{POWERNEGATIVEONE} STR_5584 :SI STR_5585 :{SMALLFONT}{BLACK}Unlocks ride operation limits, allowing for things like {VELOCITY} lift hills STR_5586 :Automatically open shops and stalls -STR_5587 :{SMALLFONT}{BLACK}When enabled, shops and stalls will be automatically opened after placing then in the map +STR_5587 :{SMALLFONT}{BLACK}When enabled, shops and stalls will be automatically opened after building them ##################### # Rides/attractions # diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 68c71a752d..4d8c1c992c 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -588,7 +588,7 @@ static void window_ride_construction_close(rct_window *w) rct_ride *ride = GET_RIDE(rideIndex); if (ride->mode == RIDE_MODE_SHOP_STALL && gConfigGeneral.auto_open_shops) { - ride->status = 1; + ride->status = RIDE_STATUS_OPEN; } window_ride_main_open(rideIndex); From a0de23758eafbc68b4f5897f4d7f14506046ca5f Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Wed, 23 Dec 2015 02:55:53 +0900 Subject: [PATCH 08/42] Specify font name on all TTF descriptors. --- src/drawing/font.h | 1 + src/localisation/language.cpp | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/drawing/font.h b/src/drawing/font.h index de7abc298b..e680bb4322 100644 --- a/src/drawing/font.h +++ b/src/drawing/font.h @@ -23,6 +23,7 @@ enum { typedef struct { const utf8 *filename; + const utf8 *font_name; int ptSize; int offset_x; int offset_y; diff --git a/src/localisation/language.cpp b/src/localisation/language.cpp index 33adeb6e83..e9e01469b3 100644 --- a/src/localisation/language.cpp +++ b/src/localisation/language.cpp @@ -48,31 +48,31 @@ enum { }; static TTFFontSetDescriptor TTFFontMingLiu = {{ - { "msjh.ttc", 9, -1, -3, 6, nullptr }, - { "mingliu.ttc", 11, 1, 1, 12, nullptr }, - { "mingliu.ttc", 12, 1, 0, 12, nullptr }, - { "mingliu.ttc", 13, 1, 0, 20, nullptr }, + { "msjh.ttc", "JhengHei", 9, -1, -3, 6, nullptr }, + { "mingliu.ttc", "MingLiU", 11, 1, 1, 12, nullptr }, + { "mingliu.ttc", "MingLiU", 12, 1, 0, 12, nullptr }, + { "mingliu.ttc", "MingLiU", 13, 1, 0, 20, nullptr }, }}; static TTFFontSetDescriptor TTFFontSimSun = {{ - { "msyh.ttc", 9, -1, -3, 6, nullptr }, - { "simsun.ttc", 11, 1, -1, 14, nullptr }, - { "simsun.ttc", 12, 1, -2, 14, nullptr }, - { "simsun.ttc", 13, 1, 0, 20, nullptr }, + { "msyh.ttc", "YaHei", 9, -1, -3, 6, nullptr }, + { "simsun.ttc", "SimSun", 11, 1, -1, 14, nullptr }, + { "simsun.ttc", "SimSun", 12, 1, -2, 14, nullptr }, + { "simsun.ttc", "SimSun", 13, 1, 0, 20, nullptr }, }}; static TTFFontSetDescriptor TTFFontGulim = {{ - { "gulim.ttc", 11, 1, 0, 15, nullptr }, - { "gulim.ttc", 12, 1, 0, 17, nullptr }, - { "gulim.ttc", 12, 1, 0, 17, nullptr }, - { "gulim.ttc", 13, 1, 0, 20, nullptr }, + { "gulim.ttc", "Gulim", 11, 1, 0, 15, nullptr }, + { "gulim.ttc", "Gulim", 12, 1, 0, 17, nullptr }, + { "gulim.ttc", "Gulim", 12, 1, 0, 17, nullptr }, + { "gulim.ttc", "Gulim", 13, 1, 0, 20, nullptr }, }}; static TTFFontSetDescriptor TTFFontArial = {{ - { "arial.ttf", 8, 0, -1, 6, nullptr }, - { "arial.ttf", 10, 0, -1, 12, nullptr }, - { "arial.ttf", 11, 0, -1, 12, nullptr }, - { "arial.ttf", 12, 0, -1, 20, nullptr }, + { "arial.ttf", "Arial", 8, 0, -1, 6, nullptr }, + { "arial.ttf", "Arial", 10, 0, -1, 12, nullptr }, + { "arial.ttf", "Arial", 11, 0, -1, 12, nullptr }, + { "arial.ttf", "Arial", 12, 0, -1, 20, nullptr }, }}; const language_descriptor LanguagesDescriptors[LANGUAGE_COUNT] = { From dd604afc891dc8e8357ad5e2846768eb0864dda2 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Wed, 23 Dec 2015 02:56:47 +0900 Subject: [PATCH 09/42] Use FontConfig to find suitable TrueType fonts on Linux and OS X. Fixes #2537. --- CMakeLists.txt | 5 +++++ src/drawing/string.c | 7 +++++-- src/platform/platform.h | 2 ++ src/platform/posix.c | 28 ++++++++++++++++++++++++++++ src/platform/windows.c | 8 ++++++++ 5 files changed, 48 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b88bc3f3c1..c54b8d22b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,11 @@ if (UNIX) list(APPEND RCT2_SECTIONS "${CMAKE_BINARY_DIR}/openrct2_data_section.o" "${CMAKE_BINARY_DIR}/openrct2_text_section.o") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-T,\"${CMAKE_CURRENT_SOURCE_DIR}/distribution/linux/ld_script.xc\"") endif (APPLE) + + # FontConfig for TrueType fonts. + find_path(FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) + find_library(FONTCONFIG_LIBRARY NAMES fontconfig) + TARGET_LINK_LIBRARIES(${PROJECT} ${FONTCONFIG_LIBRARY}) endif (UNIX) # install into ${CMAKE_INSTALL_PREFIX}/bin/ diff --git a/src/drawing/string.c b/src/drawing/string.c index f4241b4b4e..f12f0af0e0 100644 --- a/src/drawing/string.c +++ b/src/drawing/string.c @@ -888,8 +888,11 @@ bool ttf_initialise() for (int i = 0; i < 4; i++) { TTFFontDescriptor *fontDesc = &(gCurrentTTFFontSet->size[i]); - utf8 fontPath[MAX_PATH] = "C:\\Windows\\Fonts\\"; - strcat(fontPath, fontDesc->filename); + utf8 fontPath[MAX_PATH]; + if (!platform_get_font_path(fontDesc, fontPath)) { + log_error("Unable to load font '%s'", fontDesc->font_name); + return false; + } fontDesc->font = TTF_OpenFont(fontPath, fontDesc->ptSize); if (fontDesc->font == NULL) { diff --git a/src/platform/platform.h b/src/platform/platform.h index 0d65b6c566..c9e3eb23ad 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -28,6 +28,7 @@ #include #include "../common.h" +#include "../drawing/font.h" #ifndef MAX_PATH #define MAX_PATH 260 @@ -161,6 +162,7 @@ uint8 platform_get_locale_currency(); uint16 platform_get_locale_language(); uint8 platform_get_locale_measurement_format(); uint8 platform_get_locale_temperature_format(); +bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer); bool platform_check_steam_overlay_attached(); diff --git a/src/platform/posix.c b/src/platform/posix.c index 8a09b85b6f..8bfd8eb260 100644 --- a/src/platform/posix.c +++ b/src/platform/posix.c @@ -37,6 +37,7 @@ #include #include #include +#include "fontconfig/fontconfig.h" // The name of the mutex used to prevent multiple instances of the game from running #define SINGLE_INSTANCE_MUTEX_NAME "RollerCoaster Tycoon 2_GSKMUTEX" @@ -757,4 +758,31 @@ uint8 platform_get_locale_temperature_format(){ return TEMPERATURE_FORMAT_C; } +bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) +{ + FcConfig* config = FcInitLoadConfigAndFonts(); + FcPattern* pat = FcNameParse((const FcChar8*) font->font_name); + + FcConfigSubstitute(config, pat, FcMatchPattern); + FcDefaultSubstitute(pat); + + bool found = false; + FcResult result = FcResultNoMatch; + FcPattern* match = FcFontMatch(config, pat, &result); + + if (match) + { + FcChar8* filename = NULL; + if (FcPatternGetString(match, FC_FILE, 0, &filename) == FcResultMatch) + { + found = true; + strcpy(buffer, (utf8*) filename); + } + FcPatternDestroy(match); + } + + FcPatternDestroy(pat); + return found; +} + #endif diff --git a/src/platform/windows.c b/src/platform/windows.c index d07f765fcd..5b1476b769 100644 --- a/src/platform/windows.c +++ b/src/platform/windows.c @@ -897,4 +897,12 @@ void platform_get_exe_path(utf8 *outPath) _wfullpath(exePath, tempPath, MAX_PATH); WideCharToMultiByte(CP_UTF8, 0, exePath, countof(exePath), outPath, MAX_PATH, NULL, NULL); } + +void platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) +{ + strcpy(buffer, "C:\\Windows\\Fonts\\"); + strcat(buffer, font->filename); + return true; +} + #endif From 9b838aa0ee977e89d6dddd521a640277e2af6016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Thu, 24 Dec 2015 09:50:57 +0000 Subject: [PATCH 10/42] Add missing fontconfig lib for Travis and Docker --- CMakeLists.txt | 14 ++++++-------- dockerfiles/32bit/Dockerfile | 2 +- scripts/linux/install.sh | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c54b8d22b4..6e00316bb7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,12 +86,15 @@ else (WIN32) PKG_CHECK_MODULES(SPEEX REQUIRED speexdsp) endif (WIN32) -# Include libdl for dlopen if (UNIX) + # Include libdl for dlopen set(DLLIB dl) + + # FontConfig for TrueType fonts. + PKG_CHECK_MODULES(FONTCONFIG REQUIRED fontconfig) endif (UNIX) -INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${LIBCURL_INCLUDE_DIRS} ${JANSSON_INCLUDE_DIRS} ${SPEEX_INCLUDE_DIRS}) +INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${LIBCURL_INCLUDE_DIRS} ${JANSSON_INCLUDE_DIRS} ${SPEEX_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIRS}) LINK_DIRECTORIES(${SDL2_LIBRARY_DIRS} ${JANSSON_LIBRARY_DIRS} ${LIBCURL_LIBRARY_DIRS}) @@ -161,11 +164,6 @@ if (UNIX) list(APPEND RCT2_SECTIONS "${CMAKE_BINARY_DIR}/openrct2_data_section.o" "${CMAKE_BINARY_DIR}/openrct2_text_section.o") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-T,\"${CMAKE_CURRENT_SOURCE_DIR}/distribution/linux/ld_script.xc\"") endif (APPLE) - - # FontConfig for TrueType fonts. - find_path(FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) - find_library(FONTCONFIG_LIBRARY NAMES fontconfig) - TARGET_LINK_LIBRARIES(${PROJECT} ${FONTCONFIG_LIBRARY}) endif (UNIX) # install into ${CMAKE_INSTALL_PREFIX}/bin/ @@ -174,7 +172,7 @@ endif (UNIX) # libopenrct2.dll -> openrct2.dll set_target_properties(${PROJECT} PROPERTIES PREFIX "") -TARGET_LINK_LIBRARIES(${PROJECT} ${SDL2_LIBRARIES} ${ORCTLIBS_LIB} ${HTTPLIBS} ${NETWORKLIBS} ${SPEEX_LIBRARIES} ${DLLIB} ${RCT2_SECTIONS}) +TARGET_LINK_LIBRARIES(${PROJECT} ${SDL2_LIBRARIES} ${ORCTLIBS_LIB} ${HTTPLIBS} ${NETWORKLIBS} ${SPEEX_LIBRARIES} ${DLLIB} ${RCT2_SECTIONS} ${FONTCONFIG_LIBRARIES}) # CMake does not allow specifying a dependency chain which includes built-in # targets, like `install`, so we have to trick it and execute dependency ourselves. diff --git a/dockerfiles/32bit/Dockerfile b/dockerfiles/32bit/Dockerfile index 30ce06b4c4..8a6590cc99 100644 --- a/dockerfiles/32bit/Dockerfile +++ b/dockerfiles/32bit/Dockerfile @@ -26,4 +26,4 @@ RUN pacman -R --noconfirm gcc RUN yes | pacman -S gcc-libs-multilib RUN pacman -S --noconfirm gcc-multilib USER travis -RUN yaourt -S --noconfirm lib32-jansson lib32-curl lib32-sdl2 lib32-sdl2_ttf lib32-speex +RUN yaourt -S --noconfirm lib32-jansson lib32-curl lib32-sdl2 lib32-sdl2_ttf lib32-speex lib32-fontconfig diff --git a/scripts/linux/install.sh b/scripts/linux/install.sh index e56c80384e..466a7d44e0 100755 --- a/scripts/linux/install.sh +++ b/scripts/linux/install.sh @@ -171,7 +171,7 @@ elif [[ $(uname) == "Linux" ]]; then "linux") sudo dpkg --add-architecture i386 sudo apt-get update - sudo apt-get install --no-install-recommends -y --force-yes cmake libsdl2-dev:i386 libsdl2-ttf-dev:i386 gcc-4.8 pkg-config:i386 g++-4.8-multilib gcc-4.8-multilib libjansson-dev:i386 libspeex-dev:i386 libspeexdsp-dev:i386 libcurl4-openssl-dev:i386 libcrypto++-dev:i386 clang + sudo apt-get install --no-install-recommends -y --force-yes cmake libsdl2-dev:i386 libsdl2-ttf-dev:i386 gcc-4.8 pkg-config:i386 g++-4.8-multilib gcc-4.8-multilib libjansson-dev:i386 libspeex-dev:i386 libspeexdsp-dev:i386 libcurl4-openssl-dev:i386 libcrypto++-dev:i386 clang libfontconfig1-dev:i386 libfreetype6-dev:i386 libpng-dev:i386 download https://launchpad.net/ubuntu/+archive/primary/+files/libjansson4_2.7-1ubuntu1_i386.deb libjansson4_2.7-1ubuntu1_i386.deb download https://launchpad.net/ubuntu/+archive/primary/+files/libjansson-dev_2.7-1ubuntu1_i386.deb libjansson-dev_2.7-1ubuntu1_i386.deb sudo dpkg -i libjansson4_2.7-1ubuntu1_i386.deb From 8bdec9f68e7b09b1519668f4c0b447c3c0344959 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Fri, 25 Dec 2015 01:45:18 +0900 Subject: [PATCH 11/42] Experimental: use SHGetKnownFolderPath to get font path on Windows. --- src/platform/windows.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/platform/windows.c b/src/platform/windows.c index 5b1476b769..39b478d69b 100644 --- a/src/platform/windows.c +++ b/src/platform/windows.c @@ -898,11 +898,28 @@ void platform_get_exe_path(utf8 *outPath) WideCharToMultiByte(CP_UTF8, 0, exePath, countof(exePath), outPath, MAX_PATH, NULL, NULL); } -void platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) +bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) { - strcpy(buffer, "C:\\Windows\\Fonts\\"); - strcat(buffer, font->filename); - return true; + wchar_t *fontFolder; + if (SUCCEEDED(SHGetKnownFolderPath(&FOLDERID_Fonts, 0, NULL, &fontFolder))) + { + // Convert wchar to utf8, then copy the font folder path to the buffer. + utf8 *outPathTemp = widechar_to_utf8(fontFolder); + strcpy(buffer, outPathTemp); + free(outPathTemp); + + CoTaskMemFree(fontFolder); + + // Append the requested font's file name. + const char separator[2] = { platform_get_path_separator(), 0 }; + strcat(buffer, separator); + strcat(buffer, font->filename); + return true; + } + else + { + return false; + } } #endif From 36581bd6649a449a36983da9f26b804a75b089c0 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Thu, 24 Dec 2015 17:21:44 +0000 Subject: [PATCH 12/42] return an exit code in publish script --- scripts/ps/publish.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ps/publish.ps1 b/scripts/ps/publish.ps1 index c55e4fb973..b626cbac14 100644 --- a/scripts/ps/publish.ps1 +++ b/scripts/ps/publish.ps1 @@ -178,3 +178,4 @@ switch ($Task) default { Write-Host "Unknown publish task." -ForegroundColor Red $result = 1 } } +exit $result From 474af5c20483b4255fae5655e5d32471e7adeb7d Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Fri, 25 Dec 2015 02:52:33 +0900 Subject: [PATCH 13/42] Use Cocoa APIs for font detection on OS X. Moving FontConfig to Linux platform only. --- src/platform/linux.c | 28 ++++++++++++++++++++++++++++ src/platform/osx.m | 16 ++++++++++++++++ src/platform/posix.c | 28 ---------------------------- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/src/platform/linux.c b/src/platform/linux.c index 3dc44da9b7..13d5244c61 100644 --- a/src/platform/linux.c +++ b/src/platform/linux.c @@ -24,6 +24,7 @@ #include #include #include "../util/util.h" +#include "fontconfig/fontconfig.h" // See http://syprog.blogspot.ru/2011/12/listing-loaded-shared-objects-in-linux.html struct lmap { @@ -163,4 +164,31 @@ int platform_open_common_file_dialog(int type, utf8 *title, utf8 *filename, utf8 return 0; } +bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) +{ + FcConfig* config = FcInitLoadConfigAndFonts(); + FcPattern* pat = FcNameParse((const FcChar8*) font->font_name); + + FcConfigSubstitute(config, pat, FcMatchPattern); + FcDefaultSubstitute(pat); + + bool found = false; + FcResult result = FcResultNoMatch; + FcPattern* match = FcFontMatch(config, pat, &result); + + if (match) + { + FcChar8* filename = NULL; + if (FcPatternGetString(match, FC_FILE, 0, &filename) == FcResultMatch) + { + found = true; + strcpy(buffer, (utf8*) filename); + } + FcPatternDestroy(match); + } + + FcPatternDestroy(pat); + return found; +} + #endif diff --git a/src/platform/osx.m b/src/platform/osx.m index 1052cad4b8..784a3d7aab 100644 --- a/src/platform/osx.m +++ b/src/platform/osx.m @@ -172,4 +172,20 @@ int platform_open_common_file_dialog(int type, utf8 *title, utf8 *filename, utf8 } } +bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) +{ + @autoreleasepool + { + CTFontDescriptorRef fontRef = CTFontDescriptorCreateWithNameAndSize((CFStringRef)[NSString stringWithUTF8String:font->font_name], 0.0); + CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fontRef, kCTFontURLAttribute); + if (url) { + NSString *fontPath = [NSString stringWithString:[(NSURL *)CFBridgingRelease(url) path]]; + strcpy(buffer, fontPath.UTF8String); + return true; + } else { + return false; + } + } +} + #endif diff --git a/src/platform/posix.c b/src/platform/posix.c index 8bfd8eb260..8a09b85b6f 100644 --- a/src/platform/posix.c +++ b/src/platform/posix.c @@ -37,7 +37,6 @@ #include #include #include -#include "fontconfig/fontconfig.h" // The name of the mutex used to prevent multiple instances of the game from running #define SINGLE_INSTANCE_MUTEX_NAME "RollerCoaster Tycoon 2_GSKMUTEX" @@ -758,31 +757,4 @@ uint8 platform_get_locale_temperature_format(){ return TEMPERATURE_FORMAT_C; } -bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) -{ - FcConfig* config = FcInitLoadConfigAndFonts(); - FcPattern* pat = FcNameParse((const FcChar8*) font->font_name); - - FcConfigSubstitute(config, pat, FcMatchPattern); - FcDefaultSubstitute(pat); - - bool found = false; - FcResult result = FcResultNoMatch; - FcPattern* match = FcFontMatch(config, pat, &result); - - if (match) - { - FcChar8* filename = NULL; - if (FcPatternGetString(match, FC_FILE, 0, &filename) == FcResultMatch) - { - found = true; - strcpy(buffer, (utf8*) filename); - } - FcPatternDestroy(match); - } - - FcPatternDestroy(pat); - return found; -} - #endif From 995799b84308cd9fc763438929399fe19a32a34e Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Fri, 25 Dec 2015 03:20:58 +0900 Subject: [PATCH 14/42] Try Arial as a fallback font if a language's preferred font cannot be loaded. --- src/localisation/language.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/localisation/language.cpp b/src/localisation/language.cpp index e9e01469b3..f9d36eb779 100644 --- a/src/localisation/language.cpp +++ b/src/localisation/language.cpp @@ -173,10 +173,18 @@ int language_open(int id) ttf_dispose(); gUseTrueTypeFont = true; gCurrentTTFFontSet = LanguagesDescriptors[id].font; - if (!ttf_initialise()) { - log_warning("Unable to initialise TrueType fonts."); + bool font_initialised = ttf_initialise(); - // Fall back to sprite font + // Have we tried Arial yet? + if (!font_initialised && gCurrentTTFFontSet != &TTFFontArial) { + log_warning("Unable to initialise prefered TrueType font -- falling back to Arial."); + gCurrentTTFFontSet = &TTFFontArial; + font_initialised = ttf_initialise(); + } + + // Fall back to sprite font. + if (!font_initialised) { + log_warning("Falling back to sprite font."); gUseTrueTypeFont = false; gCurrentTTFFontSet = nullptr; return 0; From 7edf477ed9a75e6422cf8f4fa90e0792a992fa01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Thu, 24 Dec 2015 19:54:12 +0100 Subject: [PATCH 15/42] Add docker fonctonfig library for #2546 --- dockerfiles/32bit/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerfiles/32bit/Dockerfile b/dockerfiles/32bit/Dockerfile index 30ce06b4c4..8a6590cc99 100644 --- a/dockerfiles/32bit/Dockerfile +++ b/dockerfiles/32bit/Dockerfile @@ -26,4 +26,4 @@ RUN pacman -R --noconfirm gcc RUN yes | pacman -S gcc-libs-multilib RUN pacman -S --noconfirm gcc-multilib USER travis -RUN yaourt -S --noconfirm lib32-jansson lib32-curl lib32-sdl2 lib32-sdl2_ttf lib32-speex +RUN yaourt -S --noconfirm lib32-jansson lib32-curl lib32-sdl2 lib32-sdl2_ttf lib32-speex lib32-fontconfig From 570c7323554e7f83d9fa903810cec817169ebada Mon Sep 17 00:00:00 2001 From: Ted John Date: Fri, 25 Dec 2015 04:00:18 +0000 Subject: [PATCH 16/42] Merge Localisation/master into OpenRCT2/develop. --- data/language/korean.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/language/korean.txt b/data/language/korean.txt index 932e5a7d16..afe6b8db1e 100644 --- a/data/language/korean.txt +++ b/data/language/korean.txt @@ -5,7 +5,7 @@ STR_0000 : STR_0001 :{STRINGID} {COMMA16} STR_0002 :스파이럴 롤러코스터 STR_0003 :스탠드업 롤러코스터 -STR_0004 :서스펜디드 스윙 코스터 +STR_0004 :서스펜디드 스윙잉 코스터 STR_0005 :인버티드 롤러코스터 STR_0006 :주니어 롤러코스터 STR_0007 :미니어처 레일웨이 From 43e193ba105f84c6b66a5d141905af0e3ec51027 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Fri, 25 Dec 2015 14:28:21 +0900 Subject: [PATCH 17/42] Remove FontConfig as a required module on OS X. --- CMakeLists.txt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e00316bb7..cb16a3f4df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,12 +89,9 @@ endif (WIN32) if (UNIX) # Include libdl for dlopen set(DLLIB dl) - - # FontConfig for TrueType fonts. - PKG_CHECK_MODULES(FONTCONFIG REQUIRED fontconfig) endif (UNIX) -INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${LIBCURL_INCLUDE_DIRS} ${JANSSON_INCLUDE_DIRS} ${SPEEX_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIRS}) +INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${LIBCURL_INCLUDE_DIRS} ${JANSSON_INCLUDE_DIRS} ${SPEEX_INCLUDE_DIRS}) LINK_DIRECTORIES(${SDL2_LIBRARY_DIRS} ${JANSSON_LIBRARY_DIRS} ${LIBCURL_LIBRARY_DIRS}) @@ -116,6 +113,13 @@ if (APPLE) TARGET_LINK_LIBRARIES(${PROJECT} ${ICONV_LIBRARIES}) endif (APPLE) +if (UNIX AND NOT APPLE) + # FontConfig for TrueType fonts. + PKG_CHECK_MODULES(FONTCONFIG REQUIRED fontconfig) + INCLUDE_DIRECTORIES(${FONTCONFIG_INCLUDE_DIRS}) + TARGET_LINK_LIBRARIES(${PROJECT} ${FONTCONFIG_LIBRARIES}) +endif (UNIX AND NOT APPLE) + # Handle creating the rct2 text and data files on OS X and Linux # See details in src/openrct2.c:openrct2_setup_rct2_segment for how the values # were derived. @@ -172,7 +176,7 @@ endif (UNIX) # libopenrct2.dll -> openrct2.dll set_target_properties(${PROJECT} PROPERTIES PREFIX "") -TARGET_LINK_LIBRARIES(${PROJECT} ${SDL2_LIBRARIES} ${ORCTLIBS_LIB} ${HTTPLIBS} ${NETWORKLIBS} ${SPEEX_LIBRARIES} ${DLLIB} ${RCT2_SECTIONS} ${FONTCONFIG_LIBRARIES}) +TARGET_LINK_LIBRARIES(${PROJECT} ${SDL2_LIBRARIES} ${ORCTLIBS_LIB} ${HTTPLIBS} ${NETWORKLIBS} ${SPEEX_LIBRARIES} ${DLLIB} ${RCT2_SECTIONS}) # CMake does not allow specifying a dependency chain which includes built-in # targets, like `install`, so we have to trick it and execute dependency ourselves. From 06528da61b93b687f47067d42b8435882cdb3ad6 Mon Sep 17 00:00:00 2001 From: Jarno Veuger Date: Fri, 25 Dec 2015 14:05:21 +0100 Subject: [PATCH 18/42] Installed will be moved instead of copied --- scripts/ps/publish.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ps/publish.ps1 b/scripts/ps/publish.ps1 index b626cbac14..89591d66df 100644 --- a/scripts/ps/publish.ps1 +++ b/scripts/ps/publish.ps1 @@ -138,7 +138,7 @@ function Do-Installer() return 1 } - Copy-Item $binaries[0].FullName $artifactsDir + Move-Item $binaries[0].FullName $artifactsDir return 0 } From d77c1039dc747ea160e6b214cd13ef6215b6bda3 Mon Sep 17 00:00:00 2001 From: Jarno Veuger Date: Fri, 25 Dec 2015 14:41:39 +0100 Subject: [PATCH 19/42] Added support for buildnumbers in installer --- distribution/windows/build.ps1 | 8 +++++++- scripts/ps/publish.ps1 | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/distribution/windows/build.ps1 b/distribution/windows/build.ps1 index 2836e38771..21d0d383e5 100644 --- a/distribution/windows/build.ps1 +++ b/distribution/windows/build.ps1 @@ -1,3 +1,9 @@ +param ( + [Parameter(Position = 1)] + [string]$BuildNumber = "", + [string]$GitBranch = "" +) + $path = Split-Path $Script:MyInvocation.MyCommand.Path Write-Host "Building Windows Installer (NSIS script)"; -makensis /DVERSION_INCLUDE=$path\win32.txt $path\install.nsi > $path\win32.log; +makensis /DAPPV_BUILD=$BuildNumber /DAPPV_EXTRA=-$GitBranch-b$BuildNumber /DVERSION_INCLUDE=$path\win32.txt $path\install.nsi > $path\win32.log; diff --git a/scripts/ps/publish.ps1 b/scripts/ps/publish.ps1 index 89591d66df..e96dc733f9 100644 --- a/scripts/ps/publish.ps1 +++ b/scripts/ps/publish.ps1 @@ -120,7 +120,7 @@ function Do-Installer() New-Item -Force -ItemType Directory $artifactsDir > $null # Create installer - & "$installerDir\build.ps1" + & "$installerDir\build.ps1" -BuildNumber $BuildNumber -GitBranch $GitBranch if ($LASTEXITCODE -ne 0) { Write-Host "Failed to create installer." -ForegroundColor Red From eda733165e12c0fbd8f767bd953cb3f181cc3233 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 26 Dec 2015 00:57:45 +0900 Subject: [PATCH 20/42] Added a hack for MINGW compatibility. --- src/platform/windows.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/platform/windows.c b/src/platform/windows.c index 39b478d69b..3a447571d3 100644 --- a/src/platform/windows.c +++ b/src/platform/windows.c @@ -900,6 +900,7 @@ void platform_get_exe_path(utf8 *outPath) bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) { +#ifndef __MINGW32__ wchar_t *fontFolder; if (SUCCEEDED(SHGetKnownFolderPath(&FOLDERID_Fonts, 0, NULL, &fontFolder))) { @@ -920,6 +921,12 @@ bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) { return false; } +#else + log_warning("MINGW-compatibility hack: falling back to C:\\Windows\\Fonts"); + strcat(buffer, "C:\\Windows\\Fonts\\"); + strcat(buffer, font->filename); + return true; +#endif } #endif From c0830ae02e2a7e881f2bdedcdc6f106c885e284b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Fri, 25 Dec 2015 19:30:23 +0100 Subject: [PATCH 21/42] Fix memory leaks in font selection for Linux Add some logging too, in particular warning when no font was found. --- distribution/changelog.txt | 1 + src/platform/linux.c | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 9e01dd71f8..b5d1f453c7 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -3,6 +3,7 @@ - Feature: Add displaying of frames per second (FPS). - Feature: Changing the number of trains no longer requires retesting. - Feature: Add SI units as a new measurement system for distance / speed. +- Feature: Update alternative font selection mechanism for all platforms. - Fix: [#2126] Ferris Wheels set to "backward rotation" stop working (original bug) - Fix: [#2449] Turning off Day/Night Circle while it is night doesn't reset back to day diff --git a/src/platform/linux.c b/src/platform/linux.c index 13d5244c61..22e3245fcb 100644 --- a/src/platform/linux.c +++ b/src/platform/linux.c @@ -166,7 +166,17 @@ int platform_open_common_file_dialog(int type, utf8 *title, utf8 *filename, utf8 bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) { + assert(buffer != NULL); + assert(font != NULL); + + log_verbose("Looking for font %s with FontConfig.", font->font_name); FcConfig* config = FcInitLoadConfigAndFonts(); + if (!config) + { + log_error("Failed to initialize FontConfig library"); + FcFini(); + return false; + } FcPattern* pat = FcNameParse((const FcChar8*) font->font_name); FcConfigSubstitute(config, pat, FcMatchPattern); @@ -182,12 +192,17 @@ bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) if (FcPatternGetString(match, FC_FILE, 0, &filename) == FcResultMatch) { found = true; - strcpy(buffer, (utf8*) filename); + safe_strncpy(buffer, (utf8*) filename, MAX_PATH); + log_verbose("FontConfig provided font %s", filename); } FcPatternDestroy(match); + } else { + log_warning("Failed to find required font."); } FcPatternDestroy(pat); + FcConfigDestroy(config); + FcFini(); return found; } From 799d377d900d21d0e59da4f48f370ba2d3881a17 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 26 Dec 2015 04:00:18 +0000 Subject: [PATCH 22/42] Merge Localisation/master into OpenRCT2/develop. --- data/language/dutch.txt | 24 ++++++++++++------------ data/language/korean.txt | 5 ++++- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/data/language/dutch.txt b/data/language/dutch.txt index 434f81033c..697944be54 100644 --- a/data/language/dutch.txt +++ b/data/language/dutch.txt @@ -1815,7 +1815,7 @@ STR_1812 :{SMALLFONT}{BLACK}{STRINGID} STR_1813 :Overige objecten STR_1814 :Acties STR_1815 :Gedachten -STR_1816 :{SMALLFONT}{BLACK}Selecteer het type informatie dat je in de gastenlijst wilt zien +STR_1816 :{SMALLFONT}{BLACK}Selecteer het type informatie dat je in de bezoekerslijst wilt zien STR_1817 :({COMMA16}) STR_1818 :{WINDOW_COLOUR_2}Alle bezoekers STR_1819 :{WINDOW_COLOUR_2}Alle bezoekers (samengevat) @@ -1862,10 +1862,10 @@ STR_1859 :klusjesmannen STR_1860 :monteurs STR_1861 :bewakers STR_1862 :entertainers -STR_1863 :Klusjesman -STR_1864 :Monteur -STR_1865 :Bewaker -STR_1866 :Entertainer +STR_1863 :klusjesman +STR_1864 :monteur +STR_1865 :bewaker +STR_1866 :entertainer STR_1867 :{BLACK}{COMMA16} {STRINGID} STR_1868 :Kan het aantal rotaties niet aanpassen... STR_1869 :{WINDOW_COLOUR_2}Aantal rotaties: @@ -1945,7 +1945,7 @@ STR_1940 :{SMALLFONT}{BLACK}Stemming, energie, hongerniveau e.d. van deze bez STR_1941 :{SMALLFONT}{BLACK}Tonen in welke attracties deze bezoeker is geweest STR_1942 :{SMALLFONT}{BLACK}Financiële informatie over deze bezoeker tonen STR_1943 :{SMALLFONT}{BLACK}Recente gedachten van deze bezoeker tonen -STR_1944 :{SMALLFONT}{BLACK}Toon de dingen die de gast bij zich heeft +STR_1944 :{SMALLFONT}{BLACK}Toon de dingen die de bezoeker bij zich heeft STR_1945 :{SMALLFONT}{BLACK}Orders en opties voor deze werknemer tonen STR_1946 :{SMALLFONT}{BLACK}Kostuum van deze entertainer selecteren STR_1947 :{SMALLFONT}{BLACK}Werkgebieden van het geselecteerde type werknemer weergeven en de dichtstbijzijnde werknemer lokaliseren @@ -3511,7 +3511,7 @@ STR_5175 :Voer de naam van je Twitch-kanaal in STR_5176 :Twitch-integratie inschakelen STR_5177 :Schermmodus: STR_5178 :{SMALLFONT}{BLACK}Cheats voor financiën -STR_5179 :{SMALLFONT}{BLACK}Cheats voor gasten +STR_5179 :{SMALLFONT}{BLACK}Cheats voor bezoekers STR_5180 :{SMALLFONT}{BLACK}Cheats voor park STR_5181 :{SMALLFONT}{BLACK}Cheats voor attracties STR_5182 :{INT32} @@ -3618,7 +3618,7 @@ STR_5282 :Attracties openen/sluiten via RCT1-stoplichten STR_5283 :Park openen/sluiten via RCT1-stoplichten STR_5284 :Scenarioselectie-lettertype in RCT1-stijl STR_5285 :KABOEM! -STR_5286 :{SMALLFONT}{BLACK}Laat sommige gasten exploderen +STR_5286 :{SMALLFONT}{BLACK}Laat sommige bezoekers exploderen STR_5287 :Attractie is al defect STR_5288 :Attractie is gesloten STR_5289 :Deze attractie kan niet defect raken @@ -4285,7 +4285,7 @@ STR_CPTY :2 passagiers per boot #CC [AE-SWIM] STR_NAME :Zwembad -STR_DESC :Een steiger waarvan gasten het water in kunnen om een stukje te zwemmen. Door "The Amazing Earl". +STR_DESC :Een steiger waarvan bezoekers het water in kunnen om een stukje te zwemmen. Door "The Amazing Earl". STR_CPTY :1 bezoeker per "boot" # End of Boat Ride / Bootverhuur @@ -5636,12 +5636,12 @@ STR_DESC :Toiletten in een gebouw in blokhutstijl. # Information Kiosks [INFOK] STR_NAME :Informatiekiosk -STR_DESC :Een kiosk waar gasten kaarten van het park en paraplu's kunnen kopen. +STR_DESC :Een kiosk waar bezoekers kaarten van het park en paraplu's kunnen kopen. #CC [INFO1MKY] STR_NAME :Informatiekiosk -STR_DESC :Een kiosk waar gasten kaarten van het park en paraplu's kunnen kopen. +STR_DESC :Een kiosk waar bezoekers kaarten van het park en paraplu's kunnen kopen. # End of Information Kiosks @@ -5654,7 +5654,7 @@ STR_DESC :Een geldautomaat die de bezoekers kunnen gebruiken als ze bijna doo # First Aid [FAID1] STR_NAME :Eerste hulp -STR_DESC :Een gebouw waar misselijke gasten sneller kunnen opknappen. +STR_DESC :Een gebouw waar misselijke bezoekers sneller kunnen opknappen. # End of First Aid ################################# diff --git a/data/language/korean.txt b/data/language/korean.txt index afe6b8db1e..8aa0ef15c0 100644 --- a/data/language/korean.txt +++ b/data/language/korean.txt @@ -940,7 +940,7 @@ STR_0934 :놀이기구 입구가 있습니다 STR_0935 :놀이기구 출구가 있습니다 STR_0936 :공원 입구가 있습니다 STR_0937 :{SMALLFONT}{BLACK}보기 설정 -STR_0938 :{SMALLFONT}{BLACK}지형 높이와 경사를 보여줌 +STR_0938 :{SMALLFONT}{BLACK}지형의 높이나 경사를 조정합니다. STR_0939 :지하/내부 시야 STR_0940 :땅 안 보이기 STR_0941 :절벽 안 보이기 @@ -3922,6 +3922,9 @@ STR_5582 :마우스 커서를 창 밖으로 나가지 못하게 STR_5583 :{COMMA1DP16}m/s STR_5584 :국제단위(SI)법 STR_5585 :{SMALLFONT}{BLACK}체인/발사 속력을 {VELOCITY}으로 만드는 것과 같이 일부 놀이기구 운행 제한을 없애줍니다 +STR_5586 :상점이나 가게를 자동으로 엶 +STR_5587 :{SMALLFONT}{BLACK}이 설정을 켜면 상점이나 가게를 건설하면 자동으로 열도록 만들어 줍니다. + ############################################################################### ## RCT2 Objects From 9232a9906f0a3821c564377df328206d399aca35 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Thu, 24 Dec 2015 01:37:32 +0900 Subject: [PATCH 23/42] Inventarised instances of RCT2_ADDRESS_COMMON_FORMAT_ARGS --- src/interface/graph.c | 2 +- src/interface/screenshot.c | 2 +- src/interface/widget.c | 14 +-- src/interface/window.h | 2 +- src/management/news_item.c | 2 +- src/ride/ride.c | 14 +-- src/windows/editor_objective_options.c | 24 ++-- src/windows/finances.c | 8 +- src/windows/game_bottom_toolbar.c | 6 +- src/windows/guest.c | 2 +- src/windows/guest_list.c | 18 +-- src/windows/install_track.c | 12 +- src/windows/land.c | 2 +- src/windows/map.c | 2 +- src/windows/new_ride.c | 6 +- src/windows/news.c | 4 +- src/windows/options.c | 18 +-- src/windows/park.c | 20 ++-- src/windows/research.c | 8 +- src/windows/ride.c | 156 ++++++++++++------------- src/windows/ride_construction.c | 8 +- src/windows/ride_list.c | 34 +++--- src/windows/scenery.c | 4 +- src/windows/shortcut_key_change.c | 2 +- src/windows/staff.c | 2 +- src/windows/staff_list.c | 14 +-- src/windows/tooltip.c | 2 +- src/windows/track_list.c | 12 +- src/windows/viewport.c | 2 +- 29 files changed, 201 insertions(+), 201 deletions(-) diff --git a/src/interface/graph.c b/src/interface/graph.c index 52b90ed6ce..dc9cae385e 100644 --- a/src/interface/graph.c +++ b/src/interface/graph.c @@ -36,7 +36,7 @@ static void graph_draw_months_uint8(rct_drawpixelinfo *dpi, uint8 *history, int if (history[i] != 0 && history[i] != 255 && yearOver32 % 4 == 0) { // Draw month text RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = ((yearOver32 / 4) + 8) % 8 + STR_MONTH_SHORT_MAR; - gfx_draw_string_centred(dpi, 2222, x, y - 10, 0, (void*)0x013CE952); + gfx_draw_string_centred(dpi, 2222, x, y - 10, 0, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS); // Draw month mark gfx_fill_rect(dpi, x, y, x, y + 3, 10); diff --git a/src/interface/screenshot.c b/src/interface/screenshot.c index 79c1ae2ccf..25af755b56 100644 --- a/src/interface/screenshot.c +++ b/src/interface/screenshot.c @@ -57,7 +57,7 @@ void screenshot_check() RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = stringId; // RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = STR_SCR_BMP; - // RCT2_GLOBAL(0x013CE952 + 2, uint16) = screenshotIndex; + // RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = screenshotIndex; RCT2_GLOBAL(0x009A8C29, uint8) |= 1; window_error_open(STR_SCREENSHOT_SAVED_AS, -1); diff --git a/src/interface/widget.c b/src/interface/widget.c index 988b7a7211..a07bba487e 100644 --- a/src/interface/widget.c +++ b/src/interface/widget.c @@ -440,7 +440,7 @@ static void widget_text_unknown(rct_drawpixelinfo *dpi, rct_window *w, int widge gfx_draw_string_left_clipped( dpi, stringId, - (void*)0x013CE952, + (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, colour, l + 1, t, @@ -453,7 +453,7 @@ static void widget_text_unknown(rct_drawpixelinfo *dpi, rct_window *w, int widge gfx_draw_string_centred_clipped( dpi, stringId, - (void*)0x013CE952, + (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, colour, (w->x + w->x + widget->left + widget->right + 1) / 2 - 1, t, @@ -489,7 +489,7 @@ static void widget_text(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex) if (widget_is_disabled(w, widgetIndex)) colour |= 0x40; - gfx_draw_string_left(dpi, widget->image, (void*)0x013CE952, colour, l + 1, t); + gfx_draw_string_left(dpi, widget->image, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, colour, l + 1, t); } /** @@ -576,7 +576,7 @@ static void widget_groupbox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widg colour = w->colours[widget->colour] & 0x7F; if (widget_is_disabled(w, widgetIndex)) colour |= 0x40; - gfx_draw_string_left(dpi, widget->image, (void*)0x013CE952, colour, l, t); + gfx_draw_string_left(dpi, widget->image, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, colour, l, t); textRight = l + gfx_get_string_width((char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER) + 1; } @@ -679,7 +679,7 @@ static void widget_caption_draw(rct_drawpixelinfo *dpi, rct_window *w, int widge width -= 10; } l += width / 2; - gfx_draw_string_centred_clipped(dpi, widget->image, (void*)0x013CE952, 34, l, t, width); + gfx_draw_string_centred_clipped(dpi, widget->image, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 34, l, t, width); } /** @@ -723,7 +723,7 @@ static void widget_closebox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widg if (widget_is_disabled(w, widgetIndex)) colour |= 0x40; - gfx_draw_string_centred_clipped(dpi, widget->image, (void*)0x013CE952, colour, l, t, widget->right - widget->left - 2); + gfx_draw_string_centred_clipped(dpi, widget->image, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, colour, l, t, widget->right - widget->left - 2); } /** @@ -767,7 +767,7 @@ static void widget_checkbox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widg colour |= 0x40; } - gfx_draw_string_left_centred(dpi, (rct_string_id)widget->image, (void*)0x013CE952, colour, l + 14, yMid); + gfx_draw_string_left_centred(dpi, (rct_string_id)widget->image, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, colour, l + 14, yMid); } /** diff --git a/src/interface/window.h b/src/interface/window.h index d2609a4ac1..da5a3935b1 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -264,7 +264,7 @@ typedef struct rct_window { uint16 frame_no; // 0x48E updated every tic for motion in windows sprites uint16 list_information_type; // 0x490 0 for none, Used as current position of marquee in window_peep sint16 var_492; - uint32 var_494; + uint32 var_494; // 0x494 highlighted item? uint8 var_498[0x14]; sint16 selected_tab; // 0x4AC sint16 var_4AE; diff --git a/src/management/news_item.c b/src/management/news_item.c index d3379c158a..a855bcbdf2 100644 --- a/src/management/news_item.c +++ b/src/management/news_item.c @@ -301,7 +301,7 @@ void news_item_get_subject_location(int type, int subject, int *x, int *y, int * void news_item_add_to_queue(uint8 type, rct_string_id string_id, uint32 assoc) { utf8 *buffer = (char*)0x0141EF68; - void *args = (void*)0x013CE952; + void *args = (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS; format_string(buffer, string_id, args); // overflows possible? news_item_add_to_queue_raw(type, buffer, assoc); diff --git a/src/ride/ride.c b/src/ride/ride.c index 302b4c8094..1e95c33489 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -811,15 +811,15 @@ void reset_all_ride_build_dates() static int ride_check_if_construction_allowed(rct_ride *ride) { if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { - RCT2_GLOBAL(0x013CE952 + 6, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint32) = ride->name_arguments; window_error_open(STR_CANT_START_CONSTRUCTION_ON, STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING); return 0; } if (ride->status != RIDE_STATUS_CLOSED) { - RCT2_GLOBAL(0x013CE952 + 6, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint32) = ride->name_arguments; window_error_open(STR_CANT_START_CONSTRUCTION_ON, STR_MUST_BE_CLOSED_FIRST); return 0; } @@ -1666,8 +1666,8 @@ int ride_modify(rct_xy_element *input) return 0; if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE) { - RCT2_GLOBAL(0x013CE952 + 6, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint32) = ride->name_arguments; window_error_open(STR_CANT_START_CONSTRUCTION_ON, STR_LOCAL_AUTHORITY_FORBIDS_DEMOLITION_OR_MODIFICATIONS_TO_THIS_RIDE); return 0; } @@ -2884,7 +2884,7 @@ rct_ride_measurement *ride_get_measurement(int rideIndex, rct_string_id *message return measurement; } else { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RideNameConvention[ride->type].vehicle_name; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = RideNameConvention[ride->type].station_name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = RideNameConvention[ride->type].station_name; if (message != NULL) *message = STR_DATA_LOGGING_WILL_START_WHEN_NEXT_LEAVES; return NULL; } diff --git a/src/windows/editor_objective_options.c b/src/windows/editor_objective_options.c index d1cc24b9ea..04bdad6fd1 100644 --- a/src/windows/editor_objective_options.c +++ b/src/windows/editor_objective_options.c @@ -988,12 +988,12 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi width = w->widgets[WIDX_PARK_NAME].left - 16; if (stex != NULL) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = stex->park_name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = stex->park_name; } else { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); } - RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); - gfx_draw_string_left_clipped(dpi, 3298, (void*)0x013CE952, 0, x, y, width); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); + gfx_draw_string_left_clipped(dpi, 3298, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, width); // Scenario name x = w->x + 8; @@ -1001,13 +1001,13 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi width = w->widgets[WIDX_SCENARIO_NAME].left - 16; if (stex != NULL) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = stex->scenario_name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = stex->scenario_name; } else { safe_strncpy((char*)0x009BC677, s6Info->name, 64); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = 3165; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 3165; } - RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); - gfx_draw_string_left_clipped(dpi, 3300, (void*)0x013CE952, 0, x, y, width); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); + gfx_draw_string_left_clipped(dpi, 3300, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, width); // Scenario details label x = w->x + 8; @@ -1020,13 +1020,13 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi width = w->widgets[WIDX_DETAILS].left - 4; if (stex != NULL) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = stex->details; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = stex->details; } else { safe_strncpy((char*)0x009BC677, s6Info->details, 256); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = 3165; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 3165; } - RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); - gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, width, 1191, 0); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); + gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, width, 1191, 0); // Scenario category label x = w->x + 8; diff --git a/src/windows/finances.c b/src/windows/finances.c index 006b9a76ff..9730663d07 100644 --- a/src/windows/finances.c +++ b/src/windows/finances.c @@ -640,7 +640,7 @@ static void window_finances_summary_invalidate(rct_window *w) } window_finances_set_pressed_tab(w); - RCT2_GLOBAL(0x013CE952 + 6, money32) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, money32) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32); } /** @@ -1183,7 +1183,7 @@ static void window_finances_marketing_paint(rct_window *w, rct_drawpixelinfo *dp noCampaignsActive = 0; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); // Set special parameters switch (i) { @@ -1191,7 +1191,7 @@ static void window_finances_marketing_paint(rct_window *w, rct_drawpixelinfo *dp case ADVERTISING_CAMPAIGN_RIDE: ride = GET_RIDE(gMarketingCampaignRideIndex[i]); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; break; case ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE: RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = ShopItemStringIds[gMarketingCampaignRideIndex[i]].plural; @@ -1199,7 +1199,7 @@ static void window_finances_marketing_paint(rct_window *w, rct_drawpixelinfo *dp } // Advertisement - gfx_draw_string_left_clipped(dpi, STR_VOUCHERS_FOR_FREE_ENTRY_TO + i, (void*)0x013CE952, 0, x + 4, y, 296); + gfx_draw_string_left_clipped(dpi, STR_VOUCHERS_FOR_FREE_ENTRY_TO + i, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x + 4, y, 296); // Duration weeksRemaining = (gMarketingCampaignDaysLeft[i] % 128); diff --git a/src/windows/game_bottom_toolbar.c b/src/windows/game_bottom_toolbar.c index 0b3f1675db..9dbc2aebf4 100644 --- a/src/windows/game_bottom_toolbar.c +++ b/src/windows/game_bottom_toolbar.c @@ -388,7 +388,7 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo *dpi, r (RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) < 0 ? 1391 : 1390), x, y - 3, (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WINDOWCLASS, rct_windowclass) == 2 && RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WIDGETINDEX, sint32) == WIDX_MONEY ? 2 : w->colours[0] & 0x7F), - (void*)0x013CE952 + (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS ); y += 7; } @@ -466,7 +466,7 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo *dpi, x, y, (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WINDOWCLASS, rct_windowclass) == 2 && RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WIDGETINDEX, sint32) == WIDX_DATE ? 2 : w->colours[0] & 0x7F), - (void*)0x013CE952 + (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS ); // Temperature @@ -480,7 +480,7 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo *dpi, format = STR_FAHRENHEIT_VALUE; } RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, short) = temperature; - gfx_draw_string_left(dpi, format, (void*)0x013CE952, 0, x, y + 6); + gfx_draw_string_left(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y + 6); x += 30; // Current weather diff --git a/src/windows/guest.c b/src/windows/guest.c index b7828d72e6..62390e5294 100644 --- a/src/windows/guest.c +++ b/src/windows/guest.c @@ -2186,7 +2186,7 @@ void window_guest_inventory_paint(rct_window *w, rct_drawpixelinfo *dpi) if (y >= maxY) break; if (!peep_has_item(peep, item)) continue; - void *args = (void*)0x013CE952; + void *args = (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS; rct_string_id stringId = window_guest_inventory_format_item(peep, item, (uint8*)args); y += gfx_draw_string_left_wrapped(dpi, args, x, y, itemNameWidth, stringId, 0); numItems++; diff --git a/src/windows/guest_list.c b/src/windows/guest_list.c index 824b6f4d01..6b1a16f003 100644 --- a/src/windows/guest_list.c +++ b/src/windows/guest_list.c @@ -630,7 +630,7 @@ static void window_guest_list_paint(rct_window *w, rct_drawpixelinfo *dpi) x = w->x + 4; y = w->y + window_guest_list_widgets[WIDX_GUEST_LIST].bottom + 2; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, sint16) = w->var_492; - gfx_draw_string_left(dpi, (w->var_492 == 1 ? 1755 : 1754), (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, (w->var_492 == 1 ? 1755 : 1754), (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); } } @@ -683,7 +683,7 @@ static void window_guest_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, // Guest name RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = peep->name_string_idx; RCT2_GLOBAL(0x013CE954, uint32) = peep->id; - gfx_draw_string_left_clipped(dpi, format, (void*)0x013CE952, 0, 0, y - 1, 113); + gfx_draw_string_left_clipped(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, 0, y - 1, 113); switch (_window_guest_list_selected_view) { case VIEW_ACTIONS: @@ -699,8 +699,8 @@ static void window_guest_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, get_arguments_from_action(peep, &argument_1, &argument_2); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = argument_1; - RCT2_GLOBAL(0x013CE952 + 4, uint32) = argument_2; - gfx_draw_string_left_clipped(dpi, format, (void*)0x013CE952, 0, 133, y - 1, 314); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint32) = argument_2; + gfx_draw_string_left_clipped(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, 133, y - 1, 314); break; case VIEW_THOUGHTS: // For each thought @@ -716,8 +716,8 @@ static void window_guest_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, get_arguments_from_thought(peep->thoughts[j], &argument_1, &argument_2); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = argument_1; - RCT2_GLOBAL(0x013CE952 + 4, uint32) = argument_2; - gfx_draw_string_left_clipped(dpi, format, (void*)0x013CE952, 0, 118, y - 1, 329); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint32) = argument_2; + gfx_draw_string_left_clipped(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, 118, y - 1, 329); break; } break; @@ -754,9 +754,9 @@ static void window_guest_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, // Draw action RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = _window_guest_list_groups_argument_1[i]; - RCT2_GLOBAL(0x013CE952 + 4, uint32) = _window_guest_list_groups_argument_2[i]; - RCT2_GLOBAL(0x013CE952 + 10, uint32) = numGuests; - gfx_draw_string_left_clipped(dpi, format, (void*)0x013CE952, 0, 0, y - 1, 414); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint32) = _window_guest_list_groups_argument_2[i]; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 10, uint32) = numGuests; + gfx_draw_string_left_clipped(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, 0, y - 1, 414); // Draw guest count RCT2_GLOBAL(0x013CE95A, uint16) = STR_GUESTS_COUNT_COMMA_SEP; diff --git a/src/windows/install_track.c b/src/windows/install_track.c index 18c3f2ed00..62b25d86a3 100644 --- a/src/windows/install_track.c +++ b/src/windows/install_track.c @@ -380,9 +380,9 @@ static void window_install_track_paint(rct_window *w, rct_drawpixelinfo *dpi) } // Ride length - RCT2_GLOBAL(0x013CE952 + 0, uint16) = 1345; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = track_td6->ride_length; - gfx_draw_string_left_clipped(dpi, STR_TRACK_LIST_RIDE_LENGTH, (void*)0x013CE952, 0, x, y, 214); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 1345; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = track_td6->ride_length; + gfx_draw_string_left_clipped(dpi, STR_TRACK_LIST_RIDE_LENGTH, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, 214); y += 10; } @@ -437,9 +437,9 @@ static void window_install_track_paint(rct_window *w, rct_drawpixelinfo *dpi) if (track_td6->space_required_x != 0xFF) { // Space required - RCT2_GLOBAL(0x013CE952 + 0, uint16) = track_td6->space_required_x; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = track_td6->space_required_y; - gfx_draw_string_left(dpi, STR_TRACK_LIST_SPACE_REQUIRED, (void*)0x013CE952, 0, x, y); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = track_td6->space_required_x; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = track_td6->space_required_y; + gfx_draw_string_left(dpi, STR_TRACK_LIST_SPACE_REQUIRED, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 10; } diff --git a/src/windows/land.c b/src/windows/land.c index f97044bcea..97b5a85f1b 100644 --- a/src/windows/land.c +++ b/src/windows/land.c @@ -408,6 +408,6 @@ static void window_land_paint(rct_window *w, rct_drawpixelinfo *dpi) if (price != 0 && !(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, sint32) = price; - gfx_draw_string_centred(dpi, 986, x, y, 0, (void*)0x013CE952); + gfx_draw_string_centred(dpi, 986, x, y, 0, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS); } } diff --git a/src/windows/map.c b/src/windows/map.c index 6483e78668..b6d004249e 100644 --- a/src/windows/map.c +++ b/src/windows/map.c @@ -930,7 +930,7 @@ static void window_map_show_default_scenario_editor_buttons(rct_window *w) { w->widgets[WIDX_MAP_SIZE_SPINNER].type = WWT_SPINNER; w->widgets[WIDX_MAP_SIZE_SPINNER_UP].type = WWT_DROPDOWN_BUTTON; w->widgets[WIDX_MAP_SIZE_SPINNER_DOWN].type = WWT_DROPDOWN_BUTTON; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE, uint16) - 2; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE, uint16) - 2; } static void window_map_inputsize_land(rct_window *w) diff --git a/src/windows/new_ride.c b/src/windows/new_ride.c index 6f54926539..33a2493d19 100644 --- a/src/windows/new_ride.c +++ b/src/windows/new_ride.c @@ -874,9 +874,9 @@ static void window_new_ride_paint_ride_information(rct_window *w, rct_drawpixeli rideDescription = item.type + 512; } - RCT2_GLOBAL(0x013CE952 + 0, rct_string_id) = rideName; - RCT2_GLOBAL(0x013CE952 + 2, rct_string_id) = rideDescription; - gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, width, 1690, 0); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, rct_string_id) = rideName; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, rct_string_id) = rideDescription; + gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, width, 1690, 0); // Number of designs available if (ride_type_has_flag(item.type, RIDE_TYPE_FLAG_HAS_TRACK)) { diff --git a/src/windows/news.c b/src/windows/news.c index 0df430e2de..2f80ff15f4 100644 --- a/src/windows/news.c +++ b/src/windows/news.c @@ -291,8 +291,8 @@ static void window_news_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int s // Date text RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = STR_DATE_DAY_1 + newsItem->day - 1; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = STR_MONTH_MARCH + (newsItem->month_year % 8); - gfx_draw_string_left(dpi, 2235, (void*)0x013CE952, 2, 4, y); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = STR_MONTH_MARCH + (newsItem->month_year % 8); + gfx_draw_string_left(dpi, 2235, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 2, 4, y); // Item text utf8 buffer[400]; diff --git a/src/windows/options.c b/src/windows/options.c index aaf5e14b74..1609ec8b27 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -1187,9 +1187,9 @@ static void window_options_invalidate(rct_window *w) switch (w->page) { case WINDOW_OPTIONS_PAGE_DISPLAY: - RCT2_GLOBAL(0x013CE952 + 16, uint16) = (uint16)gConfigGeneral.fullscreen_width; - RCT2_GLOBAL(0x013CE952 + 18, uint16) = (uint16)gConfigGeneral.fullscreen_height; - RCT2_GLOBAL(0x013CE952 + 12, uint16) = 2773 + gConfigGeneral.fullscreen_mode; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 16, uint16) = (uint16)gConfigGeneral.fullscreen_width; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 18, uint16) = (uint16)gConfigGeneral.fullscreen_height; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 12, uint16) = 2773 + gConfigGeneral.fullscreen_mode; // disable resolution dropdown on "Fullscreen (desktop)" if (gConfigGeneral.fullscreen_mode == 2){ @@ -1233,7 +1233,7 @@ static void window_options_invalidate(rct_window *w) case WINDOW_OPTIONS_PAGE_CULTURE: // currency: pounds, dollars, etc. (10 total) - RCT2_GLOBAL(0x013CE952 + 12, uint16) = CurrencyDescriptors[gConfigGeneral.currency_format].stringId; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 12, uint16) = CurrencyDescriptors[gConfigGeneral.currency_format].stringId; // distance: metric / imperial / si { @@ -1244,14 +1244,14 @@ static void window_options_invalidate(rct_window *w) case MEASUREMENT_FORMAT_METRIC: stringId = STR_METRIC; break; case MEASUREMENT_FORMAT_SI: stringId = STR_SI; break; } - RCT2_GLOBAL(0x013CE952 + 14, uint16) = stringId; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 14, uint16) = stringId; } // temperature: celsius/fahrenheit - RCT2_GLOBAL(0x013CE952 + 20, uint16) = STR_CELSIUS + gConfigGeneral.temperature_format; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 20, uint16) = STR_CELSIUS + gConfigGeneral.temperature_format; // height: units/real values - RCT2_GLOBAL(0x013CE952 + 6, uint16) = gConfigGeneral.show_height_as_units ? STR_UNITS : STR_REAL_VALUES; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = gConfigGeneral.show_height_as_units ? STR_UNITS : STR_REAL_VALUES; window_options_culture_widgets[WIDX_LANGUAGE].type = WWT_DROPDOWN; window_options_culture_widgets[WIDX_LANGUAGE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; @@ -1280,11 +1280,11 @@ static void window_options_invalidate(rct_window *w) else RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = 1170; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = (uint32)gAudioDevices[currentSoundDevice].name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = (uint32)gAudioDevices[currentSoundDevice].name; } // music: on/off - RCT2_GLOBAL(0x013CE952 + 8, uint16) = STR_OFF + gConfigSound.ride_music; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint16) = STR_OFF + gConfigSound.ride_music; widget_set_checkbox_value(w, WIDX_SOUND_CHECKBOX, gConfigSound.sound); widget_set_checkbox_value(w, WIDX_MUSIC_CHECKBOX, gConfigSound.ride_music); diff --git a/src/windows/park.c b/src/windows/park.c index a0db8314c2..15f419ede7 100644 --- a/src/windows/park.c +++ b/src/windows/park.c @@ -576,7 +576,7 @@ static void window_park_set_disabled_tabs(rct_window *w) static void window_park_prepare_window_title_text() { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); } #pragma region Entrance page @@ -949,7 +949,7 @@ static void window_park_entrance_invalidate(rct_window *w) // Set open / close park button state RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME, rct_string_id); - RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_NAME_ARGS, uint32); window_park_entrance_widgets[WIDX_OPEN_OR_CLOSE].image = park_is_open() ? SPR_OPEN : SPR_CLOSED; window_park_entrance_widgets[WIDX_CLOSE_LIGHT].image = SPR_G2_RCT1_CLOSE_BUTTON_0 + !park_is_open() * 2 + widget_is_pressed(w, WIDX_CLOSE_LIGHT); window_park_entrance_widgets[WIDX_OPEN_LIGHT].image = SPR_G2_RCT1_OPEN_BUTTON_0 + park_is_open() * 2 + widget_is_pressed(w, WIDX_OPEN_LIGHT); @@ -1038,7 +1038,7 @@ static void window_park_entrance_paint(rct_window *w, rct_drawpixelinfo *dpi) gfx_draw_string_centred_clipped( dpi, 1191, - (void*)0x013CE952, + (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + (labelWidget->left + labelWidget->right) / 2, w->y + labelWidget->top, @@ -1468,7 +1468,7 @@ static void window_park_price_invalidate(rct_window *w) window_park_price_widgets[WIDX_DECREASE_PRICE].type = WWT_DROPDOWN_BUTTON; } - RCT2_GLOBAL(0x013CE952 + 6, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, uint16); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, uint16); window_park_price_widgets[WIDX_PRICE].image = RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, uint16) == 0 ? STR_FREE : 1429; window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_7); @@ -1590,20 +1590,20 @@ static void window_park_stats_paint(rct_window *w, rct_drawpixelinfo *dpi) parkSize = squaredmetres_to_squaredfeet(parkSize); } RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = parkSize; - gfx_draw_string_left(dpi, stringIndex, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, stringIndex, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 10; // Draw number of rides / attractions if (w->list_information_type != (uint16)-1) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = w->list_information_type; - gfx_draw_string_left(dpi, STR_NUMBER_OF_RIDES_LABEL, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, STR_NUMBER_OF_RIDES_LABEL, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); } y += 10; // Draw number of staff if (w->var_48C != -1) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = w->var_48C; - gfx_draw_string_left(dpi, STR_STAFF_LABEL, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, STR_STAFF_LABEL, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); } y += 10; @@ -1748,7 +1748,7 @@ static void window_park_objective_paint(rct_window *w, rct_drawpixelinfo *dpi) y = w->y + window_park_objective_widgets[WIDX_PAGE_BACKGROUND].top + 7; safe_strncpy((char*)0x009BC677, RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_DETAILS, char), 256); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, short) = 3165; - y += gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, 222, 1191, 0); + y += gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, 222, 1191, 0); y += 5; // Your objective: @@ -1760,7 +1760,7 @@ static void window_park_objective_paint(rct_window *w, rct_drawpixelinfo *dpi) RCT2_GLOBAL(0x013CE954, short) = date_get_total_months(MONTH_OCTOBER, RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8)); RCT2_GLOBAL(0x013CE956, int) = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, sint32); - y += gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, 221, 2385 + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8), 0); + y += gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, 221, 2385 + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8), 0); y += 5; // Objective outcome @@ -1771,7 +1771,7 @@ static void window_park_objective_paint(rct_window *w, rct_drawpixelinfo *dpi) } else { // Objective completed RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) = RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, money32); - gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, 222, 2788, 0); + gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, 222, 2788, 0); } } } diff --git a/src/windows/research.c b/src/windows/research.c index 0c03911c09..9c70207e13 100644 --- a/src/windows/research.c +++ b/src/windows/research.c @@ -341,7 +341,7 @@ void window_research_development_page_paint(rct_window *w, rct_drawpixelinfo *dp y += 15; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = STR_UNKNOWN; - gfx_draw_string_left(dpi, STR_RESEARCH_EXPECTED_LABEL, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, STR_RESEARCH_EXPECTED_LABEL, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); } else { // Research type stringId = STR_RESEARCH_UNKNOWN; @@ -373,11 +373,11 @@ void window_research_development_page_paint(rct_window *w, rct_drawpixelinfo *dp uint16 expectedDay = RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_DAY, uint8); if (expectedDay != 255) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = 2289; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = STR_DATE_DAY_1 + expectedDay; - RCT2_GLOBAL(0x013CE952 + 4, uint16) = STR_MONTH_MARCH + RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_MONTH, uint8); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = STR_DATE_DAY_1 + expectedDay; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = STR_MONTH_MARCH + RCT2_GLOBAL(RCT2_ADDRESS_NEXT_RESEARCH_EXPECTED_MONTH, uint8); } } - gfx_draw_string_left(dpi, STR_RESEARCH_EXPECTED_LABEL, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, STR_RESEARCH_EXPECTED_LABEL, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); } // Last development diff --git a/src/windows/ride.c b/src/windows/ride.c index 259765df3f..ae2d06fdeb 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -1675,8 +1675,8 @@ static void window_ride_main_mouseup(rct_window *w, int widgetIndex) break; } - RCT2_GLOBAL(0x013CE952 + 6, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint32) = ride->name_arguments; ride_set_status(w->number, status); break; } @@ -1916,8 +1916,8 @@ static void window_ride_main_dropdown(rct_window *w, int widgetIndex, int dropdo break; } - RCT2_GLOBAL(0x013CE952 + 6, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint32) = ride->name_arguments; ride_set_status(w->number, status); break; } @@ -2012,8 +2012,8 @@ static void window_ride_main_invalidate(rct_window *w) if (ride->lifecycle_flags & (RIDE_LIFECYCLE_INDESTRUCTIBLE | RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK)) w->disabled_widgets |= (1 << 22); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; window_ride_main_widgets[WIDX_OPEN].image = SPR_CLOSED + ride->status; window_ride_main_widgets[WIDX_CLOSE_LIGHT].image = SPR_G2_RCT1_CLOSE_BUTTON_0 + (ride->status == RIDE_STATUS_CLOSED) * 2 + widget_is_pressed(w, WIDX_CLOSE_LIGHT); @@ -2233,10 +2233,10 @@ static void window_ride_main_paint(rct_window *w, rct_drawpixelinfo *dpi) if (w->ride.view != 0) { stringId = RideNameConvention[ride->type].vehicle_name + 6; if (w->ride.view > ride->num_vehicles) { - RCT2_GLOBAL(0x013CE952 + 2, uint16) = w->ride.view - ride->num_vehicles; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = w->ride.view - ride->num_vehicles; stringId = RideNameConvention[ride->type].station_name + 6; } else { - RCT2_GLOBAL(0x013CE952 + 2, uint16) = w->ride.view; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = w->ride.view; } } RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = stringId; @@ -2248,15 +2248,15 @@ static void window_ride_main_paint(rct_window *w, rct_drawpixelinfo *dpi) w->x + (widget->left + widget->right - 11) / 2, w->y + widget->top, 0, - (void*)0x013CE952 + (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS ); // Status widget = &window_ride_main_widgets[WIDX_STATUS]; gfx_draw_string_centred_clipped( dpi, - window_ride_get_status(w, (void*)0x013CE952), - (void*)0x013CE952, + window_ride_get_status(w, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS), + (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + (widget->left + widget->right) / 2, w->y + widget->top, @@ -2497,8 +2497,8 @@ static void window_ride_vehicle_invalidate(rct_window *w) ride = GET_RIDE(w->number); rideEntry = ride_get_entry(ride); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; // Widget setup carsPerTrain = ride->num_cars_per_train - rideEntry->zero_cars; @@ -2535,12 +2535,12 @@ static void window_ride_vehicle_invalidate(rct_window *w) window_ride_vehicle_widgets[WIDX_VEHICLE_CARS_PER_TRAIN_DROPDOWN].type = WWT_EMPTY; } - RCT2_GLOBAL(0x013CE952 + 6, uint16) = carsPerTrain; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = carsPerTrain; stringId = RideNameConvention[ride->type].vehicle_name + 4; if (ride->num_vehicles > 1) stringId++; - RCT2_GLOBAL(0x013CE952 + 8, uint16) = stringId; - RCT2_GLOBAL(0x013CE952 + 10, uint16) = ride->num_vehicles; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint16) = stringId; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 10, uint16) = ride->num_vehicles; window_ride_anchor_border_widgets(w); window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10); @@ -3036,8 +3036,8 @@ static void window_ride_operating_invalidate(rct_window *w) ride = GET_RIDE(w->number); rideEntry = ride_get_entry(ride); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; // Widget setup w->pressed_widgets &= ~0x44700000; @@ -3115,7 +3115,7 @@ static void window_ride_operating_invalidate(rct_window *w) window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_INCREASE].type = WWT_DROPDOWN_BUTTON; window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_DECREASE].type = WWT_DROPDOWN_BUTTON; - RCT2_GLOBAL(0x013CE952 + 10, uint16) = 1217; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 10, uint16) = 1217; RCT2_GLOBAL(0x013CE95E, uint16) = ride->min_waiting_time; RCT2_GLOBAL(0x013CE960, uint16) = 1217; RCT2_GLOBAL(0x013CE962, uint16) = ride->max_waiting_time; @@ -3559,8 +3559,8 @@ static void window_ride_maintenance_invalidate(rct_window *w) window_ride_set_pressed_tab(w); rct_ride *ride = GET_RIDE(w->number); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; window_ride_maintenance_widgets[WIDX_INSPECTION_INTERVAL].image = STR_EVERY_10_MINUTES + ride->inspection_interval; @@ -3670,9 +3670,9 @@ static void window_ride_maintenance_paint(rct_window *w, rct_drawpixelinfo *dpi) } else { mechanicSprite = &(g_sprite_list[ride->mechanic].peep); if (peep_is_mechanic(mechanicSprite)) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = mechanicSprite->name_string_idx; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = mechanicSprite->id; - gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x + 4, y, 280, stringId, 0); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = mechanicSprite->name_string_idx; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = mechanicSprite->id; + gfx_draw_string_left_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x + 4, y, 280, stringId, 0); } } } @@ -4048,8 +4048,8 @@ static void window_ride_colour_invalidate(rct_window *w) ride = GET_RIDE(w->number); rideEntry = ride_get_entry(ride); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; // Track colours int colourScheme = *((uint16*)&w->var_494); @@ -4167,10 +4167,10 @@ static void window_ride_colour_invalidate(rct_window *w) window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME].type = WWT_EMPTY; window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN].type = WWT_EMPTY; } - RCT2_GLOBAL(0x013CE952 + 6, uint16) = STR_ALL_VEHICLES_IN_SAME_COLOURS + vehicleColourSchemeType; - RCT2_GLOBAL(0x013CE952 + 8, uint16) = RideNameConvention[ride->type].vehicle_name; - RCT2_GLOBAL(0x013CE952 + 10, uint16) = RideNameConvention[ride->type].vehicle_name + 2; - RCT2_GLOBAL(0x013CE952 + 12, uint16) = w->var_48C + 1; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = STR_ALL_VEHICLES_IN_SAME_COLOURS + vehicleColourSchemeType; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint16) = RideNameConvention[ride->type].vehicle_name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 10, uint16) = RideNameConvention[ride->type].vehicle_name + 2; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 12, uint16) = w->var_48C + 1; // Vehicle index if (vehicleColourSchemeType != 0) { window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_INDEX].type = WWT_DROPDOWN; @@ -4528,8 +4528,8 @@ static void window_ride_music_invalidate(rct_window *w) window_ride_set_pressed_tab(w); rct_ride *ride = GET_RIDE(w->number); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; // Set selected music window_ride_music_widgets[WIDX_MUSIC].image = STR_MUSIC_STYLE_START + ride->music; @@ -4813,8 +4813,8 @@ static void window_ride_measurements_invalidate(rct_window *w) window_ride_set_pressed_tab(w); rct_ride *ride = GET_RIDE(w->number); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; window_ride_measurements_widgets[WIDX_SAVE_TRACK_DESIGN].tooltip = STR_SAVE_TRACK_DESIGN_NOT_POSSIBLE; window_ride_measurements_widgets[WIDX_SAVE_TRACK_DESIGN].type = WWT_EMPTY; @@ -4879,15 +4879,15 @@ static void window_ride_measurements_paint(rct_window *w, rct_drawpixelinfo *dpi if (ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) { // Excitement - RCT2_GLOBAL(0x013CE952 + 0, uint32) = ride->excitement; - RCT2_GLOBAL(0x013CE952 + 4, uint16) = STR_RATING_LOW + min(ride->excitement >> 8, 5); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint32) = ride->excitement; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = STR_RATING_LOW + min(ride->excitement >> 8, 5); stringId = ride->excitement == -1 ? STR_EXCITEMENT_RATING_NOT_YET_AVAILABLE : STR_EXCITEMENT_RATING; - gfx_draw_string_left(dpi, stringId, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, stringId, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 10; // Intensity - RCT2_GLOBAL(0x013CE952 + 0, uint32) = ride->intensity; - RCT2_GLOBAL(0x013CE952 + 4, uint16) = STR_RATING_LOW + min(ride->intensity >> 8, 5); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint32) = ride->intensity; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = STR_RATING_LOW + min(ride->intensity >> 8, 5); stringId = STR_INTENSITY_RATING; if (ride->excitement == -1) @@ -4895,14 +4895,14 @@ static void window_ride_measurements_paint(rct_window *w, rct_drawpixelinfo *dpi else if (ride->intensity >= RIDE_RATING(10,00)) stringId = STR_INTENSITY_RATING_RED; - gfx_draw_string_left(dpi, stringId, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, stringId, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 10; // Nausea - RCT2_GLOBAL(0x013CE952 + 0, uint32) = ride->nausea; - RCT2_GLOBAL(0x013CE952 + 4, uint16) = STR_RATING_LOW + min(ride->nausea >> 8, 5); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint32) = ride->nausea; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = STR_RATING_LOW + min(ride->nausea >> 8, 5); stringId = ride->excitement == -1 ? STR_NAUSEA_RATING_NOT_YET_AVAILABLE : STR_NAUSEA_RATING; - gfx_draw_string_left(dpi, stringId, (void*)0x013CE952, 0, x, y); + gfx_draw_string_left(dpi, stringId, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 20; // Horizontal rule @@ -4930,22 +4930,22 @@ static void window_ride_measurements_paint(rct_window *w, rct_drawpixelinfo *dpi for (i = 0; i < ride->num_stations; i++) { time = ride->time[numTimes]; if (time != 0) { - RCT2_GLOBAL(0x013CE952 + 0 + (numTimes * 4), uint16) = 1343; - RCT2_GLOBAL(0x013CE952 + 2 + (numTimes * 4), uint16) = time; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0 + (numTimes * 4), uint16) = 1343; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2 + (numTimes * 4), uint16) = time; numTimes++; } } if (numTimes == 0) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = 1343; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 1343; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = 0; numTimes++; } RCT2_GLOBAL(0x013CE94E + (numTimes * 4), uint16) = 1342; - RCT2_GLOBAL(0x013CE952 + 0 + (numTimes * 4), uint16) = 0; - RCT2_GLOBAL(0x013CE952 + 2 + (numTimes * 4), uint16) = 0; - RCT2_GLOBAL(0x013CE952 + 4 + (numTimes * 4), uint16) = 0; - RCT2_GLOBAL(0x013CE952 + 6 + (numTimes * 4), uint16) = 0; - gfx_draw_string_left_clipped(dpi, STR_RIDE_TIME, (void*)0x013CE952, 0, x, y, 308); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0 + (numTimes * 4), uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2 + (numTimes * 4), uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4 + (numTimes * 4), uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6 + (numTimes * 4), uint16) = 0; + gfx_draw_string_left_clipped(dpi, STR_RIDE_TIME, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, 308); y += 10; } @@ -4955,22 +4955,22 @@ static void window_ride_measurements_paint(rct_window *w, rct_drawpixelinfo *dpi length = ride->length[numLengths]; if (length != 0) { length >>= 16; - RCT2_GLOBAL(0x013CE952 + 0 + (numLengths * 4), uint16) = 1346; - RCT2_GLOBAL(0x013CE952 + 2 + (numLengths * 4), uint16) = (length & 0xFFFF); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0 + (numLengths * 4), uint16) = 1346; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2 + (numLengths * 4), uint16) = (length & 0xFFFF); numLengths++; } } if (numLengths == 0) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = 1346; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 1346; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = 0; numLengths++; } RCT2_GLOBAL(0x013CE94E + (numLengths * 4), uint16) = 1345; - RCT2_GLOBAL(0x013CE952 + 0 + (numLengths * 4), uint16) = 0; - RCT2_GLOBAL(0x013CE952 + 2 + (numLengths * 4), uint16) = 0; - RCT2_GLOBAL(0x013CE952 + 4 + (numLengths * 4), uint16) = 0; - RCT2_GLOBAL(0x013CE952 + 6 + (numLengths * 4), uint16) = 0; - gfx_draw_string_left_clipped(dpi, STR_RIDE_LENGTH, (void*)0x013CE952, 0, x, y, 308); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0 + (numLengths * 4), uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2 + (numLengths * 4), uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4 + (numLengths * 4), uint16) = 0; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6 + (numLengths * 4), uint16) = 0; + gfx_draw_string_left_clipped(dpi, STR_RIDE_LENGTH, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, 308); y += 10; if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) { @@ -5181,9 +5181,9 @@ static void window_ride_graphs_tooltip(rct_window* w, int widgetIndex, rct_strin RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = 3158; measurement = ride_get_measurement(w->number, &message); if (measurement != NULL && (measurement->flags & RIDE_MEASUREMENT_FLAG_RUNNING)) { - RCT2_GLOBAL(0x013CE952 + 4, uint16) = measurement->vehicle_index + 1; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = measurement->vehicle_index + 1; ride = GET_RIDE(w->number); - RCT2_GLOBAL(0x013CE952 + 2, uint16) = RideNameConvention[ride->type].vehicle_name + 6; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = RideNameConvention[ride->type].vehicle_name + 6; } else { *stringId = message; } @@ -5214,8 +5214,8 @@ static void window_ride_graphs_invalidate(rct_window *w) ride = GET_RIDE(w->number); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; // Set pressed graph button type w->pressed_widgets &= ~(1 << WIDX_GRAPH_VELOCITY); @@ -5285,7 +5285,7 @@ static void window_ride_graphs_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi x = (widget->right - widget->left) / 2; y = (widget->bottom - widget->top) / 2 - 5; width = widget->right - widget->left - 2; - gfx_draw_string_centred_wrapped(dpi, (void*)0x013CE952, x, y, width, stringId, 0); + gfx_draw_string_centred_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, width, stringId, 0); return; } @@ -5666,8 +5666,8 @@ static void window_ride_income_invalidate(rct_window *w) window_ride_set_pressed_tab(w); rct_ride *ride = GET_RIDE(w->number); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; rideEntry = ride_get_entry(ride); @@ -5687,7 +5687,7 @@ static void window_ride_income_invalidate(rct_window *w) window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_EMPTY; window_ride_income_widgets[WIDX_PRIMARY_PRICE].image = 1429; - RCT2_GLOBAL(0x013CE952 + 6, money32) = ride->price; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, money32) = ride->price; if (ride->price == 0) window_ride_income_widgets[WIDX_PRIMARY_PRICE].image = STR_FREE; @@ -5752,7 +5752,7 @@ static void window_ride_income_invalidate(rct_window *w) // Set secondary item price window_ride_income_widgets[WIDX_SECONDARY_PRICE].image = 1799; - RCT2_GLOBAL(0x013CE952 + 10, money32) = ride->price_secondary; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 10, money32) = ride->price_secondary; if (ride->price_secondary == 0) window_ride_income_widgets[WIDX_SECONDARY_PRICE].image = STR_FREE; } @@ -5933,8 +5933,8 @@ static void window_ride_customer_invalidate(rct_window *w) window_ride_set_pressed_tab(w); rct_ride *ride = GET_RIDE(w->number); - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; window_ride_customer_widgets[WIDX_SHOW_GUESTS_THOUGHTS].type = WWT_FLATBTN; if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) { @@ -6007,9 +6007,9 @@ static void window_ride_customer_paint(rct_window *w, rct_drawpixelinfo *dpi) // Primary shop items sold shopItem = ride_get_entry(ride)->shop_item; if (shopItem != 0xFF) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ShopItemStringIds[shopItem].plural; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->no_primary_items_sold; - gfx_draw_string_left(dpi, STR_ITEMS_SOLD, (void*)0x013CE952, 0, x, y); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ShopItemStringIds[shopItem].plural; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->no_primary_items_sold; + gfx_draw_string_left(dpi, STR_ITEMS_SOLD, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 10; } @@ -6018,9 +6018,9 @@ static void window_ride_customer_paint(rct_window *w, rct_drawpixelinfo *dpi) RCT2_GLOBAL(0x0097D7CB + (ride->type * 4), uint8) : ride_get_entry(ride)->shop_item_secondary; if (shopItem != 0xFF) { - RCT2_GLOBAL(0x013CE952 + 0, uint16) = ShopItemStringIds[shopItem].plural; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->no_secondary_items_sold; - gfx_draw_string_left(dpi, STR_ITEMS_SOLD, (void*)0x013CE952, 0, x, y); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = ShopItemStringIds[shopItem].plural; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->no_secondary_items_sold; + gfx_draw_string_left(dpi, STR_ITEMS_SOLD, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 10; } diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 4d8c1c992c..5a2480a890 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -2073,17 +2073,17 @@ static void window_ride_construction_invalidate(rct_window *w) RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = stringId; if (RCT2_GLOBAL(0x00F440D3, uint8) == 1) - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ((RCT2_GLOBAL(0x00F440CD, uint8) * 9) >> 2) & 0xFFFF; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ((RCT2_GLOBAL(0x00F440CD, uint8) * 9) >> 2) & 0xFFFF; window_ride_construction_widgets[WIDX_SEAT_ROTATION_ANGLE_SPINNER].image = STR_RIDE_CONSTRUCTION_SEAT_ROTATION_ANGLE_NEG_180 + RCT2_GLOBAL(0x00F440CF, uint8); if (RCT2_GLOBAL(0x00F440D3, uint8) == 2) - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ((RCT2_GLOBAL(0x00F440CE, uint8) * 9) >> 2) & 0xFFFF; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ((RCT2_GLOBAL(0x00F440CE, uint8) * 9) >> 2) & 0xFFFF; // Set window title arguments - RCT2_GLOBAL(0x013CE952 + 4, uint16) = ride->name; - RCT2_GLOBAL(0x013CE952 + 6, uint32) = ride->name_arguments; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint16) = ride->name; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint32) = ride->name_arguments; } /** diff --git a/src/windows/ride_list.c b/src/windows/ride_list.c index b557ca0f1c..e42f8f7eb5 100644 --- a/src/windows/ride_list.c +++ b/src/windows/ride_list.c @@ -474,59 +474,59 @@ static void window_ride_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, switch (_window_ride_list_information_type) { case INFORMATION_TYPE_STATUS: ride_get_status(w->list_item_positions[i], &formatSecondary, &argument); - RCT2_GLOBAL(0x013CE952 + 2, sint32) = argument; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, sint32) = argument; break; case INFORMATION_TYPE_POPULARITY: formatSecondary = STR_POPULARITY_UNKNOWN_LABEL; if (ride->popularity != 255) { formatSecondary = STR_POPULARITY_LABEL; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride->popularity * 4; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ride->popularity * 4; } break; case INFORMATION_TYPE_SATISFACTION: formatSecondary = STR_SATISFACTION_UNKNOWN_LABEL; if (ride->satisfaction != 255) { formatSecondary = STR_SATISFACTION_LABEL; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride->satisfaction * 5; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ride->satisfaction * 5; } break; case INFORMATION_TYPE_PROFIT: formatSecondary = 0; if (ride->profit != MONEY32_UNDEFINED) { formatSecondary = STR_PROFIT_LABEL; - RCT2_GLOBAL(0x013CE952 + 2, sint32) = ride->profit; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, sint32) = ride->profit; } break; case INFORMATION_TYPE_QUEUE_LENGTH: - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride_get_total_queue_length(ride); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ride_get_total_queue_length(ride); formatSecondary = STR_QUEUE_EMPTY; - if (RCT2_GLOBAL(0x013CE952 + 2, uint16) == 1) + if (RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) == 1) formatSecondary = STR_QUEUE_ONE_PERSON; - else if (RCT2_GLOBAL(0x013CE952 + 2, uint16) > 1) + else if (RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) > 1) formatSecondary = STR_QUEUE_PEOPLE; break; case INFORMATION_TYPE_QUEUE_TIME: - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride_get_max_queue_time(ride); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ride_get_max_queue_time(ride); formatSecondary = STR_QUEUE_TIME_LABEL; - if (RCT2_GLOBAL(0x013CE952 + 2, uint16) > 1) + if (RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) > 1) formatSecondary = STR_QUEUE_TIME_PLURAL_LABEL; break; case INFORMATION_TYPE_RELIABILITY: // edx = RCT2_GLOBAL(0x009ACFA4 + (ride->var_001 * 4), uint32); - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride->reliability >> 8; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ride->reliability >> 8; formatSecondary = STR_RELIABILITY_LABEL; break; case INFORMATION_TYPE_DOWN_TIME: // edx = RCT2_GLOBAL(0x009ACFA4 + (ride->var_001 * 4), uint32); - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride->downtime; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ride->downtime; formatSecondary = STR_DOWN_TIME_LABEL; break; case INFORMATION_TYPE_GUESTS_FAVOURITE: formatSecondary = 0; if (RCT2_ADDRESS(0x0097C3AF, uint8)[ride->type] == PAGE_RIDES) { - RCT2_GLOBAL(0x013CE952 + 2, uint16) = ride->guests_favourite; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = ride->guests_favourite; formatSecondary = ride->guests_favourite == 1 ? STR_GUESTS_FAVOURITE_LABEL : STR_GUESTS_FAVOURITE_PLURAL_LABEL; } break; @@ -537,7 +537,7 @@ static void window_ride_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, format = 1192; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = formatSecondary; - gfx_draw_string_left_clipped(dpi, format, (void*)0x013CE952, 0, 160, y - 1, 157); + gfx_draw_string_left_clipped(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, 160, y - 1, 157); y += 10; } } @@ -712,8 +712,8 @@ static void window_ride_list_close_all(rct_window *w) continue; if (ride->status == RIDE_STATUS_CLOSED) continue; - RCT2_GLOBAL(0x013CE952 + 6, uint16) = w->scrolls[0].v_top; - RCT2_GLOBAL(0x013CE952 + 8, uint32) = w->scrolls[0].v_bottom; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = w->scrolls[0].v_top; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint32) = w->scrolls[0].v_bottom; ride_set_status(i, RIDE_STATUS_CLOSED); } @@ -729,8 +729,8 @@ static void window_ride_list_open_all(rct_window *w) continue; if (ride->status == RIDE_STATUS_OPEN) continue; - RCT2_GLOBAL(0x013CE952 + 6, uint16) = w->scrolls[0].v_top; - RCT2_GLOBAL(0x013CE952 + 8, uint32) = w->scrolls[0].v_bottom; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 6, uint16) = w->scrolls[0].v_top; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 8, uint32) = w->scrolls[0].v_bottom; ride_set_status(i, RIDE_STATUS_OPEN); } diff --git a/src/windows/scenery.c b/src/windows/scenery.c index 6fcf842440..3c8e57278b 100644 --- a/src/windows/scenery.c +++ b/src/windows/scenery.c @@ -1031,12 +1031,12 @@ void window_scenery_paint(rct_window *w, rct_drawpixelinfo *dpi) if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) { // -14 - gfx_draw_string_right(dpi, STR_COST_LABEL, (void*)0x013CE952, 0, + gfx_draw_string_right(dpi, STR_COST_LABEL, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + w->width - 0x1A, w->y + w->height - 13); } RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = sceneryEntry->name; - gfx_draw_string_left_clipped(dpi, 0x4A7, (void*)0x013CE952, 0, + gfx_draw_string_left_clipped(dpi, 0x4A7, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + 3, w->y + w->height - 13, w->width - 19); } diff --git a/src/windows/shortcut_key_change.c b/src/windows/shortcut_key_change.c index 7f690384b8..d47841433b 100644 --- a/src/windows/shortcut_key_change.c +++ b/src/windows/shortcut_key_change.c @@ -122,5 +122,5 @@ static void window_shortcut_change_paint(rct_window *w, rct_drawpixelinfo *dpi) int y = w->y + 30; RCT2_GLOBAL(0x13CE952, uint16) = ShortcutStringIds[RCT2_GLOBAL(0x009DE511, uint8)]; - gfx_draw_string_centred_wrapped(dpi, (void*)0x013CE952, x, y, 242, 2785, RCT2_GLOBAL(0x9DEB8D, uint8)); + gfx_draw_string_centred_wrapped(dpi, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, x, y, 242, 2785, RCT2_GLOBAL(0x9DEB8D, uint8)); } diff --git a/src/windows/staff.c b/src/windows/staff.c index 27722795ea..932ba69ee4 100644 --- a/src/windows/staff.c +++ b/src/windows/staff.c @@ -1056,7 +1056,7 @@ void window_staff_stats_paint(rct_window *w, rct_drawpixelinfo *dpi) if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)){ RCT2_GLOBAL(0x13CE952,uint32) = RCT2_ADDRESS(0x992A00,uint16)[peep->staff_type]; - gfx_draw_string_left(dpi, 2349, (void*)0x013CE952, 0,x, y); + gfx_draw_string_left(dpi, 2349, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0,x, y); y += 10; } diff --git a/src/windows/staff_list.c b/src/windows/staff_list.c index 797531f490..76595b00da 100644 --- a/src/windows/staff_list.c +++ b/src/windows/staff_list.c @@ -591,7 +591,7 @@ void window_staff_list_paint(rct_window *w, rct_drawpixelinfo *dpi) if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = RCT2_ADDRESS(0x00992A00, uint16)[selectedTab]; - gfx_draw_string_left(dpi, 1858, (void*)0x013CE952, 0, w->x + 0xA5, w->y + 0x20); + gfx_draw_string_left(dpi, 1858, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + 0xA5, w->y + 0x20); } if (selectedTab < 3) { @@ -605,9 +605,9 @@ void window_staff_list_paint(rct_window *w, rct_drawpixelinfo *dpi) } RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = _window_staff_list_selected_type_count; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = staffTypeStringId; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = staffTypeStringId; - gfx_draw_string_left(dpi, STR_STAFF_LIST_COUNTER, (void*)0x013CE952, 0, w->x + 4, window_staff_list_widgets[WIDX_STAFF_LIST_LIST].bottom + w->y + 2); + gfx_draw_string_left(dpi, STR_STAFF_LIST_COUNTER, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, w->x + 4, window_staff_list_widgets[WIDX_STAFF_LIST_LIST].bottom + w->y + 2); } /** @@ -641,13 +641,13 @@ void window_staff_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int sc } RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = peep->name_string_idx; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = peep->id; - gfx_draw_string_left_clipped(dpi, format, (void*)0x013CE952, 0, 0, y - 1, 107); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = peep->id; + gfx_draw_string_left_clipped(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, 0, y - 1, 107); get_arguments_from_action(peep, &argument_1, &argument_2); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint32) = argument_1; - RCT2_GLOBAL(0x013CE952 + 4, uint32) = argument_2; - gfx_draw_string_left_clipped(dpi, format, (void*)0x013CE952, 0, 175, y - 1, 305); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 4, uint32) = argument_2; + gfx_draw_string_left_clipped(dpi, format, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, 175, y - 1, 305); // True if a patrol path is set for the worker if (RCT2_ADDRESS(RCT2_ADDRESS_STAFF_MODE_ARRAY, uint8)[peep->staff_id] & 2) { diff --git a/src/windows/tooltip.c b/src/windows/tooltip.c index 724e42e331..f2bf9b6e7b 100644 --- a/src/windows/tooltip.c +++ b/src/windows/tooltip.c @@ -92,7 +92,7 @@ void window_tooltip_show(rct_string_id id, int x, int y) RCT2_GLOBAL(0x0142006C, sint32) = -1; char* buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char); - format_string(buffer, id, (void*)0x013CE952); + format_string(buffer, id, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS); RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = FONT_SPRITE_BASE_MEDIUM; int tooltip_text_width; diff --git a/src/windows/track_list.c b/src/windows/track_list.c index e5ad05a6e8..f345b6fef6 100644 --- a/src/windows/track_list.c +++ b/src/windows/track_list.c @@ -483,9 +483,9 @@ static void window_track_list_paint(rct_window *w, rct_drawpixelinfo *dpi) } // Ride length - RCT2_GLOBAL(0x013CE952 + 0, uint16) = 1345; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = track_td6->ride_length; - gfx_draw_string_left_clipped(dpi, STR_TRACK_LIST_RIDE_LENGTH, (void*)0x013CE952, 0, x, y, 214); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = 1345; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = track_td6->ride_length; + gfx_draw_string_left_clipped(dpi, STR_TRACK_LIST_RIDE_LENGTH, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y, 214); y += 10; } @@ -540,9 +540,9 @@ static void window_track_list_paint(rct_window *w, rct_drawpixelinfo *dpi) if (track_td6->space_required_x != 0xFF) { // Space required - RCT2_GLOBAL(0x013CE952 + 0, uint16) = track_td6->space_required_x; - RCT2_GLOBAL(0x013CE952 + 2, uint16) = track_td6->space_required_y; - gfx_draw_string_left(dpi, STR_TRACK_LIST_SPACE_REQUIRED, (void*)0x013CE952, 0, x, y); + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = track_td6->space_required_x; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = track_td6->space_required_y; + gfx_draw_string_left(dpi, STR_TRACK_LIST_SPACE_REQUIRED, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); y += 10; } diff --git a/src/windows/viewport.c b/src/windows/viewport.c index 9a09015bb0..33a09aac9c 100644 --- a/src/windows/viewport.c +++ b/src/windows/viewport.c @@ -221,7 +221,7 @@ static void window_viewport_invalidate(rct_window *w) } // Set title - RCT2_GLOBAL(0x013CE952 + 0, uint32) = w->number; + RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint32) = w->number; // Set disabled widgets w->disabled_widgets = 0; From 020334fa18b6053fd60659ede75701b836d7850e Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 26 Dec 2015 18:18:56 +0900 Subject: [PATCH 24/42] Name rct_window's var_494: highlighted_item. --- src/interface/window.h | 2 +- src/windows/editor_inventions_list.c | 2 +- src/windows/editor_object_selection.c | 14 +++++++------- src/windows/guest.c | 20 ++++++++++---------- src/windows/ride.c | 20 ++++++++++---------- src/windows/staff.c | 5 ++--- src/windows/title_scenarioselect.c | 12 ++++++------ 7 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/interface/window.h b/src/interface/window.h index da5a3935b1..049127b94f 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -264,7 +264,7 @@ typedef struct rct_window { uint16 frame_no; // 0x48E updated every tic for motion in windows sprites uint16 list_information_type; // 0x490 0 for none, Used as current position of marquee in window_peep sint16 var_492; - uint32 var_494; // 0x494 highlighted item? + uint32 highlighted_item; // 0x494 uint8 var_498[0x14]; sint16 selected_tab; // 0x4AC sint16 var_4AE; diff --git a/src/windows/editor_inventions_list.c b/src/windows/editor_inventions_list.c index 62bb6d3f6f..6fdab5406a 100644 --- a/src/windows/editor_inventions_list.c +++ b/src/windows/editor_inventions_list.c @@ -155,7 +155,7 @@ static rct_window_event_list window_editor_inventions_list_drag_events = { rct_research_item *_editorInventionsListDraggedItem; -#define WindowHighlightedItem(w) *((rct_research_item**)&(w->var_494)) +#define WindowHighlightedItem(w) *((rct_research_item**)&(w->highlighted_item)) static void window_editor_inventions_list_drag_open(rct_research_item *researchItem); static void move_research_item(rct_research_item *beforeItem); diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 4db5b2bb9c..ba322044fb 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -419,7 +419,7 @@ void window_editor_object_selection_open() window->var_4AE = 0; window->selected_tab = 0; window->selected_list_item = -1; - window->var_494 = 0xFFFFFFFF; + window->highlighted_item = 0xFFFFFFFF; window->min_width = 600; window->min_height = 400; window->max_width = 1200; @@ -836,7 +836,7 @@ static void window_editor_object_selection_mouseup(rct_window *w, int widgetInde visible_list_refresh(w); w->selected_list_item = -1; - w->var_494 = 0xFFFFFFFF; + w->highlighted_item = 0xFFFFFFFF; w->scrolls[0].v_top = 0; object_free_scenario_text(); window_invalidate(w); @@ -856,7 +856,7 @@ static void window_editor_object_selection_mouseup(rct_window *w, int widgetInde visible_list_refresh(w); w->selected_list_item = -1; - w->var_494 = 0xFFFFFFFF; + w->highlighted_item = 0xFFFFFFFF; w->scrolls[0].v_top = 0; object_free_scenario_text(); window_invalidate(w); @@ -1051,7 +1051,7 @@ static void window_editor_object_selection_scroll_mouseover(rct_window *w, int s return; w->selected_list_item = selectedObject; - w->var_494 = (uint32)installedEntry; + w->highlighted_item = (uint32)installedEntry; object_free_scenario_text(); if (selectedObject != -1) object_get_scenario_text(installedEntry); @@ -1342,7 +1342,7 @@ static void window_editor_object_selection_paint(rct_window *w, rct_drawpixelinf if (w->selected_list_item == -1 || stex_entry == NULL) return; - highlightedEntry = (rct_object_entry*)w->var_494; + highlightedEntry = (rct_object_entry*)w->highlighted_item; type = highlightedEntry->flags & 0x0F; // Draw preview @@ -1458,7 +1458,7 @@ static void window_editor_object_selection_scrollpaint(rct_window *w, rct_drawpi // Highlight background colour = 142; - if (listItem->entry == (rct_object_entry*)w->var_494 && !(*listItem->flags & OBJECT_SELECTION_FLAG_6)) { + if (listItem->entry == (rct_object_entry*)w->highlighted_item && !(*listItem->flags & OBJECT_SELECTION_FLAG_6)) { gfx_fill_rect(dpi, 0, y, w->width, y + 11, 0x2000031); colour = 14; } @@ -1515,7 +1515,7 @@ static void window_editor_object_set_page(rct_window *w, int page) w->selected_tab = page; w->selected_list_item = -1; - w->var_494 = 0xFFFFFFFF; + w->highlighted_item = 0xFFFFFFFF; w->scrolls[0].v_top = 0; object_free_scenario_text(); diff --git a/src/windows/guest.c b/src/windows/guest.c index 62390e5294..58f808db5c 100644 --- a/src/windows/guest.c +++ b/src/windows/guest.c @@ -504,7 +504,7 @@ void window_guest_open(rct_peep* peep){ window->frame_no = 0; window->list_information_type = 0; window->var_492 = 0; - window->var_494 = 0; + window->highlighted_item = 0; window_guest_disable_widgets(window); window->min_width = 192; window->min_height = 157; @@ -835,7 +835,7 @@ void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi){ int eax = 0; if (w->page == WINDOW_GUEST_OVERVIEW){ - eax = w->var_494>>16; + eax = w->highlighted_item>>16; eax &= 0xFFFC; } ebx += eax; @@ -1111,27 +1111,27 @@ void window_guest_overview_invalidate(rct_window *w) * rct2: 0x696F45 */ void window_guest_overview_update(rct_window* w){ - int var_496 = w->var_494 >> 16; + int var_496 = w->highlighted_item >> 16; var_496++; var_496 %= 24; - w->var_494 &= 0x0000FFFF; - w->var_494 |= var_496 << 16; + w->highlighted_item &= 0x0000FFFF; + w->highlighted_item |= var_496 << 16; widget_invalidate(w, WIDX_TAB_1); widget_invalidate(w, WIDX_TAB_2); w->list_information_type += 2; - if ((w->var_494 & 0xFFFF) == 0xFFFF) - w->var_494 &= 0xFFFF0000; + if ((w->highlighted_item & 0xFFFF) == 0xFFFF) + w->highlighted_item &= 0xFFFF0000; else - w->var_494++; + w->highlighted_item++; // Disable peep watching thought for multiplayer as its client specific if (network_get_mode() == NETWORK_MODE_NONE) { // Create the "I have the strangest feeling I am being watched thought" - if ((w->var_494 & 0xFFFF) >= 3840) { - if (!(w->var_494 & 0x3FF)) { + if ((w->highlighted_item & 0xFFFF) >= 3840) { + if (!(w->highlighted_item & 0x3FF)) { int random = util_rand() & 0xFFFF; if (random <= 0x2AAA) { rct_peep* peep = GET_PEEP(w->number); diff --git a/src/windows/ride.c b/src/windows/ride.c index ae2d06fdeb..c410f4e62d 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -1183,7 +1183,7 @@ rct_window *window_ride_open(int rideIndex) w->frame_no = 0; w->list_information_type = 0; w->var_492 = 0; - w->var_494 = 0; + w->highlighted_item = 0; window_ride_disable_tabs(w); w->min_width = 316; w->min_height = 180; @@ -3722,7 +3722,7 @@ static void window_ride_set_track_colour_scheme(rct_window *w, int x, int y) uint8 newColourScheme; int interactionType, z, direction; - newColourScheme = (uint8)(*((uint16*)&w->var_494)); + newColourScheme = (uint8)(*((uint16*)&w->highlighted_item)); rct_xy16 mapCoord = { 0 }; get_map_coordinates_from_pos(x, y, VIEWPORT_INTERACTION_MASK_RIDE, &mapCoord.x, &mapCoord.y, &interactionType, &mapElement, NULL); @@ -3812,7 +3812,7 @@ static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_wid ride = GET_RIDE(w->number); rideEntry = ride_get_entry(ride); - colourSchemeIndex = *((uint16*)&w->var_494); + colourSchemeIndex = *((uint16*)&w->highlighted_item); dropdownWidget = widget - 1; switch (widgetIndex) { @@ -3952,20 +3952,20 @@ static void window_ride_colour_dropdown(rct_window *w, int widgetIndex, int drop switch (widgetIndex) { case WIDX_TRACK_COLOUR_SCHEME_DROPDOWN: - *((uint16*)&w->var_494) = dropdownIndex; + *((uint16*)&w->highlighted_item) = dropdownIndex; window_invalidate(w); break; case WIDX_TRACK_MAIN_COLOUR: - game_do_command(0, (0 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->var_494), 0); + game_do_command(0, (0 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->highlighted_item), 0); break; case WIDX_TRACK_ADDITIONAL_COLOUR: - game_do_command(0, (1 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->var_494), 0); + game_do_command(0, (1 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->highlighted_item), 0); break; case WIDX_TRACK_SUPPORT_COLOUR: - game_do_command(0, (4 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->var_494), 0); + game_do_command(0, (4 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->highlighted_item), 0); break; case WIDX_MAZE_STYLE_DROPDOWN: - game_do_command(0, (4 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->var_494), 0); + game_do_command(0, (4 << 8) | 1, 0, (dropdownIndex << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, *((uint16*)&w->highlighted_item), 0); break; case WIDX_ENTRANCE_STYLE_DROPDOWN: game_do_command(0, (6 << 8) | 1, 0, (window_ride_entrance_style_list[dropdownIndex] << 8) | w->number, GAME_COMMAND_SET_RIDE_APPEARANCE, 0, 0); @@ -4052,7 +4052,7 @@ static void window_ride_colour_invalidate(rct_window *w) RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; // Track colours - int colourScheme = *((uint16*)&w->var_494); + int colourScheme = *((uint16*)&w->highlighted_item); trackColour = ride_get_track_colour(ride, colourScheme); // Maze style @@ -4221,7 +4221,7 @@ static void window_ride_colour_paint(rct_window *w, rct_drawpixelinfo *dpi) if (widget->type != WWT_EMPTY) gfx_fill_rect(dpi, w->x + widget->left + 1, w->y + widget->top + 1, w->x + widget->right - 1, w->y + widget->bottom - 1, 12); - trackColour = ride_get_track_colour(ride, *((uint16*)&w->var_494)); + trackColour = ride_get_track_colour(ride, *((uint16*)&w->highlighted_item)); // if (rideEntry->shop_item == 0xFF) { diff --git a/src/windows/staff.c b/src/windows/staff.c index 932ba69ee4..0d3833830f 100644 --- a/src/windows/staff.c +++ b/src/windows/staff.c @@ -309,8 +309,7 @@ rct_window *window_staff_open(rct_peep* peep) w->page = 0; w->viewport_focus_coordinates.y = 0; w->frame_no = 0; - - RCT2_GLOBAL((int*)w + 0x496, uint16) = 0; // missing, var_494 should perhaps be uint16? + w->highlighted_item = 0; window_staff_disable_widgets(w); @@ -993,7 +992,7 @@ void window_staff_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) int eax = 0; if (w->page == WINDOW_STAFF_OVERVIEW){ - eax = w->var_494 >> 16; + eax = w->highlighted_item >> 16; eax &= 0xFFFC; } ebx += eax; diff --git a/src/windows/title_scenarioselect.c b/src/windows/title_scenarioselect.c index cf21bda098..bf5f198bd1 100644 --- a/src/windows/title_scenarioselect.c +++ b/src/windows/title_scenarioselect.c @@ -125,7 +125,7 @@ void window_scenarioselect_open() window->enabled_widgets = 0x04 | 0x10 | 0x20 | 0x40 | 0x80 | 0x100; window_init_scroll_widgets(window); window->viewport_focus_coordinates.var_480 = -1; - window->var_494 = 0; + window->highlighted_item = 0; window_scenarioselect_init_tabs(); @@ -174,7 +174,7 @@ static void window_scenarioselect_mousedown(int widgetIndex, rct_window*w, rct_w { if (widgetIndex >= WIDX_TAB1 && widgetIndex <= WIDX_TAB5) { w->selected_tab = widgetIndex - 4; - w->var_494 = 0; + w->highlighted_item = 0; window_invalidate(w); window_event_resize_call(w); window_event_invalidate_call(w); @@ -248,8 +248,8 @@ static void window_scenarioselect_scrollmouseover(rct_window *w, int scrollIndex selected = scenario; break; } - if (w->var_494 != (uint32)selected) { - w->var_494 = (uint32)selected; + if (w->highlighted_item != (uint32)selected) { + w->highlighted_item = (uint32)selected; window_invalidate(w); } } @@ -285,7 +285,7 @@ static void window_scenarioselect_paint(rct_window *w, rct_drawpixelinfo *dpi) } // Return if no scenario highlighted - scenario = (rct_scenario_basic*)w->var_494; + scenario = (rct_scenario_basic*)w->highlighted_item; if (scenario == NULL) return; @@ -341,7 +341,7 @@ static void window_scenarioselect_scrollpaint(rct_window *w, rct_drawpixelinfo * if (y > dpi->y + dpi->height) continue; - highlighted = w->var_494 == (int)scenario; + highlighted = w->highlighted_item == (int)scenario; // Draw hover highlight if (highlighted) From 3d99b73ae13f54889bae437f4784edb95880a014 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 26 Dec 2015 18:22:50 +0900 Subject: [PATCH 25/42] Name enabled widgets on scenario select screen. --- src/windows/title_scenarioselect.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/windows/title_scenarioselect.c b/src/windows/title_scenarioselect.c index bf5f198bd1..18d3511fe3 100644 --- a/src/windows/title_scenarioselect.c +++ b/src/windows/title_scenarioselect.c @@ -122,7 +122,9 @@ void window_scenarioselect_open() ); window->widgets = window_scenarioselect_widgets; - window->enabled_widgets = 0x04 | 0x10 | 0x20 | 0x40 | 0x80 | 0x100; + window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) + | (1 << WIDX_TAB3) | (1 << WIDX_TAB4) | (1 << WIDX_TAB5); + window_init_scroll_widgets(window); window->viewport_focus_coordinates.var_480 = -1; window->highlighted_item = 0; @@ -258,7 +260,9 @@ static void window_scenarioselect_invalidate(rct_window *w) { colour_scheme_update(w); - w->pressed_widgets &= ~(0x10 | 0x20 | 0x40 | 0x80 | 0x100); + w->pressed_widgets &= ~( (1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) + | (1 << WIDX_TAB3) | (1 << WIDX_TAB4) | (1 << WIDX_TAB5) ); + w->pressed_widgets |= 1LL << (w->selected_tab + 4); } From 6d5c96d0838a6d0ac191d8f08086e1c6da501766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sat, 26 Dec 2015 11:18:44 +0100 Subject: [PATCH 26/42] Use MAX_PATH define for path length, remove redefinition --- src/interface/console.c | 2 +- src/openrct2.h | 1 + src/rct2.h | 3 --- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/interface/console.c b/src/interface/console.c index 2fc7c5adaa..c32f79dc82 100644 --- a/src/interface/console.c +++ b/src/interface/console.c @@ -746,7 +746,7 @@ static void editor_load_selected_objects_console() static int cc_load_object(const utf8 **argv, int argc) { if (argc > 0) { - utf8 path[260]; + utf8 path[MAX_PATH]; substitute_path(path, RCT2_ADDRESS(RCT2_ADDRESS_OBJECT_DATA_PATH, char), argv[0]); // Require pointer to start of filename diff --git a/src/openrct2.h b/src/openrct2.h index 52cbc4d19e..5c7eda680c 100644 --- a/src/openrct2.h +++ b/src/openrct2.h @@ -22,6 +22,7 @@ #define _OPENRCT2_H_ #include "common.h" +#include "platform/platform.h" enum { STARTUP_ACTION_INTRO, diff --git a/src/rct2.h b/src/rct2.h index d11f4a26a7..8885921a74 100644 --- a/src/rct2.h +++ b/src/rct2.h @@ -139,9 +139,6 @@ typedef fixed32_1dp money32; #define MONEY_FREE MONEY(0,00) #define MONEY32_UNDEFINED ((money32)0x80000000) -#ifndef MAX_PATH -#define MAX_PATH 260 -#endif typedef void (EMPTY_ARGS_VOID_POINTER)(); typedef unsigned short rct_string_id; From 79e5bb758d61785759395857d8401899e8503bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sat, 26 Dec 2015 13:12:45 +0100 Subject: [PATCH 27/42] Add an assert for getting proper mapElementType --- src/windows/map.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/windows/map.c b/src/windows/map.c index b6d004249e..9c244c0cb4 100644 --- a/src/windows/map.c +++ b/src/windows/map.c @@ -1546,9 +1546,10 @@ static uint16 map_window_get_pixel_colour_peep(int x, int y) colour = 10 | (colour & 0xFF00); while (!map_element_is_last_for_tile(mapElement++)) { - int mapElementType = map_element_get_type(mapElement); - colour &= ElementTypeMaskColour[mapElementType >> 2]; - colour |= ElementTypeAddColour[mapElementType >> 2]; + int mapElementType = map_element_get_type(mapElement) >> 2; + assert(mapElementType < countof(ElementTypeMaskColour)); + colour &= ElementTypeMaskColour[mapElementType]; + colour |= ElementTypeAddColour[mapElementType]; } return colour; From 53970c2d77ba96dd109cbe7d286d719306c28923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sat, 26 Dec 2015 13:36:32 +0100 Subject: [PATCH 28/42] Add tile type for corrupt element Fixes #2558 --- src/windows/map.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/windows/map.c b/src/windows/map.c index 9c244c0cb4..83a1e5227d 100644 --- a/src/windows/map.c +++ b/src/windows/map.c @@ -1399,7 +1399,8 @@ static const uint16 ElementTypeMaskColour[] = { 0x0000, // MAP_ELEMENT_TYPE_ENTRANCE 0xFFFF, // MAP_ELEMENT_TYPE_FENCE 0x0000, // MAP_ELEMENT_TYPE_SCENERY_MULTIPLE - 0xFFFF // MAP_ELEMENT_TYPE_BANNER + 0xFFFF, // MAP_ELEMENT_TYPE_BANNER + 0x0000, // MAP_ELEMENT_TYPE_CORRUPT }; static const uint16 ElementTypeAddColour[] = { @@ -1410,7 +1411,8 @@ static const uint16 ElementTypeAddColour[] = { 0xBABA, // MAP_ELEMENT_TYPE_ENTRANCE 0x0000, // MAP_ELEMENT_TYPE_FENCE 0x6363, // MAP_ELEMENT_TYPE_SCENERY_MULTIPLE - 0x0000 // MAP_ELEMENT_TYPE_BANNER + 0x0000, // MAP_ELEMENT_TYPE_BANNER + 0x4444, // MAP_ELEMENT_TYPE_CORRUPT }; enum { From 2ed4802032651b45990ec10ec005de51564c1e33 Mon Sep 17 00:00:00 2001 From: Jonathan Haas Date: Sat, 26 Dec 2015 14:42:52 +0100 Subject: [PATCH 29/42] Fix and replace some StringIDs Create some additional named StringIDs. Fix a broken condition for tracked peep notifications, as the in/on ride messages were reversed. --- src/localisation/string_ids.h | 15 ++++++++++++++- src/management/research.c | 5 +++-- src/peep/peep.c | 14 +++++++------- src/ride/ride.c | 4 ++-- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index b8956b8499..8c98771fc7 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -868,8 +868,16 @@ enum { STR_CONTINUE_SAVED_GAME_TIP = 1922, STR_SHOW_TUTORIAL_TIP = 1923, STR_EXIT = 1924, - STR_RIDE_HAS_CRASHED = 1928, + STR_RIDE_IS_BROKEN_DOWN = 1927, + STR_RIDE_HAS_CRASHED = 1928, + STR_RIDE_IS_STILL_NOT_FIXED = 1929, + + STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X = 1931, + STR_PEEP_TRACKING_PEEP_IS_ON_X = 1932, + STR_PEEP_TRACKING_PEEP_IS_IN_X = 1933, + STR_PEEP_TRACKING_LEFT_RIDE_X = 1934, + STR_PEEP_TRACKING_LEFT_PARK = 1935, STR_PEEP_TRACKING_NOTIFICATION_BOUGHT_X = 1936, STR_SHOW_SUBJECT_TIP = 1937, @@ -1134,6 +1142,9 @@ enum { STR_CANT_DEMOLISH_RIDE = 2248, + STR_NEWS_ITEM_RESEARCH_NEW_RIDE_AVAILABLE = 2249, + STR_NEWS_ITEM_RESEARCH_NEW_SCENERY_SET_AVAILABLE = 2250, + STR_CAN_ONLY_BE_BUILT_ACROSS_PATHS = 2252, STR_RESEARCH_TRANSPORT_RIDES = 2253, @@ -1222,6 +1233,8 @@ enum { STR_METRIC = 2345, STR_DISPLAY = 2346, + STR_NEWS_ITEM_GUEST_DROWNED = 2347, + STR_STAFF_STATS_TIP = 2348, //STR_UNITS = 2358, diff --git a/src/management/research.c b/src/management/research.c index 9cd6f3c3b8..d5f254da88 100644 --- a/src/management/research.c +++ b/src/management/research.c @@ -22,6 +22,7 @@ #include "../game.h" #include "../interface/window.h" #include "../localisation/date.h" +#include "../localisation/string_ids.h" #include "../management/finance.h" #include "../scenario.h" #include "../rct1.h" @@ -203,7 +204,7 @@ void research_finish_item(sint32 entryIndex) RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, rct_string_id) = ((rideEntry->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME)) ? rideEntry->name : base_ride_type + 2; if (!gSilentResearch) - news_item_add_to_queue(NEWS_ITEM_RESEARCH, 2249, entryIndex); + news_item_add_to_queue(NEWS_ITEM_RESEARCH, STR_NEWS_ITEM_RESEARCH_NEW_RIDE_AVAILABLE, entryIndex); } research_invalidate_related_windows(); @@ -219,7 +220,7 @@ void research_finish_item(sint32 entryIndex) if (RCT2_GLOBAL(0x009AC06C, uint8) == 0) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, rct_string_id) = scenerySetEntry->name; if (!gSilentResearch) - news_item_add_to_queue(NEWS_ITEM_RESEARCH, 2250, entryIndex); + news_item_add_to_queue(NEWS_ITEM_RESEARCH, STR_NEWS_ITEM_RESEARCH_NEW_SCENERY_SET_AVAILABLE, entryIndex); } research_invalidate_related_windows(); diff --git a/src/peep/peep.c b/src/peep/peep.c index be8d7f5ec0..c042195323 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -1329,7 +1329,7 @@ void peep_update_falling(rct_peep* peep){ if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x80000)){ RCT2_GLOBAL(0x13CE952, uint16) = peep->name_string_idx; RCT2_GLOBAL(0x13CE954, uint32) = peep->id; - news_item_add_to_queue(NEWS_ITEM_BLANK, 2347, peep->x | (peep->y << 16)); + news_item_add_to_queue(NEWS_ITEM_BLANK, STR_NEWS_ITEM_GUEST_DROWNED, peep->x | (peep->y << 16)); } RCT2_GLOBAL(0x135882E, uint16) += 25; if (RCT2_GLOBAL(0x135882E, uint16) > 1000){ @@ -2119,9 +2119,9 @@ static void peep_update_ride_sub_state_2_enter_ride(rct_peep* peep, rct_ride* ri rct_string_id msg_string; if (RCT2_ADDRESS(RCT2_ADDRESS_RIDE_FLAGS, uint32)[ride->type * 2] & RIDE_TYPE_FLAG_IN_RIDE) - msg_string = 1932; + msg_string = STR_PEEP_TRACKING_PEEP_IS_IN_X; else - msg_string = 1933; + msg_string = STR_PEEP_TRACKING_PEEP_IS_ON_X; news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, msg_string, peep->sprite_index); } @@ -3169,7 +3169,7 @@ static void peep_update_ride_sub_state_18(rct_peep* peep){ RCT2_GLOBAL(0x13CE958, uint16) = ride->name; RCT2_GLOBAL(0x13CE95A, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, 1934, peep->sprite_index); + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_LEFT_RIDE_X, peep->sprite_index); } peep->var_79 = 0xFF; @@ -6297,7 +6297,7 @@ static int peep_interact_with_entrance(rct_peep* peep, sint16 x, sint16 y, rct_m RCT2_GLOBAL(0x0013CE954, uint32) = peep->id; RCT2_GLOBAL(0x0013CE958, rct_string_id) = ride->name; RCT2_GLOBAL(0x0013CE95A, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, 1931, peep->sprite_index); + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X, peep->sprite_index); } return 1; } @@ -6339,7 +6339,7 @@ static int peep_interact_with_entrance(rct_peep* peep, sint16 x, sint16 y, rct_m if (peep->flags & PEEP_FLAGS_TRACKING){ RCT2_GLOBAL(0x0013CE952, rct_string_id) = peep->name_string_idx; RCT2_GLOBAL(0x0013CE954, uint32) = peep->id; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, 1935, peep->sprite_index); + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_LEFT_PARK, peep->sprite_index); } return 1; } @@ -6674,7 +6674,7 @@ static int peep_interact_with_path(rct_peep* peep, sint16 x, sint16 y, rct_map_e RCT2_GLOBAL(0x0013CE954, uint32) = peep->id; RCT2_GLOBAL(0x0013CE958, rct_string_id) = ride->name; RCT2_GLOBAL(0x0013CE95A, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, 1931, peep->sprite_index); + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X, peep->sprite_index); } return peep_footpath_move_forward(peep, x, y, map_element, vandalism_present); diff --git a/src/ride/ride.c b/src/ride/ride.c index 1e95c33489..fb154e3852 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -2299,7 +2299,7 @@ void ride_breakdown_add_news_item(int rideIndex) RCT2_GLOBAL(0x0013CE952 + 0, uint16) = ride->name; RCT2_GLOBAL(0x0013CE952 + 2, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_RIDE, 1927, rideIndex); + news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_BROKEN_DOWN, rideIndex); } /** @@ -2323,7 +2323,7 @@ static void ride_breakdown_status_update(int rideIndex) ) { RCT2_GLOBAL(0x0013CE952 + 0, uint16) = ride->name; RCT2_GLOBAL(0x0013CE952 + 2, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_RIDE, 1929, rideIndex); + news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_STILL_NOT_FIXED, rideIndex); } } From 4eb8192549ba2d55cb28dfdfa9ac7605969c6d0e Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Sat, 26 Dec 2015 17:09:15 +0000 Subject: [PATCH 30/42] replace tutorial button with new multiplayer button tutorial button and multiplayer button can be enabled / disabled easily, window auto resizes etc. --- data/language/english_uk.txt | 1 + resources/g2/60.png | Bin 0 -> 2968 bytes src/localisation/string_ids.h | 2 ++ src/sprites.h | 1 + src/windows/title_menu.c | 59 +++++++++++++++++----------------- 5 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 resources/g2/60.png diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 13bf2f8ae9..c03f3fa568 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3926,6 +3926,7 @@ STR_5584 :SI STR_5585 :{SMALLFONT}{BLACK}Unlocks ride operation limits, allowing for things like {VELOCITY} lift hills STR_5586 :Automatically open shops and stalls STR_5587 :{SMALLFONT}{BLACK}When enabled, shops and stalls will be automatically opened after building them +STR_5588 :{SMALLFONT}{BLACK}Play with other players ##################### # Rides/attractions # diff --git a/resources/g2/60.png b/resources/g2/60.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4369ea8a9a9aad804d46a001861e3d32e8cd9b GIT binary patch literal 2968 zcmXX|XIN8N6TUYIgqlR8Y77BFQ7{2<=_M3ds#3zzA}uH)E+T=Yh;k8W;!1=73J9o3 zKm|brq=&Lp>7uTHbSW-Pno_^8`~8@iGw+;vpJ(RGInRl=KKrX6-w{3l00hlUjcqyB znjDqr)!_<;(V6DJR42=@z>gn?%SsCM<)9D7_6EZJh=xM~F zC3C1;YjLQH<-a>q<7oCD9kHY=NNA(JNW5m?YGLv9P~XPrD_odMN4+B~*-eoS<0LrG z+KUX*-*+ex$1BEBPTaSNU??R-BnU}lt zCul2j_ZsC&Wbl)S06L2KvmE%6c6?GNv zmyf+XLVi5IVp@Ui=C_ZiiEJo52hWtGJ%*ILT!bZ~pckG<$- z^-daS$&VizJ3hn~_c@1#%i*;=>@T^Kskn?|%F0Qh5&E_o2PW{^b_E@&`r-0?{DS)YkF*{QK;m$=M?fK4aFSEQ6`djCkh; zv+ZY{kIKe}^SuUgd2=4Fo?rxiPRJBI$R5~Z(9&k)f4?`IQHp)B z+H!ddEt_HSS=|FfWZ?tGee7DIkDI2}`)6~f?oLh~!QCkvT=%9I7y>SeON~R7YR1Fz zJTK^WzmVBoq>9eDFwAyg{Yz?_9vj7#c+jH3O(}4VIJJlnn`n8XFWf9F=lNcw#sH{$ zg$k`Nb_akqZ|JoM`TJx@2ZFJrAp*Tnyt<&C$k!`frHo{p+-%cOiB^#R+N{UE=KHq1 zc0`?w2V$_?Fvs;sDsog((p^MTEGg&qVbCeS^F$7qXrJX69X(H)PJ-?1_&noo)5C{C zxU4mguYZDsnftJJn)eC2IZq5p9%p+T({P6D0Y+bEb?>lKgN1B}tAIJx7=?ShWl@<6 zWT(Mtj?#yumkC%tjr~g6(Pz<7)Pqb|+pNVdGB$ymF~{rKMdEs3C``WDsUm~S?-fQW zgcnsDdNP{$4?WSEbGZ@L!4m1F*Lm?H3BebUnHIXgmZKo^z0C4wT8oIX-N;;qA8ZPo&su?QHXR4&YJeC0CFSeb#RFx6qd+(+c&Kz)Ow7B*%a9af1ZC}aTCkr7BgDy z0&|tPOjS*W%X(j}d;*kZ7SOWljCRMz+4KjeIue5)XDZvxx`o8gGhql43*XqGsveejV2 zjVxLyPnpgLcYCO;-}>DJ3%lcgvu)3yy>Ve{t7GBz93^@mHm3_+) zB9EEXVlR10H5laHeRdMvtC(kf53Aury~W?Y9)WYGAx$75em-Vt-GfFWmFR#ew%Mc* z)szJ7Y8C%R{rsK3IRB82H1cd%$1>4+)e4CL5yNa?vLw@D>`0SLz*sJekH~ftczVGH zXh^xCxqRgpe*dwu2CT;1@y4b}K}5Nwb{L3om4RlT!KPp}2!?h7bzhwUw}Dy1+sWvM z90r>h@F_g87lF}LBMTDJyPKKmXHc1^pW}VxUO5{YZWLLh;7$nQb;vOMSPV=&Q8Hg* zhHdtg5A^!$cA>7-3tLtDqIc^NaYO2wn2(i;)*GJfubl6Sh#g#?#4U`{c~I$2_j6Cr~cBcel=Uq6Q{m zcdSS5rN||@c3c*MvO!O1tv>Zf_;j~${*=_LR244&TeW^(n!lHz3TFiF%p!BdltT-6 zRvI;Y>pq)m5Z_t0zolT;;`gTY`BLH^gfX%RpaJ!p_BL9U{*T0R)KM z2^#mn+)=pxQ=;D$Rfer{6L>A}$lm<+c>at`d()cLo)gH7N(Y2BPSS$NcY*5oeNyD= zEa{OgBPn9e)RW=qhAgH$MF|P9`+-{lihZ)kKkTVuQ|fW6w(8106F6xYVGM9gY}WMe zSBUa@A8u2yZ-ky^2YT4!53LWp(*(xwW~RojGeenabled_widgets = ( (1 << WIDX_START_NEW_GAME) | (1 << WIDX_CONTINUE_SAVED_GAME) | - (1 << WIDX_SHOW_TUTORIAL) | - (1 << WIDX_GAME_TOOLS) | - (1 << WIDX_MULTIPLAYER) +#ifndef DISABLE_NETWORK + (1 << WIDX_MULTIPLAYER) | +#endif + // Disable tutorial + // (1 << WIDX_SHOW_TUTORIAL) | + (1 << WIDX_GAME_TOOLS) ); - // Disable tutorial button - window->disabled_widgets = (1 << WIDX_SHOW_TUTORIAL); + int i = 0; + int x = 0; + for (rct_widget *widget = window->widgets; widget->type != WWT_LAST; widget++) { + if (widget_is_enabled(window, i)) { + widget->left = x; + widget->right = x + 81; -#if DISABLE_NETWORK - // Disable multiplayer - window->widgets[WIDX_MULTIPLAYER].type = WWT_EMPTY; -#endif + x += 82; + } else { + widget->type = WWT_EMPTY; + } + i++; + } + window->width = x; + window->x = (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16) - window->width) / 2; window_init_scroll_widgets(window); } @@ -195,18 +206,6 @@ static void window_title_menu_cursor(rct_window *w, int widgetIndex, int x, int static void window_title_menu_paint(rct_window *w, rct_drawpixelinfo *dpi) { gfx_fill_rect(dpi, w->x, w->y, w->x + w->width - 1, w->y + 82 - 1, 0x2000000 | 51); - - rct_widget *multiplayerButtonWidget = &window_title_menu_widgets[WIDX_MULTIPLAYER]; - if (multiplayerButtonWidget->type != WWT_EMPTY) { - gfx_fill_rect( - dpi, - w->x + multiplayerButtonWidget->left, - w->y + multiplayerButtonWidget->top, - w->x + multiplayerButtonWidget->right, - w->y + multiplayerButtonWidget->bottom, - 0x2000000 | 51 - ); - } window_draw_widgets(w, dpi); } From 6240f063f1d24c6b8d73fad9f8284e77bce57948 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Sat, 26 Dec 2015 17:19:25 +0000 Subject: [PATCH 31/42] fix a couple of sprite ID definitions --- src/sprites.h | 4 ++-- src/windows/cheats.c | 2 +- src/windows/editor_scenario_options.c | 2 +- src/windows/title_menu.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sprites.h b/src/sprites.h index e95260f7d3..f5986e85c9 100644 --- a/src/sprites.h +++ b/src/sprites.h @@ -192,7 +192,7 @@ enum { SPR_TAB_RIDE_14 = SPR_TAB_RIDE_0 + 14, SPR_TAB_RIDE_15 = SPR_TAB_RIDE_0 + 15, - STR_TAB_PARK = 5466, + SPR_TAB_PARK = 5466, SPR_AWARD_MOST_UNTIDY = 5469, SPR_MOST_TIDY = SPR_AWARD_MOST_UNTIDY + 1, @@ -393,7 +393,7 @@ enum { SPR_G2_TAB_NEWS = SPR_G2_BEGIN + 58, SPR_G2_LOCKED = SPR_G2_BEGIN + 59, - SPR_MENU_MULTIPLAYER = SPR_G2_BEGIN + 60, + SPR_G2_MENU_MULTIPLAYER = SPR_G2_BEGIN + 60, }; #endif diff --git a/src/windows/cheats.c b/src/windows/cheats.c index 6fc5ff6f49..9713ca8ba3 100644 --- a/src/windows/cheats.c +++ b/src/windows/cheats.c @@ -1166,7 +1166,7 @@ static void window_cheats_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w) // Misc tab if (!(w->disabled_widgets & (1 << WIDX_TAB_3))) { - sprite_idx = STR_TAB_PARK; + sprite_idx = SPR_TAB_PARK; gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TAB_3].left, w->y + w->widgets[WIDX_TAB_3].top, 0); } diff --git a/src/windows/editor_scenario_options.c b/src/windows/editor_scenario_options.c index 4073444ec4..f1bc571194 100644 --- a/src/windows/editor_scenario_options.c +++ b/src/windows/editor_scenario_options.c @@ -399,7 +399,7 @@ static void window_editor_scenario_options_draw_tab_images(rct_window *w, rct_dr // Tab 3 widget = &w->widgets[WIDX_TAB_3]; - spriteIndex = STR_TAB_PARK; + spriteIndex = SPR_TAB_PARK; gfx_draw_sprite(dpi, spriteIndex, w->x + widget->left, w->y + widget->top, 0); } diff --git a/src/windows/title_menu.c b/src/windows/title_menu.c index 1867911d05..1709c74273 100644 --- a/src/windows/title_menu.c +++ b/src/windows/title_menu.c @@ -41,7 +41,7 @@ enum { static rct_widget window_title_menu_widgets[] = { { WWT_IMGBTN, 2, 0, 0, 0, 81, SPR_MENU_NEW_GAME, STR_START_NEW_GAME_TIP }, { WWT_IMGBTN, 2, 0, 0, 0, 81, SPR_MENU_LOAD_GAME, STR_CONTINUE_SAVED_GAME_TIP }, - { WWT_IMGBTN, 2, 0, 0, 0, 81, SPR_MENU_MULTIPLAYER, STR_SHOW_MULTIPLAYER_TIP }, + { WWT_IMGBTN, 2, 0, 0, 0, 81, SPR_G2_MENU_MULTIPLAYER, STR_SHOW_MULTIPLAYER_TIP }, { WWT_IMGBTN, 2, 0, 0, 0, 81, SPR_MENU_TUTORIAL, STR_SHOW_TUTORIAL_TIP }, { WWT_IMGBTN, 2, 0, 0, 0, 81, SPR_MENU_TOOLBOX, STR_GAME_TOOLS }, { WIDGETS_END }, From 3b5768f5bc647d72ad9d09c14fefef89c07a7415 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Sat, 26 Dec 2015 17:23:27 +0000 Subject: [PATCH 32/42] print '(debug)' to version string when build in debug configuration --- src/openrct2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/openrct2.c b/src/openrct2.c index 9af3275cfc..eb41a4457f 100644 --- a/src/openrct2.c +++ b/src/openrct2.c @@ -92,6 +92,10 @@ void openrct2_write_full_version_info(utf8 *buffer, size_t bufferSize) if (!str_is_null_or_empty(OPENRCT2_BUILD_SERVER)) { sprintf(strchr(buffer, 0), " provided by %s", OPENRCT2_BUILD_SERVER); } + +#if DEBUG + sprintf(strchr(buffer, 0), " (DEBUG)"); +#endif } static void openrct2_copy_files_over(const utf8 *originalDirectory, const utf8 *newDirectory, const utf8 *extension) From cd99b87de63795705e3c35086b2586f44825d3da Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Thu, 24 Dec 2015 13:16:39 +0000 Subject: [PATCH 33/42] add UI for notification settings --- data/language/english_uk.txt | 18 +++ openrct2.vcxproj | 3 +- openrct2.vcxproj.filters | 8 +- src/config.c | 24 ++- src/config.h | 21 +++ src/interface/window.h | 2 + src/localisation/string_ids.h | 19 +++ src/windows/news.c | 9 +- src/windows/news_options.c | 279 ++++++++++++++++++++++++++++++++++ 9 files changed, 373 insertions(+), 10 deletions(-) create mode 100644 src/windows/news_options.c diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index c03f3fa568..202cc767e4 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3927,6 +3927,24 @@ STR_5585 :{SMALLFONT}{BLACK}Unlocks ride operation limits, allowing for thing STR_5586 :Automatically open shops and stalls STR_5587 :{SMALLFONT}{BLACK}When enabled, shops and stalls will be automatically opened after building them STR_5588 :{SMALLFONT}{BLACK}Play with other players +STR_5589 :Notification Settings +STR_5590 :Park awards +STR_5591 :Marketing campaign has finished +STR_5592 :Park warnings +STR_5593 :Park rating warnings +STR_5594 :Ride has broken down +STR_5595 :Ride has crashed +STR_5596 :Ride warnings +STR_5597 :Ride / scenery researched +STR_5598 :Guest warnings +STR_5599 :Guest is lost +STR_5600 :Guest has left the park +STR_5601 :Guest is queuing for ride +STR_5602 :Guest is on ride +STR_5603 :Guest has left ride +STR_5604 :Guest has bought item +STR_5605 :Guest has used facility +STR_5606 :Guest has died ##################### # Rides/attractions # diff --git a/openrct2.vcxproj b/openrct2.vcxproj index 251e80cd70..347d55880e 100644 --- a/openrct2.vcxproj +++ b/openrct2.vcxproj @@ -103,6 +103,7 @@ + @@ -374,7 +375,7 @@ $(OpenRCT2_DEFINES);DEBUG;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;_USE_MATH_DEFINES;CURL_STATICLIB;SDL_MAIN_HANDLED;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded true - $(IntDir)fake\%(RelativeDir) + $(IntDir)\%(RelativeDir) 4013 false diff --git a/openrct2.vcxproj.filters b/openrct2.vcxproj.filters index 9e4fb16a0d..38cb760f4e 100644 --- a/openrct2.vcxproj.filters +++ b/openrct2.vcxproj.filters @@ -552,9 +552,8 @@ Source - - Source\Drawing - + + @@ -827,9 +826,6 @@ Source\Interface - - Source\Core - Source\Drawing diff --git a/src/config.c b/src/config.c index 708154cb43..241862f72e 100644 --- a/src/config.c +++ b/src/config.c @@ -260,13 +260,34 @@ config_property_definition _networkDefinitions[] = { { offsetof(network_configuration, provider_website), "provider_website", CONFIG_VALUE_TYPE_STRING, {.value_string = NULL }, NULL } }; +config_property_definition _notificationsDefinitions[] = { + { offsetof(notification_configuration, park_award), "park_award", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, park_marketing_campaign_finished), "park_marketing_campaign_finished", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, park_warnings), "park_warnings", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, park_rating_warnings), "park_rating_warnings", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, ride_broken_down), "ride_broken_down", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, ride_crashed), "ride_crashed", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, ride_warnings), "ride_warnings", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, ride_researched), "ride_researched", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_warnings), "guest_warnings", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_lost), "guest_lost", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, + { offsetof(notification_configuration, guest_entered_left_park), "guest_entered_left_park", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_queuing_for_ride), "guest_queuing_for_ride", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_on_ride), "guest_on_ride", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_left_ride), "guest_left_ride", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_bought_item), "guest_bought_item", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_used_facility), "guest_used_facility", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_died), "guest_died", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, +}; + config_section_definition _sectionDefinitions[] = { { &gConfigGeneral, "general", _generalDefinitions, countof(_generalDefinitions) }, { &gConfigInterface, "interface", _interfaceDefinitions, countof(_interfaceDefinitions) }, { &gConfigSound, "sound", _soundDefinitions, countof(_soundDefinitions) }, { &gConfigCheat, "cheat", _cheatDefinitions, countof(_cheatDefinitions) }, { &gConfigTwitch, "twitch", _twitchDefinitions, countof(_twitchDefinitions) }, - { &gConfigNetwork, "network", _networkDefinitions, countof(_networkDefinitions) } + { &gConfigNetwork, "network", _networkDefinitions, countof(_networkDefinitions) }, + { &gConfigNotifications, "notifications", _notificationsDefinitions, countof(_notificationsDefinitions) }, }; #pragma endregion @@ -277,6 +298,7 @@ sound_configuration gConfigSound; cheat_configuration gConfigCheat; twitch_configuration gConfigTwitch; network_configuration gConfigNetwork; +notification_configuration gConfigNotifications; themes_configuration gConfigThemes; title_sequences_configuration gConfigTitleSequences; diff --git a/src/config.h b/src/config.h index 49d3ef42ad..e45e672991 100644 --- a/src/config.h +++ b/src/config.h @@ -229,6 +229,26 @@ typedef struct { utf8string provider_website; } network_configuration; +typedef struct { + bool park_award; + bool park_marketing_campaign_finished; + bool park_warnings; + bool park_rating_warnings; + bool ride_broken_down; + bool ride_crashed; + bool ride_warnings; + bool ride_researched; + bool guest_warnings; + bool guest_lost; + bool guest_entered_left_park; + bool guest_queuing_for_ride; + bool guest_on_ride; + bool guest_left_ride; + bool guest_bought_item; + bool guest_used_facility; + bool guest_died; +} notification_configuration; + typedef struct theme_window { uint8 colours[6]; @@ -303,6 +323,7 @@ extern sound_configuration gConfigSound; extern cheat_configuration gConfigCheat; extern twitch_configuration gConfigTwitch; extern network_configuration gConfigNetwork; +extern notification_configuration gConfigNotifications; extern themes_configuration gConfigThemes; extern title_sequences_configuration gConfigTitleSequences; diff --git a/src/interface/window.h b/src/interface/window.h index 049127b94f..e538d69091 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -434,6 +434,7 @@ enum { WC_TRACK_DELETE_PROMPT = 48, WC_INSTALL_TRACK = 49, WC_CLEAR_SCENERY = 50, + WC_NOTIFICATION_OPTIONS = 109, WC_CHEATS = 110, WC_RESEARCH = 111, WC_VIEWPORT = 112, @@ -627,6 +628,7 @@ void window_install_track_open(const char* path); void window_banner_open(rct_windownumber number); void window_sign_open(rct_windownumber number); void window_sign_small_open(rct_windownumber number); +void window_news_options_open(); void window_cheats_open(); void window_player_list_open(); void window_network_status_open(const char* text); diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 517c316c3b..d3e09e203b 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2210,6 +2210,25 @@ enum { STR_SHOW_MULTIPLAYER_TIP = 5588, + STR_NOTIFICATION_SETTINGS = 5589, + STR_NOTIFICATION_PARK_AWARD = 5590, + STR_NOTIFICATION_PARK_MARKETING_CAMPAIGN_FINISHED = 5591, + STR_NOTIFICATION_PARK_WARNINGS = 5592, + STR_NOTIFICATION_PARK_RATING_WARNINGS = 5593, + STR_NOTIFICATION_RIDE_BROKEN_DOWN = 5594, + STR_NOTIFICATION_RIDE_CRASHED = 5595, + STR_NOTIFICATION_RIDE_WARNINGS = 5596, + STR_NOTIFICATION_RIDE_RESEARCHED = 5597, + STR_NOTIFICATION_GUEST_WARNINGS = 5598, + STR_NOTIFICATION_GUEST_LOST = 5599, + STR_NOTIFICATION_GUEST_ENTERED_LEFT_PARK = 5600, + STR_NOTIFICATION_GUEST_QUEUING_FOR_RIDE = 5601, + STR_NOTIFICATION_GUEST_ON_RIDE = 5602, + STR_NOTIFICATION_GUEST_LEFT_RIDE = 5603, + STR_NOTIFICATION_GUEST_BOUGHT_ITEM = 5604, + STR_NOTIFICATION_GUEST_USED_FACILITY = 5605, + STR_NOTIFICATION_GUEST_DIED = 5606, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/windows/news.c b/src/windows/news.c index 2f80ff15f4..5885811365 100644 --- a/src/windows/news.c +++ b/src/windows/news.c @@ -33,6 +33,7 @@ enum WINDOW_NEWS_WIDGET_IDX { WIDX_BACKGROUND, WIDX_TITLE, WIDX_CLOSE, + WIDX_SETTINGS, WIDX_SCROLL }; @@ -40,7 +41,8 @@ static rct_widget window_news_widgets[] = { { WWT_FRAME, 0, 0, 399, 0, 299, 0x0FFFFFFFF, STR_NONE }, // panel / background { WWT_CAPTION, 0, 1, 398, 1, 14, STR_RECENT_MESSAGES, STR_WINDOW_TITLE_TIP }, // title bar { WWT_CLOSEBOX, 0, 387, 397, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button - { WWT_SCROLL, 0, 4, 395, 18, 295, 2, STR_NONE }, // scroll + { WWT_FLATBTN, 0, 372, 395, 18, 41, 5201, STR_NONE }, // settings + { WWT_SCROLL, 0, 4, 395, 44, 295, 2, STR_NONE }, // scroll { WIDGETS_END }, }; @@ -103,7 +105,7 @@ void window_news_open() 0 ); window->widgets = window_news_widgets; - window->enabled_widgets = (1 << WIDX_CLOSE); + window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_SETTINGS); window_init_scroll_widgets(window); window->news.var_480 = -1; } @@ -130,6 +132,9 @@ static void window_news_mouseup(rct_window *w, int widgetIndex) case WIDX_CLOSE: window_close(w); break; + case WIDX_SETTINGS: + window_news_options_open(); + break; } } diff --git a/src/windows/news_options.c b/src/windows/news_options.c new file mode 100644 index 0000000000..20a8760e24 --- /dev/null +++ b/src/windows/news_options.c @@ -0,0 +1,279 @@ +#include "../config.h" +#include "../interface/widget.h" +#include "../interface/window.h" +#include "../localisation/localisation.h" + +enum { + NOTIFICATION_CATEGORY_PARK, + NOTIFICATION_CATEGORY_RIDE, + NOTIFICATION_CATEGORY_GUEST +}; + +typedef struct { + uint8 category; + rct_string_id caption; + size_t config_offset; + +} notification_def; + +static const notification_def NewsItemOptionDefinitions[] = { + { NOTIFICATION_CATEGORY_PARK, STR_NOTIFICATION_PARK_AWARD, offsetof(notification_configuration, park_award) }, + { NOTIFICATION_CATEGORY_PARK, STR_NOTIFICATION_PARK_MARKETING_CAMPAIGN_FINISHED, offsetof(notification_configuration, park_marketing_campaign_finished) }, + { NOTIFICATION_CATEGORY_PARK, STR_NOTIFICATION_PARK_WARNINGS, offsetof(notification_configuration, park_warnings) }, + { NOTIFICATION_CATEGORY_PARK, STR_NOTIFICATION_PARK_RATING_WARNINGS, offsetof(notification_configuration, park_rating_warnings) }, + { NOTIFICATION_CATEGORY_RIDE, STR_NOTIFICATION_RIDE_BROKEN_DOWN, offsetof(notification_configuration, ride_broken_down) }, + { NOTIFICATION_CATEGORY_RIDE, STR_NOTIFICATION_RIDE_CRASHED, offsetof(notification_configuration, ride_crashed) }, + { NOTIFICATION_CATEGORY_RIDE, STR_NOTIFICATION_RIDE_WARNINGS, offsetof(notification_configuration, ride_warnings) }, + { NOTIFICATION_CATEGORY_RIDE, STR_NOTIFICATION_RIDE_RESEARCHED, offsetof(notification_configuration, ride_researched) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_WARNINGS, offsetof(notification_configuration, guest_warnings) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_LOST, offsetof(notification_configuration, guest_lost) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_ENTERED_LEFT_PARK, offsetof(notification_configuration, guest_entered_left_park) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_QUEUING_FOR_RIDE, offsetof(notification_configuration, guest_queuing_for_ride) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_ON_RIDE, offsetof(notification_configuration, guest_on_ride) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_LEFT_RIDE, offsetof(notification_configuration, guest_left_ride) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_BOUGHT_ITEM, offsetof(notification_configuration, guest_bought_item) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_USED_FACILITY, offsetof(notification_configuration, guest_used_facility) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_DIED, offsetof(notification_configuration, guest_died) }, +}; + +enum WINDOW_NEWS_WIDGET_IDX { + WIDX_BACKGROUND, + WIDX_TITLE, + WIDX_CLOSE, + WIDX_TAB_CONTENT_PANEL, + WIDX_TAB_PARK, + WIDX_TAB_RIDE, + WIDX_TAB_GUEST, + WIDX_CHECKBOX_0 +}; + +static rct_widget window_news_options_widgets[] = { + { WWT_FRAME, 0, 0, 399, 0, 299, 0x0FFFFFFFF, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, 398, 1, 14, STR_NOTIFICATION_SETTINGS, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, 387, 397, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button + { WWT_RESIZE, 1, 0, 399, 43, 299, 0x0FFFFFFFF, STR_NONE }, // tab content panel + { WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_NONE }, // tab 1 + { WWT_TAB, 1, 34, 64, 17, 43, 0x02000144E, STR_NONE }, // tab 2 + { WWT_TAB, 1, 65, 95, 17, 43, 0x02000144E, STR_NONE }, // tab 2 + + { WWT_CHECKBOX, 2, 3, 349, 46, 59, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + { WWT_CHECKBOX, 2, 0, 0, 0, 0, STR_NONE, STR_NONE }, + + { WIDGETS_END }, +}; + +static void window_news_options_mouseup(rct_window *w, int widgetIndex); +static void window_news_options_update(rct_window *w); +static void window_news_options_invalidate(rct_window *w); +static void window_news_options_paint(rct_window *w, rct_drawpixelinfo *dpi); + +static rct_window_event_list window_news_options_events = { + NULL, + window_news_options_mouseup, + NULL, + NULL, + NULL, + NULL, + window_news_options_update, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + window_news_options_invalidate, + window_news_options_paint, + NULL +}; + +static void window_news_options_draw_tab_images(rct_window *w, rct_drawpixelinfo *dpi); +static bool *get_notification_value_ptr(const notification_def *ndef); + +void window_news_options_open() +{ + rct_window* window; + + // Check if window is already open + window = window_bring_to_front_by_class(WC_NOTIFICATION_OPTIONS); + if (window == NULL) { + window = window_create_centred( + 400, + 300, + &window_news_options_events, + WC_NOTIFICATION_OPTIONS, + 0 + ); + window->widgets = window_news_options_widgets; + window->enabled_widgets = + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_PARK) | + (1 << WIDX_TAB_RIDE) | + (1 << WIDX_TAB_GUEST); + window_init_scroll_widgets(window); + window->colours[0] = COLOUR_GREY; + window->colours[1] = COLOUR_LIGHT_BLUE; + window->colours[2] = COLOUR_LIGHT_BLUE; + } +} + +static void window_news_options_mouseup(rct_window *w, int widgetIndex) +{ + switch (widgetIndex) { + case WIDX_CLOSE: + window_close(w); + break; + case WIDX_TAB_PARK: + case WIDX_TAB_RIDE: + case WIDX_TAB_GUEST: + w->page = widgetIndex - WIDX_TAB_PARK; + w->frame_no = 0; + window_invalidate(w); + break; + default: + { + int checkBoxIndex = widgetIndex - WIDX_CHECKBOX_0; + if (checkBoxIndex >= 0) { + int matchIndex = 0; + for (int i = 0; i < countof(NewsItemOptionDefinitions); i++) { + const notification_def *ndef = &NewsItemOptionDefinitions[i]; + if (ndef->category != w->page) continue; + + if (matchIndex == checkBoxIndex) { + // Toggle value + bool *configValue = get_notification_value_ptr(ndef); + *configValue = !(*configValue); + + config_save_default(); + + widget_invalidate(w, widgetIndex); + break; + } + matchIndex++; + } + } + break; + } + } +} + +static void window_news_options_update(rct_window *w) +{ + w->frame_no++; + widget_invalidate(w, WIDX_TAB_PARK + w->page); +} + +static void window_news_options_invalidate(rct_window *w) +{ + // colour_scheme_update(w); + + // Set pressed tab + w->pressed_widgets &= ~(1ULL << WIDX_TAB_PARK); + w->pressed_widgets &= ~(1ULL << WIDX_TAB_RIDE); + w->pressed_widgets &= ~(1ULL << WIDX_TAB_GUEST); + w->pressed_widgets |= (1ULL << (WIDX_TAB_PARK + w->page)); + + // Set checkboxes + rct_widget *baseCheckBox = &w->widgets[WIDX_CHECKBOX_0]; + int y = baseCheckBox->top; + + int checkboxWidgetIndex = WIDX_CHECKBOX_0; + rct_widget *checkboxWidget = &w->widgets[checkboxWidgetIndex]; + for (int i = 0; i < countof(NewsItemOptionDefinitions); i++) { + const notification_def *ndef = &NewsItemOptionDefinitions[i]; + if (ndef->category != w->page) continue; + + w->enabled_widgets |= (1ULL << checkboxWidgetIndex); + + checkboxWidget->type = WWT_CHECKBOX; + checkboxWidget->left = baseCheckBox->left; + checkboxWidget->right = baseCheckBox->right; + checkboxWidget->top = y; + checkboxWidget->bottom = checkboxWidget->top + 13; + checkboxWidget->image = ndef->caption; + + const bool *configValue = get_notification_value_ptr(ndef); + widget_set_checkbox_value(w, checkboxWidgetIndex, *configValue); + + checkboxWidgetIndex++; + checkboxWidget++; + y += 13; + } + + // Remove unused checkboxes + while (checkboxWidget->type != WWT_LAST) { + w->enabled_widgets &= ~(1ULL << checkboxWidgetIndex); + + checkboxWidget->type = WWT_EMPTY; + checkboxWidgetIndex++; + checkboxWidget++; + } + + // Resize window to fit checkboxes exactly + y += 3; + + if (w->height != y) { + window_invalidate(w); + w->height = y; + w->widgets[WIDX_BACKGROUND].bottom = y - 1; + w->widgets[WIDX_TAB_CONTENT_PANEL].bottom = y - 1; + window_invalidate(w); + } +} + +static void window_news_options_paint(rct_window *w, rct_drawpixelinfo *dpi) +{ + window_draw_widgets(w, dpi); + window_news_options_draw_tab_images(w, dpi); +} + +const int window_news_option_tab_animation_divisor[] = { 1, 4, 4 }; +const int window_news_option_tab_animation_frames[] = { 1, 16, 8 }; + +static void window_news_options_draw_tab_image(rct_window *w, rct_drawpixelinfo *dpi, int page, int spriteIndex) +{ + int widgetIndex = WIDX_TAB_PARK + page; + + if (!(w->disabled_widgets & (1LL << widgetIndex))) { + if (w->page == page) { + int numFrames = window_news_option_tab_animation_frames[w->page]; + if (numFrames > 1) { + int frame = w->frame_no / window_news_option_tab_animation_divisor[w->page]; + spriteIndex += (frame % numFrames); + } + } + + gfx_draw_sprite(dpi, spriteIndex, w->x + w->widgets[widgetIndex].left, w->y + w->widgets[widgetIndex].top, 0); + } +} + +static void window_news_options_draw_tab_images(rct_window *w, rct_drawpixelinfo *dpi) +{ + window_news_options_draw_tab_image(w, dpi, NOTIFICATION_CATEGORY_PARK, 5466); + window_news_options_draw_tab_image(w, dpi, NOTIFICATION_CATEGORY_RIDE, 5442); + window_news_options_draw_tab_image(w, dpi, NOTIFICATION_CATEGORY_GUEST, 5568); +} + +static bool *get_notification_value_ptr(const notification_def *ndef) +{ + bool *configValue = (bool*)((size_t)&gConfigNotifications + ndef->config_offset); + return configValue; +} From 574774b2afaa6e919776f52f29fd53c41f9f5bf0 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Thu, 24 Dec 2015 13:37:48 +0000 Subject: [PATCH 34/42] add notification conditions --- src/config.c | 2 +- src/config.h | 2 +- src/localisation/string_ids.h | 2 +- src/management/award.c | 5 ++++- src/management/marketing.c | 5 ++++- src/management/research.c | 15 +++++++++---- src/peep/peep.c | 42 ++++++++++++++++++++++++++++++----- src/ride/ride.c | 16 +++++++++++-- src/scenario.c | 20 ++++++++++++----- src/windows/news_options.c | 2 +- 10 files changed, 89 insertions(+), 22 deletions(-) diff --git a/src/config.c b/src/config.c index 241862f72e..7c0d33793e 100644 --- a/src/config.c +++ b/src/config.c @@ -271,7 +271,7 @@ config_property_definition _notificationsDefinitions[] = { { offsetof(notification_configuration, ride_researched), "ride_researched", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, { offsetof(notification_configuration, guest_warnings), "guest_warnings", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, { offsetof(notification_configuration, guest_lost), "guest_lost", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, - { offsetof(notification_configuration, guest_entered_left_park), "guest_entered_left_park", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(notification_configuration, guest_left_park), "guest_entered_left_park", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, { offsetof(notification_configuration, guest_queuing_for_ride), "guest_queuing_for_ride", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, { offsetof(notification_configuration, guest_on_ride), "guest_on_ride", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, { offsetof(notification_configuration, guest_left_ride), "guest_left_ride", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, diff --git a/src/config.h b/src/config.h index e45e672991..e85c5d66d1 100644 --- a/src/config.h +++ b/src/config.h @@ -240,7 +240,7 @@ typedef struct { bool ride_researched; bool guest_warnings; bool guest_lost; - bool guest_entered_left_park; + bool guest_left_park; bool guest_queuing_for_ride; bool guest_on_ride; bool guest_left_ride; diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index d3e09e203b..eefc342871 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2221,7 +2221,7 @@ enum { STR_NOTIFICATION_RIDE_RESEARCHED = 5597, STR_NOTIFICATION_GUEST_WARNINGS = 5598, STR_NOTIFICATION_GUEST_LOST = 5599, - STR_NOTIFICATION_GUEST_ENTERED_LEFT_PARK = 5600, + STR_NOTIFICATION_GUEST_LEFT_PARK = 5600, STR_NOTIFICATION_GUEST_QUEUING_FOR_RIDE = 5601, STR_NOTIFICATION_GUEST_ON_RIDE = 5602, STR_NOTIFICATION_GUEST_LEFT_RIDE = 5603, diff --git a/src/management/award.c b/src/management/award.c index 6eac789f6b..b48bc9284b 100644 --- a/src/management/award.c +++ b/src/management/award.c @@ -19,6 +19,7 @@ *****************************************************************************/ #include "../addresses.h" +#include "../config.h" #include "../interface/window.h" #include "../localisation/localisation.h" #include "../peep/peep.h" @@ -619,7 +620,9 @@ void award_update_all() // Add award gCurrentAwards[freeAwardEntryIndex].type = awardType; gCurrentAwards[freeAwardEntryIndex].time = 5; - news_item_add_to_queue(NEWS_ITEM_AWARD, STR_NEWS_ITEM_AWARD_MOST_UNTIDY + awardType, 0); + if (gConfigNotifications.park_award) { + news_item_add_to_queue(NEWS_ITEM_AWARD, STR_NEWS_ITEM_AWARD_MOST_UNTIDY + awardType, 0); + } window_invalidate_by_class(WC_PARK_INFORMATION); } } diff --git a/src/management/marketing.c b/src/management/marketing.c index 602350b3a4..7e3a4a16be 100644 --- a/src/management/marketing.c +++ b/src/management/marketing.c @@ -19,6 +19,7 @@ *****************************************************************************/ #include "../addresses.h" +#include "../config.h" #include "../game.h" #include "../interface/window.h" #include "../localisation/localisation.h" @@ -100,7 +101,9 @@ void marketing_update() RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = ShopItemStringIds[campaignItem].plural; } - news_item_add_to_queue(NEWS_ITEM_MONEY, STR_MARKETING_FINISHED_BASE + campaign, 0); + if (gConfigNotifications.park_marketing_campaign_finished) { + news_item_add_to_queue(NEWS_ITEM_MONEY, STR_MARKETING_FINISHED_BASE + campaign, 0); + } } } diff --git a/src/management/research.c b/src/management/research.c index d5f254da88..bf49249448 100644 --- a/src/management/research.c +++ b/src/management/research.c @@ -19,6 +19,7 @@ *****************************************************************************/ #include "../addresses.h" +#include "../config.h" #include "../game.h" #include "../interface/window.h" #include "../localisation/date.h" @@ -203,8 +204,11 @@ void research_finish_item(sint32 entryIndex) if (RCT2_GLOBAL(0x009AC06C, uint8) == 0) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, rct_string_id) = ((rideEntry->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME)) ? rideEntry->name : base_ride_type + 2; - if (!gSilentResearch) - news_item_add_to_queue(NEWS_ITEM_RESEARCH, STR_NEWS_ITEM_RESEARCH_NEW_RIDE_AVAILABLE, entryIndex); + if (!gSilentResearch) { + if (gConfigNotifications.ride_researched) { + news_item_add_to_queue(NEWS_ITEM_RESEARCH, STR_NEWS_ITEM_RESEARCH_NEW_RIDE_AVAILABLE, entryIndex); + } + } } research_invalidate_related_windows(); @@ -219,8 +223,11 @@ void research_finish_item(sint32 entryIndex) // I don't think 0x009AC06C is ever not 0, so probably redundant if (RCT2_GLOBAL(0x009AC06C, uint8) == 0) { RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, rct_string_id) = scenerySetEntry->name; - if (!gSilentResearch) - news_item_add_to_queue(NEWS_ITEM_RESEARCH, STR_NEWS_ITEM_RESEARCH_NEW_SCENERY_SET_AVAILABLE, entryIndex); + if (!gSilentResearch) { + if (gConfigNotifications.ride_researched) { + news_item_add_to_queue(NEWS_ITEM_RESEARCH, STR_NEWS_ITEM_RESEARCH_NEW_SCENERY_SET_AVAILABLE, entryIndex); + } + } } research_invalidate_related_windows(); diff --git a/src/peep/peep.c b/src/peep/peep.c index c042195323..5a698ff3bf 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -1329,7 +1329,9 @@ void peep_update_falling(rct_peep* peep){ if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x80000)){ RCT2_GLOBAL(0x13CE952, uint16) = peep->name_string_idx; RCT2_GLOBAL(0x13CE954, uint32) = peep->id; - news_item_add_to_queue(NEWS_ITEM_BLANK, STR_NEWS_ITEM_GUEST_DROWNED, peep->x | (peep->y << 16)); + if (gConfigNotifications.guest_died) { + news_item_add_to_queue(NEWS_ITEM_BLANK, STR_NEWS_ITEM_GUEST_DROWNED, peep->x | (peep->y << 16)); + } } RCT2_GLOBAL(0x135882E, uint16) += 25; if (RCT2_GLOBAL(0x135882E, uint16) > 1000){ @@ -2123,8 +2125,10 @@ static void peep_update_ride_sub_state_2_enter_ride(rct_peep* peep, rct_ride* ri else msg_string = STR_PEEP_TRACKING_PEEP_IS_ON_X; + if (gConfigNotifications.guest_on_ride) { news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, msg_string, peep->sprite_index); } + } if (ride->type == RIDE_TYPE_SPIRAL_SLIDE){ sub_693BE5(peep, 1); @@ -3169,7 +3173,9 @@ static void peep_update_ride_sub_state_18(rct_peep* peep){ RCT2_GLOBAL(0x13CE958, uint16) = ride->name; RCT2_GLOBAL(0x13CE95A, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_LEFT_RIDE_X, peep->sprite_index); + if (gConfigNotifications.guest_left_ride) { + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_LEFT_RIDE_X, peep->sprite_index); + } } peep->var_79 = 0xFF; @@ -5264,54 +5270,70 @@ void peep_problem_warnings_update() --warning_throttle[0]; else if ( hunger_counter >= PEEP_HUNGER_WARNING_THRESHOLD && hunger_counter >= guests_in_park / 16) { warning_throttle[0] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_ARE_HUNGRY, 20); } + } if (warning_throttle[1]) --warning_throttle[1]; else if (thirst_counter >= PEEP_THIRST_WARNING_THRESHOLD && thirst_counter >= guests_in_park / 16) { warning_throttle[1] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_ARE_THIRSTY, 21); } + } if (warning_throttle[2]) --warning_throttle[2]; else if (bathroom_counter >= PEEP_BATHROOM_WARNING_THRESHOLD && bathroom_counter >= guests_in_park / 16) { warning_throttle[2] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_CANT_FIND_BATHROOM, 22); } + } if (warning_throttle[3]) --warning_throttle[3]; else if (litter_counter >= PEEP_LITTER_WARNING_THRESHOLD && litter_counter >= guests_in_park / 32) { warning_throttle[3] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISLIKE_LITTER, 26); } + } if (warning_throttle[4]) --warning_throttle[4]; else if (disgust_counter >= PEEP_DISGUST_WARNING_THRESHOLD && disgust_counter >= guests_in_park / 32) { warning_throttle[4] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISGUSTED_BY_PATHS, 31); } + } if (warning_throttle[5]) --warning_throttle[5]; else if (vandalism_counter >= PEEP_VANDALISM_WARNING_THRESHOLD && vandalism_counter >= guests_in_park / 32) { warning_throttle[5] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISLIKE_VANDALISM, 33); } + } if (warning_throttle[6]) --warning_throttle[6]; else if (noexit_counter >= PEEP_NOEXIT_WARNING_THRESHOLD) { warning_throttle[6] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_GETTING_LOST_OR_STUCK, 27); + } } else if (lost_counter >= PEEP_LOST_WARNING_THRESHOLD) { warning_throttle[6] = 4; + if (gConfigNotifications.guest_warnings) { news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_GETTING_LOST_OR_STUCK, 16); } } +} /** * @@ -6297,7 +6319,9 @@ static int peep_interact_with_entrance(rct_peep* peep, sint16 x, sint16 y, rct_m RCT2_GLOBAL(0x0013CE954, uint32) = peep->id; RCT2_GLOBAL(0x0013CE958, rct_string_id) = ride->name; RCT2_GLOBAL(0x0013CE95A, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X, peep->sprite_index); + if (gConfigNotifications.guest_queuing_for_ride) { + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X, peep->sprite_index); + } } return 1; } @@ -6339,7 +6363,9 @@ static int peep_interact_with_entrance(rct_peep* peep, sint16 x, sint16 y, rct_m if (peep->flags & PEEP_FLAGS_TRACKING){ RCT2_GLOBAL(0x0013CE952, rct_string_id) = peep->name_string_idx; RCT2_GLOBAL(0x0013CE954, uint32) = peep->id; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_LEFT_PARK, peep->sprite_index); + if (gConfigNotifications.guest_left_park) { + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_LEFT_PARK, peep->sprite_index); + } } return 1; } @@ -6674,7 +6700,9 @@ static int peep_interact_with_path(rct_peep* peep, sint16 x, sint16 y, rct_map_e RCT2_GLOBAL(0x0013CE954, uint32) = peep->id; RCT2_GLOBAL(0x0013CE958, rct_string_id) = ride->name; RCT2_GLOBAL(0x0013CE95A, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X, peep->sprite_index); + if (gConfigNotifications.guest_queuing_for_ride) { + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X, peep->sprite_index); + } } return peep_footpath_move_forward(peep, x, y, map_element, vandalism_present); @@ -6746,8 +6774,10 @@ static int peep_interact_with_shop(rct_peep* peep, sint16 x, sint16 y, rct_map_e RCT2_GLOBAL(0x0013CE958, rct_string_id) = ride->name; RCT2_GLOBAL(0x0013CE95A, uint32) = ride->name_arguments; rct_string_id string_id = ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE) ? 1933 : 1932; + if (gConfigNotifications.guest_used_facility) { news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, string_id, peep->sprite_index); } + } return 1; } else{ @@ -8287,8 +8317,10 @@ loc_69B221: RCT2_GLOBAL(0x13CE952,uint16) = peep->name_string_idx; RCT2_GLOBAL((0x13CE952 + 2), uint32) = peep->id; RCT2_GLOBAL((0x13CE956 + 2), uint16) = (shopItem >= 32 ? STR_SHOP_ITEM_INDEFINITE_PHOTO2 + (shopItem - 32) : STR_SHOP_ITEM_INDEFINITE_BALLOON + shopItem); + if (gConfigNotifications.guest_bought_item) { news_item_add_to_queue(2, STR_PEEP_TRACKING_NOTIFICATION_BOUGHT_X, peep->sprite_index); } + } if (shop_item_is_food(shopItem)) peep->no_of_food++; diff --git a/src/ride/ride.c b/src/ride/ride.c index fb154e3852..09c44baa8f 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -2299,7 +2299,9 @@ void ride_breakdown_add_news_item(int rideIndex) RCT2_GLOBAL(0x0013CE952 + 0, uint16) = ride->name; RCT2_GLOBAL(0x0013CE952 + 2, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_BROKEN_DOWN, rideIndex); + if (gConfigNotifications.ride_broken_down) { + news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_BROKEN_DOWN, rideIndex); + } } /** @@ -2323,7 +2325,9 @@ static void ride_breakdown_status_update(int rideIndex) ) { RCT2_GLOBAL(0x0013CE952 + 0, uint16) = ride->name; RCT2_GLOBAL(0x0013CE952 + 2, uint32) = ride->name_arguments; - news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_STILL_NOT_FIXED, rideIndex); + if (gConfigNotifications.ride_warnings) { + news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_STILL_NOT_FIXED, rideIndex); + } } } @@ -3043,7 +3047,9 @@ static void ride_entrance_exit_connected(rct_ride* ride, int ride_idx) // name of ride is parameter of the format string RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = ride->name; RCT2_GLOBAL(0x013CE954, uint32) = ride->name_arguments; + if (gConfigNotifications.ride_warnings) { news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); + } ride->connected_message_throttle = 3; } @@ -3051,7 +3057,9 @@ static void ride_entrance_exit_connected(rct_ride* ride, int ride_idx) // name of ride is parameter of the format string RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = ride->name; RCT2_GLOBAL(0x013CE954, uint32) = ride->name_arguments; + if (gConfigNotifications.ride_warnings) { news_item_add_to_queue(1, STR_EXIT_NOT_CONNECTED, ride_idx); + } ride->connected_message_throttle = 3; } @@ -3117,7 +3125,9 @@ static void ride_shop_connected(rct_ride* ride, int ride_idx) // Name of ride is parameter of the format string RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, uint16) = ride->name; RCT2_GLOBAL(0x013CE954, uint32) = ride->name_arguments; + if (gConfigNotifications.ride_warnings) { news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); + } ride->connected_message_throttle = 3; } @@ -7211,8 +7221,10 @@ void ride_crash(int rideIndex, int vehicleIndex) RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, rct_string_id) = ride->name; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint32) = ride->name_arguments; + if (gConfigNotifications.ride_crashed) { news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_HAS_CRASHED, rideIndex); } +} bool ride_type_is_intamin(int rideType) { diff --git a/src/scenario.c b/src/scenario.c index 8f2cf58bb0..9bc0f7e262 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -511,7 +511,9 @@ void scenario_entrance_fee_too_high_check() } packed_xy = (y << 16) | x; - news_item_add_to_queue(NEWS_ITEM_BLANK, STR_ENTRANCE_FEE_TOO_HI, packed_xy); + if (gConfigNotifications.park_warnings) { + news_item_add_to_queue(NEWS_ITEM_BLANK, STR_ENTRANCE_FEE_TOO_HI, packed_xy); + } } } @@ -1330,13 +1332,21 @@ static void scenario_objective_check_guests_and_rating() if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, uint16) < 700 && RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16) >= 1) { RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16)++; if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 1) { - news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_4_WEEKS_REMAINING, 0); + if (gConfigNotifications.park_rating_warnings) { + news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_4_WEEKS_REMAINING, 0); + } } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 8) { - news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_3_WEEKS_REMAINING, 0); + if (gConfigNotifications.park_rating_warnings) { + news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_3_WEEKS_REMAINING, 0); + } } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 15) { - news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_2_WEEKS_REMAINING, 0); + if (gConfigNotifications.park_rating_warnings) { + news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_2_WEEKS_REMAINING, 0); + } } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 22) { - news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_1_WEEK_REMAINING, 0); + if (gConfigNotifications.park_rating_warnings) { + news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_RATING_WARNING_1_WEEK_REMAINING, 0); + } } else if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_RATING_WARNING_DAYS, uint16) == 29) { news_item_add_to_queue(NEWS_ITEM_GRAPH, STR_PARK_HAS_BEEN_CLOSED_DOWN, 0); RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_PARK_OPEN; diff --git a/src/windows/news_options.c b/src/windows/news_options.c index 20a8760e24..41a99e7f3a 100644 --- a/src/windows/news_options.c +++ b/src/windows/news_options.c @@ -27,7 +27,7 @@ static const notification_def NewsItemOptionDefinitions[] = { { NOTIFICATION_CATEGORY_RIDE, STR_NOTIFICATION_RIDE_RESEARCHED, offsetof(notification_configuration, ride_researched) }, { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_WARNINGS, offsetof(notification_configuration, guest_warnings) }, { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_LOST, offsetof(notification_configuration, guest_lost) }, - { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_ENTERED_LEFT_PARK, offsetof(notification_configuration, guest_entered_left_park) }, + { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_LEFT_PARK, offsetof(notification_configuration, guest_left_park) }, { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_QUEUING_FOR_RIDE, offsetof(notification_configuration, guest_queuing_for_ride) }, { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_ON_RIDE, offsetof(notification_configuration, guest_on_ride) }, { NOTIFICATION_CATEGORY_GUEST, STR_NOTIFICATION_GUEST_LEFT_RIDE, offsetof(notification_configuration, guest_left_ride) }, From 2dfc43b8e8650fa9770dc64c0d565e78887bb436 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Thu, 24 Dec 2015 13:56:44 +0000 Subject: [PATCH 35/42] close #2382: Don't suppress drown messages in Six Flags scenarios --- src/peep/peep.c | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/peep/peep.c b/src/peep/peep.c index 5a698ff3bf..72a3d890c9 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -1326,13 +1326,13 @@ void peep_update_falling(rct_peep* peep){ peep_update_action(&x, &y, &xy_distance, peep); if (peep->action == PEEP_ACTION_DROWNING) return; - if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x80000)){ + + if (gConfigNotifications.guest_died) { RCT2_GLOBAL(0x13CE952, uint16) = peep->name_string_idx; RCT2_GLOBAL(0x13CE954, uint32) = peep->id; - if (gConfigNotifications.guest_died) { - news_item_add_to_queue(NEWS_ITEM_BLANK, STR_NEWS_ITEM_GUEST_DROWNED, peep->x | (peep->y << 16)); - } + news_item_add_to_queue(NEWS_ITEM_BLANK, STR_NEWS_ITEM_GUEST_DROWNED, peep->x | (peep->y << 16)); } + RCT2_GLOBAL(0x135882E, uint16) += 25; if (RCT2_GLOBAL(0x135882E, uint16) > 1000){ RCT2_GLOBAL(0x135882E, uint16) = 1000; @@ -2126,8 +2126,8 @@ static void peep_update_ride_sub_state_2_enter_ride(rct_peep* peep, rct_ride* ri msg_string = STR_PEEP_TRACKING_PEEP_IS_ON_X; if (gConfigNotifications.guest_on_ride) { - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, msg_string, peep->sprite_index); - } + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, msg_string, peep->sprite_index); + } } if (ride->type == RIDE_TYPE_SPIRAL_SLIDE){ @@ -5271,8 +5271,8 @@ void peep_problem_warnings_update() else if ( hunger_counter >= PEEP_HUNGER_WARNING_THRESHOLD && hunger_counter >= guests_in_park / 16) { warning_throttle[0] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_ARE_HUNGRY, 20); - } + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_ARE_HUNGRY, 20); + } } if (warning_throttle[1]) @@ -5280,8 +5280,8 @@ void peep_problem_warnings_update() else if (thirst_counter >= PEEP_THIRST_WARNING_THRESHOLD && thirst_counter >= guests_in_park / 16) { warning_throttle[1] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_ARE_THIRSTY, 21); - } + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_ARE_THIRSTY, 21); + } } if (warning_throttle[2]) @@ -5289,8 +5289,8 @@ void peep_problem_warnings_update() else if (bathroom_counter >= PEEP_BATHROOM_WARNING_THRESHOLD && bathroom_counter >= guests_in_park / 16) { warning_throttle[2] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_CANT_FIND_BATHROOM, 22); - } + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_CANT_FIND_BATHROOM, 22); + } } if (warning_throttle[3]) @@ -5298,8 +5298,8 @@ void peep_problem_warnings_update() else if (litter_counter >= PEEP_LITTER_WARNING_THRESHOLD && litter_counter >= guests_in_park / 32) { warning_throttle[3] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISLIKE_LITTER, 26); - } + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISLIKE_LITTER, 26); + } } if (warning_throttle[4]) @@ -5307,8 +5307,8 @@ void peep_problem_warnings_update() else if (disgust_counter >= PEEP_DISGUST_WARNING_THRESHOLD && disgust_counter >= guests_in_park / 32) { warning_throttle[4] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISGUSTED_BY_PATHS, 31); - } + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISGUSTED_BY_PATHS, 31); + } } if (warning_throttle[5]) @@ -5316,8 +5316,8 @@ void peep_problem_warnings_update() else if (vandalism_counter >= PEEP_VANDALISM_WARNING_THRESHOLD && vandalism_counter >= guests_in_park / 32) { warning_throttle[5] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISLIKE_VANDALISM, 33); - } + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_DISLIKE_VANDALISM, 33); + } } if (warning_throttle[6]) @@ -5325,15 +5325,15 @@ void peep_problem_warnings_update() else if (noexit_counter >= PEEP_NOEXIT_WARNING_THRESHOLD) { warning_throttle[6] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_GETTING_LOST_OR_STUCK, 27); + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_GETTING_LOST_OR_STUCK, 27); } } else if (lost_counter >= PEEP_LOST_WARNING_THRESHOLD) { warning_throttle[6] = 4; if (gConfigNotifications.guest_warnings) { - news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_GETTING_LOST_OR_STUCK, 16); + news_item_add_to_queue(NEWS_ITEM_PEEPS, STR_PEEPS_GETTING_LOST_OR_STUCK, 16); + } } } -} /** * @@ -6775,8 +6775,8 @@ static int peep_interact_with_shop(rct_peep* peep, sint16 x, sint16 y, rct_map_e RCT2_GLOBAL(0x0013CE95A, uint32) = ride->name_arguments; rct_string_id string_id = ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE) ? 1933 : 1932; if (gConfigNotifications.guest_used_facility) { - news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, string_id, peep->sprite_index); - } + news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, string_id, peep->sprite_index); + } } return 1; } @@ -8318,8 +8318,8 @@ loc_69B221: RCT2_GLOBAL((0x13CE952 + 2), uint32) = peep->id; RCT2_GLOBAL((0x13CE956 + 2), uint16) = (shopItem >= 32 ? STR_SHOP_ITEM_INDEFINITE_PHOTO2 + (shopItem - 32) : STR_SHOP_ITEM_INDEFINITE_BALLOON + shopItem); if (gConfigNotifications.guest_bought_item) { - news_item_add_to_queue(2, STR_PEEP_TRACKING_NOTIFICATION_BOUGHT_X, peep->sprite_index); - } + news_item_add_to_queue(2, STR_PEEP_TRACKING_NOTIFICATION_BOUGHT_X, peep->sprite_index); + } } if (shop_item_is_food(shopItem)) From 56c2120f8343712925f7dd97c0a21766d1c7b0e7 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Thu, 24 Dec 2015 14:12:13 +0000 Subject: [PATCH 36/42] update changelog with notification feature --- distribution/changelog.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index b5d1f453c7..6650f90d21 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -4,8 +4,8 @@ - Feature: Changing the number of trains no longer requires retesting. - Feature: Add SI units as a new measurement system for distance / speed. - Feature: Update alternative font selection mechanism for all platforms. -- Fix: [#2126] Ferris Wheels set to "backward rotation" stop working (original -bug) +- Feature: Allow enabling / disabling of different notifications. +- Fix: [#2126] Ferris Wheels set to "backward rotation" stop working (original bug) - Fix: [#2449] Turning off Day/Night Circle while it is night doesn't reset back to day 0.0.3.1-beta (2015-12-04) From 6ac38a638233c36b5a53fb261a58e43254789b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pazdiora?= Date: Sat, 26 Dec 2015 23:44:02 +0100 Subject: [PATCH 37/42] fixed bug in "Fix #2158" which caused (if fullscreen was set) starting game in desktop resolution instead of selected fullscreen resolution. --- src/platform/shared.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/shared.c b/src/platform/shared.c index cc177a9489..362cf2e84f 100644 --- a/src/platform/shared.c +++ b/src/platform/shared.c @@ -443,7 +443,7 @@ void platform_process_messages() SDL_RestoreWindow(gWindow); SDL_MaximizeWindow(gWindow); } - if (SDL_GetWindowFlags(gWindow) & SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((SDL_GetWindowFlags(gWindow) & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { SDL_RestoreWindow(gWindow); SDL_SetWindowFullscreen(gWindow, SDL_WINDOW_FULLSCREEN_DESKTOP); } From 7c5a6909ff02f570547a0f6dcd74fcc304473244 Mon Sep 17 00:00:00 2001 From: LRFLEW Date: Sat, 26 Dec 2015 20:16:53 -0600 Subject: [PATCH 38/42] Added windows/news_options.c to Xcode project --- OpenRCT2.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OpenRCT2.xcodeproj/project.pbxproj b/OpenRCT2.xcodeproj/project.pbxproj index b5faafd0de..a55d10382e 100644 --- a/OpenRCT2.xcodeproj/project.pbxproj +++ b/OpenRCT2.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ D41B73F11C21018C0080A7B9 /* libssl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D41B73F01C21018C0080A7B9 /* libssl.tbd */; }; D41B741D1C210A7A0080A7B9 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D41B741C1C210A7A0080A7B9 /* libiconv.tbd */; }; D41B74731C2125E50080A7B9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D41B74721C2125E50080A7B9 /* Assets.xcassets */; }; + D4ABAB061C2F812B0080CAD9 /* news_options.c in Sources */ = {isa = PBXBuildFile; fileRef = D4ABAB051C2F812B0080CAD9 /* news_options.c */; }; D4EC47DF1C26342F0024B507 /* addresses.c in Sources */ = {isa = PBXBuildFile; fileRef = D4EC46D61C26342F0024B507 /* addresses.c */; }; D4EC47E01C26342F0024B507 /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = D4EC46D91C26342F0024B507 /* audio.c */; }; D4EC47E11C26342F0024B507 /* mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4EC46DB1C26342F0024B507 /* mixer.cpp */; }; @@ -215,6 +216,7 @@ D41B74721C2125E50080A7B9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = distribution/osx/Assets.xcassets; sourceTree = SOURCE_ROOT; }; D4895D321C23EFDD000CD788 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = distribution/osx/Info.plist; sourceTree = SOURCE_ROOT; }; D497D0781C20FD52002BF46A /* OpenRCT2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenRCT2.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D4ABAB051C2F812B0080CAD9 /* news_options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = news_options.c; sourceTree = ""; }; D4EC46D61C26342F0024B507 /* addresses.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = addresses.c; path = src/addresses.c; sourceTree = ""; }; D4EC46D71C26342F0024B507 /* addresses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = addresses.h; path = src/addresses.h; sourceTree = ""; }; D4EC46D91C26342F0024B507 /* audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = audio.c; sourceTree = ""; }; @@ -923,6 +925,7 @@ D4EC479A1C26342F0024B507 /* network_status.c */, D4EC479B1C26342F0024B507 /* new_campaign.c */, D4EC479C1C26342F0024B507 /* new_ride.c */, + D4ABAB051C2F812B0080CAD9 /* news_options.c */, D4EC479D1C26342F0024B507 /* news.c */, D4EC479E1C26342F0024B507 /* options.c */, D4EC479F1C26342F0024B507 /* park.c */, @@ -1335,6 +1338,7 @@ D4EC48651C26342F0024B507 /* title_editor.c in Sources */, D4EC47EC1C26342F0024B507 /* rect.c in Sources */, D4EC48101C26342F0024B507 /* http.cpp in Sources */, + D4ABAB061C2F812B0080CAD9 /* news_options.c in Sources */, D4EC47F21C26342F0024B507 /* game.c in Sources */, D4EC48761C26342F0024B507 /* footpath.c in Sources */, D4EC48031C26342F0024B507 /* currency.c in Sources */, From 5cf31b8de4063fd4c2ed88d53b38defaaea871a9 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 27 Dec 2015 04:00:16 +0000 Subject: [PATCH 39/42] Merge Localisation/master into OpenRCT2/develop. --- data/language/dutch.txt | 173 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) diff --git a/data/language/dutch.txt b/data/language/dutch.txt index 697944be54..c57fb4ac2f 100644 --- a/data/language/dutch.txt +++ b/data/language/dutch.txt @@ -3918,6 +3918,9 @@ STR_5582 :Aanwijzer in venster vasthouden STR_5583 :{COMMA1DP16} m/s STR_5584 :SI STR_5585 :{SMALLFONT}{BLACK}Heft de limieten op het tabblad Bedrijfsopties van een attractie op, waardoor je bijvoorbeeld kettingsheuvels met snelheden tot {VELOCITY} kunt hebben. +STR_5586 :Winkels en kraampjes automatisch openen +STR_5587 :{SMALLFONT}{BLACK}Als deze optie is ingeschakeld zullen winkels en kraampjes na plaatsing automatisch worden geopend. +STR_5588 :{SMALLFONT}{BLACK}Multiplayer ############# # Scenarios # @@ -5944,6 +5947,56 @@ STR_NAME : 'Donkere eeuwen'-thema [SCGMYTHO] STR_NAME : Mythologisch thema +################# +# Small objects # +################# +[BRBASE] +STR_NAME :Basisblok + +[BRBASE2] +STR_NAME :Basisblok + +[BRBASE3] +STR_NAME :Basisblok + +[TAL] +STR_NAME :Boom in alligatorvorm + +[TCB] +STR_NAME :Klaverenboom + +[TDF] +STR_NAME :Dolfijnenfontein + +[TDM] +STR_NAME :Ruitenboom + +[TEF] +STR_NAME :Olifantenfontein + +[TGS] +STR_NAME :Giraffenstandbeeld + +[THRS] +STR_NAME :Ruiterstandbeeld + +[THT] +STR_NAME :Hartenboom + +[TQF] +STR_NAME :Cupidofonteinen + +[TSD] +STR_NAME :Schoppenboom + +[TSH] +STR_NAME :Paardenstandbeeld + +[TSTD] +STR_NAME :Dolfijnenstandbeeld + +[TUS] +STR_NAME :Eenhoornstandbeeld ################# # Large objects # ################# @@ -5962,9 +6015,129 @@ STR_NAME :Rijtjeshuis ######### # Walls # ######### +[WALLBB34] +STR_NAME :Stenen muur + +[WALLCBPC] +STR_NAME :Muur met valhek + +[WALLCFAR] +STR_NAME :Muur met boog + +[WALLCFPC] +STR_NAME :Muur met valhek + +[WALLCO16] +STR_NAME :Geplooide stalen muur + +[WALLIG16] +STR_NAME :Iglomuur + +[WALLIG24] +STR_NAME :Iglomuur + +[WALLJB16] +STR_NAME :Muur van zuurtjes + +[WALLLT32] +STR_NAME :Stalen traliewerk + +[WALLNT32] +STR_NAME :Tennisnetmuur + +[WALLNT33] +STR_NAME :Tennisnetmuur + +[WALLPOST] +STR_NAME :Paal + +[WALLST16] +STR_NAME :Stalen muur + +[WALLST32] +STR_NAME :Stalen muur + +[WALLST8] +STR_NAME :Stalen muur + +[WALLSTFN] +STR_NAME :Stalen hek + [WALLTXGT] STR_NAME :'Texas Giant'-bord +[WALLWDPS] +STR_NAME :Hek van houten palen + +[WBR2] +STR_NAME :Stenen muur + +[WBR2A] +STR_NAME :Stenen muur + +[WBR3] +STR_NAME :Stenen muur + +[WC3] +STR_NAME :Romeinse zuilenmuur + +[WC16] +STR_NAME :Besneeuwd hek + +[WC17] +STR_NAME :Besneeuwde houten schutting + +[WC18] +STR_NAME :Besneeuwd hek van houten palen + +[WBW] +STR_NAME :Hek van botten + +[WCW1] +STR_NAME :Muur van speelkaarten + +[WCW2] +STR_NAME :Muur van speelkaarten + +[WEW] +STR_NAME :Egyptische muur + +[WFW1] +STR_NAME :Houten schutting + +[WFWG] +STR_NAME :Houten schutting + +[WJF] +STR_NAME :Junglehek + +[WMW] +STR_NAME :Muur in Marsstijl + +[WMWW] +STR_NAME :Houten hek + +[WPW1] +STR_NAME :Hek van houten palen + +[WPW2] +STR_NAME :Hek van houten palen + +[WPW3] +STR_NAME :Houten hek + +[WRW] +STR_NAME :Romeinse muur + +[WRWA] +STR_NAME :Romeinse muur + +[WWTW] +STR_NAME :Hoog houten hek + +[WWTWA] +STR_NAME :Houten hek + ################## # Path additions # ################## From f87bdb0eda2c0a649c81aad0fed8a360aa2b15bb Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Thu, 17 Dec 2015 22:53:40 +0100 Subject: [PATCH 40/42] Sort load/save window on open, fixes #2477 --- src/windows/loadsave.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows/loadsave.c b/src/windows/loadsave.c index d9d9b5a3f4..a6e09be779 100644 --- a/src/windows/loadsave.c +++ b/src/windows/loadsave.c @@ -699,7 +699,6 @@ static void window_loadsave_populate_list(rct_window *w, int includeNewItem, con _listItemsCount++; } platform_enumerate_files_end(fileEnumHandle); - window_loadsave_sort_list(sortStartIndex, _listItemsCount - 1); fileEnumHandle = platform_enumerate_files_begin(filter); while (platform_enumerate_files_next(fileEnumHandle, &fileInfo)) { @@ -728,6 +727,7 @@ static void window_loadsave_populate_list(rct_window *w, int includeNewItem, con _listItemsCount++; } platform_enumerate_files_end(fileEnumHandle); + window_loadsave_sort_list(sortStartIndex, _listItemsCount - 1); } } From e3f5ea25ae3f7ba7abb309231bd17bd8f10ba87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 27 Dec 2015 00:59:22 +0100 Subject: [PATCH 41/42] Map unknown elem type to corrupt, update tile inspector In map view, all unknown types are mapped to MAP_ELEMENT_TYPE_CORRUPT, the type that prevents rendering of all following elements on given tile. Tile inspector now displays element type (numeric value) for unknown types. --- src/windows/map.c | 6 +++++- src/windows/tile_inspector.c | 5 +++++ src/world/map.h | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/windows/map.c b/src/windows/map.c index 83a1e5227d..2c5ea253d5 100644 --- a/src/windows/map.c +++ b/src/windows/map.c @@ -1547,9 +1547,13 @@ static uint16 map_window_get_pixel_colour_peep(int x, int y) if (!(mapElement->properties.surface.ownership & OWNERSHIP_OWNED)) colour = 10 | (colour & 0xFF00); + const size_t count = countof(ElementTypeAddColour); while (!map_element_is_last_for_tile(mapElement++)) { int mapElementType = map_element_get_type(mapElement) >> 2; - assert(mapElementType < countof(ElementTypeMaskColour)); + if (mapElementType >= count) + { + mapElementType = MAP_ELEMENT_TYPE_CORRUPT >> 2; + } colour &= ElementTypeMaskColour[mapElementType]; colour |= ElementTypeAddColour[mapElementType]; } diff --git a/src/windows/tile_inspector.c b/src/windows/tile_inspector.c index e6e8122b24..c3425d6d77 100644 --- a/src/windows/tile_inspector.c +++ b/src/windows/tile_inspector.c @@ -390,6 +390,11 @@ static void window_tile_inspector_scrollpaint(rct_window *w, rct_drawpixelinfo * ); type_name = buffer; break; + case MAP_ELEMENT_TYPE_CORRUPT: + // fall-through + default: + sprintf(buffer, "Unknown (type %d)", type); + type_name = buffer; } gfx_draw_string(dpi, type_name, 12, x, y); diff --git a/src/world/map.h b/src/world/map.h index 705df960c5..3466048755 100644 --- a/src/world/map.h +++ b/src/world/map.h @@ -121,7 +121,10 @@ enum { MAP_ELEMENT_TYPE_ENTRANCE = (4 << 2), MAP_ELEMENT_TYPE_FENCE = (5 << 2), MAP_ELEMENT_TYPE_SCENERY_MULTIPLE = (6 << 2), - MAP_ELEMENT_TYPE_BANNER = (7 << 2) + MAP_ELEMENT_TYPE_BANNER = (7 << 2), + // The corrupt element type is used for skipping drawing other following + // elements on a given tile. + MAP_ELEMENT_TYPE_CORRUPT = (8 << 2), }; enum { From db425bc0bd41802803bf65c22e88bf0750ddafb6 Mon Sep 17 00:00:00 2001 From: Jarno Veuger Date: Sun, 27 Dec 2015 14:25:55 +0100 Subject: [PATCH 42/42] Added missing files to publish process --- distribution/windows/install.nsi | 12 ++++-------- scripts/ps/publish.ps1 | 2 ++ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/distribution/windows/install.nsi b/distribution/windows/install.nsi index 36ee42ca72..c0455e61a9 100644 --- a/distribution/windows/install.nsi +++ b/distribution/windows/install.nsi @@ -111,13 +111,9 @@ Section "!OpenRCT2" Section1 SetShellVarContext all - ; Copy language files - SetOutPath "$INSTDIR\data\language\" - File ${PATH_ROOT}data\language\*.txt - ; Copy data files SetOutPath "$INSTDIR\data\" - File /r ${PATH_ROOT}data\* + File /r ${PATH_ROOT}bin\data\* ; Copy the rest of the stuff SetOutPath "$INSTDIR\" @@ -125,13 +121,13 @@ Section "!OpenRCT2" Section1 ; Copy curl ca file File ..\..\curl-ca-bundle.crt - ; Copy curl ca file - File ..\..\curl-ca-bundle.crt - ; Copy text files File ..\changelog.txt Push "$INSTDIR\changelog.txt" Call unix2dos + File ..\known_issues.txt + Push "$INSTDIR\known_issues.txt" + Call unix2dos File ..\..\licence.txt Push "$INSTDIR\licence.txt" Call unix2dos diff --git a/scripts/ps/publish.ps1 b/scripts/ps/publish.ps1 index e96dc733f9..07b5f2580a 100644 --- a/scripts/ps/publish.ps1 +++ b/scripts/ps/publish.ps1 @@ -84,6 +84,8 @@ function Do-Package() Copy-Item -Force "$distDir\changelog.txt" $tempDir -ErrorAction Stop Copy-Item -Force "$distDir\known_issues.txt" $tempDir -ErrorAction Stop Copy-Item -Force "$distDir\readme.txt" $tempDir -ErrorAction Stop + Copy-Item -Force "$rootPath\contributors.md" $tempDir -ErrorAction Stop + Copy-Item -Force "$rootPath\licence.txt" $tempDir -ErrorAction Stop # Create archive using 7z (renowned for speed and compression) $7zcmd = "7za"