Move gBankLoan and gBankLoanInterestRate to GameState_t

This commit is contained in:
Martin Mizzi 2024-02-18 22:58:17 -05:00
parent 7f59e20926
commit f5a9846ea2
18 changed files with 301 additions and 69 deletions

View File

@ -98,6 +98,7 @@ STR_0092 :Laukaisuvuoristorata
STR_0093 :Hybridivuoristorata
STR_0094 :Yksikiskoinen vuoristorata
STR_0095 :Alppivuoristorata
STR_0096 :Klassinen puinen vuoristorata
STR_0512 :Kompakti vuoristorata, jossa on spiraalimainen nostomäki, ja sulavat, kaartelevat pudotukset.
STR_0513 :Silmukoiva vuoristorata, jossa matkustajat ovat seisoma-asennossa
STR_0514 :Junat riippuvat vuoristoradan alla, ja heilahtavat sivuttain käänteissä
@ -180,6 +181,7 @@ STR_0602 :Vuoristorata jonka junat laukaistaan asemalta induktiomoottorilla,
STR_0603 :Puinen vuoristorata teräskiskoilla, jyrkillä pudotuksilla ja käännöksillä varustettuna
STR_0604 :Matkustajat kulkevat peräjonossa kapealla yksittäiskiskolla, kiitäen tiukkojen käännösten ja suunnanvaihdoksien läpi
STR_0605 :Matkustajat laskettelevat kelkalla teräsrataa pitkin alas, säätäen vauhtiansa jarrujen avulla
STR_0606 :Vanhemman mallinen puinen vuoristorata, joka on suunniteltu hallitsemattoman tuntuiseksi - tarjoten nopeaa ja rajua kyytiä, runsaasti airtimeä, ja jonkin verran sivuttaista G-voimaa.
STR_0767 :Kävijä {INT32}
STR_0768 :Yleismies {INT32}
STR_0769 :Mekaanikko {INT32}
@ -755,7 +757,7 @@ STR_1363 :Liian korkealla tukirakenteita varten!
STR_1364 :Ylemmän radan tukirakenteita ei voi pidentää!
STR_1365 :Suora kierre (vasen)
STR_1366 :Suora kierre (oikea)
STR_1367 :Puolisilmukka
STR_1367 :Pieni puolisilmukka
STR_1368 :Puolikas korkkiruuvi (vasen)
STR_1369 :Puolikas korkkiruuvi (oikea)
STR_1370 :Tynnyrikierre (vasen)
@ -2964,7 +2966,7 @@ STR_5832 :Näytä korkeus yleisenä numerona tarkan mittayksikön sijaan
STR_5833 :Asettaa pelissä käytetyn päivämäärämuodon
STR_5834 :Valitse mitä äänilaitetta OpenRCT2 käyttää
STR_5835 :Mykistä peli jos ikkunan kohdistus häviää
STR_5836 :Valitse päävalikossa soiva musiikki.{NEWLINE}RCT1-teemamusiikin valinta edellyttää, että joko kopioit data/css17.dat -tiedoston RCT1-kansiosta data/css50.dat -tiedostoksi RCT2-kansioon, tai asetat RCT1-hakemiston Lisäasetukset-välilehdellä.
STR_5836 :Valitse päävalikossa soiva musiikki.{NEWLINE}RCT1-teemamusiikin valinta edellyttää, että asetat RCT1-hakemiston Lisäasetukset-välilehdellä.
STR_5837 :Luo ja hallitse mukautettuja käyttöliittymäteemoja
STR_5838 :Näytä erillinen painike työkalupalkissa Talous-ikkunaa varten
STR_5839 :Näytä erillinen painike työkalupalkissa Kehitys-ikkunaa varten
@ -3252,8 +3254,8 @@ STR_6133 :Käytä laitteita ja maisemointeja joita ei ole vielä kehitetty
STR_6134 :Raivaa maisemointi
STR_6135 :Asiakasohjelma lähetti epäkelvon pyynnön
STR_6136 :Palvelin lähetti epäkelvon pyynnön
STR_6137 :OpenRCT2, ilmainen avoimen lähdekoodin Roller Coaster Tycoon 2 -klooni.
STR_6138 :OpenRCT2 on monen tekijän yhteistyötä. Täysi lista löytyy tiedostosta “contributors.md”. Lisätietoja osoitteessa http://github.com/OpenRCT2/OpenRCT2
STR_6137 :OpenRCT2: ilmainen, avoimen lähdekoodin Roller Coaster Tycoon 2:n uudelleenluomus ja laajennus.
STR_6138 :OpenRCT2 on monen eri tekijän yhteistyötä. Lista heidän nimistään löytyy “Osallistujat” -painikkeen takaa. Lisätietoja osoitteessa http://github.com/OpenRCT2/OpenRCT2
STR_6139 :Kaikki tuote- ja yritysnimet kuuluvat kullekin oikeudenomistajalleen. Niiden käyttö ei tarkoita minkäänlaista yhteistyötä tai hyväksyntää.
STR_6140 :Muutosloki…
STR_6141 :RCT1:n alapalkkityyli
@ -3397,7 +3399,7 @@ STR_6318 :Verkkopelin epätahdistus havaittu.{NEWLINE}Lokitiedosto: {STRING}
STR_6319 :Lohkojarru kiinni
STR_6320 :Hajoutumaton
STR_6321 :Lisäosa on hajonnut
STR_6322 :{WINDOW_COLOUR_2}Spritetunnus: {BLACK}{INT32}
STR_6322 :{WINDOW_COLOUR_2}Entiteettitunnus: {BLACK}{INT32}
STR_6323 :Simuloidaan
STR_6324 :Simuloi
STR_6325 :Simuloi laitetta
@ -3547,8 +3549,8 @@ STR_6470 :Säädä suurempaa partioaluetta
STR_6471 :Läpinäkyvä kasvitus
STR_6472 :Läpinäkyvät kulkuneuvot
STR_6473 :Läpinäkyvät tukirakenteet
STR_6474 :Läpinäkyvät kävijät
STR_6475 :Läpinäkyvä henkilöstö
STR_6474 :Näkymättömät kävijät
STR_6475 :Näkymätön henkilöstö
STR_6476 :Näkymätön kasvitus
STR_6477 :Näkymättömät maisemoinnit
STR_6478 :Näkymättömät polut
@ -3559,19 +3561,135 @@ STR_6482 :Läpinäkyvyysasetukset
STR_6483 :Avaa läpinäkyvyyden asetukset
STR_6484 :Läpinäkyvä kasvitus -kytkin
STR_6485 :Läpinäkyvät kulkuneuvot -kytkin
STR_6486 :Läpinäkyvät kävijät -kytkin
STR_6487 :Läpinäkyvä henkilöstö -kytkin
STR_6486 :Näkymättömät kävijät -kytkin
STR_6487 :Näkymätön henkilöstö -kytkin
STR_6488 :{RED}Kävijät valittavat pitkistä jonoista puistosi laitteisiin.{NEWLINE}Lyhennä ongelmallisia jonotusalueita, tai korota laitteiden kapasiteettia.
STR_6489 :Virhe: Yhteensopimaton puistoversio
STR_6490 :Varoitus: Jokseenkin yhteensopiva puistoversio
STR_6491 :Tämä puisto on tallennettu uudemmalla OpenRCT2-versiolla. Puisto on v{INT32} ja vaatii vähintään v{INT32}.
STR_6491 :Tämä puisto on tallennettu uudemmalla OpenRCT2-versiolla. Puisto on v{INT32} ja vaatii vähintään v{INT32}. Nykyinen versiosi on v{INT32}.
STR_6492 :Tämä puisto on tallennettu vanhemmalla OpenRCT2-versiolla, eikä sitä voi avata tällä peliversiolla. Puisto on v{INT32}.
STR_6493 :Tämä puisto on tallennettu uudemmalla OpenRCT2-versiolla, ja jotkin tiedot ovat saattaneet kadota. Puisto on v{INT32} ja vaatii vähintään v{INT32}.
STR_6493 :Tämä puisto on tallennettu uudemmalla OpenRCT2-versiolla, ja jotkin tiedot ovat saattaneet kadota. Puisto on v{INT32} ja vaatii vähintään v{INT32}. Nykyinen versiosi on v{INT32}.
STR_6494 :Ryhmitä laitetyypittäin
STR_6495 :Ryhmitä laitteet laitetyypin perusteella, yksittäisten kulkuneuvojen sijaan.
STR_6496 :{WINDOW_COLOUR_2}{STRINGID}
STR_6497 :Klikkaa ruutua nähdäksesi sen elementit.{NEWLINE}Ctrl + klikkaa ruutuelementtiä valitaksesi sen suoraan.
STR_6498 :Ota käyttöön pitääksesi kartan neliönä.
STR_6499 :Ratamallin tiedostomuoto ei tue kulkuneuvon tyyppiä
STR_6500 :Ratamallin tiedostomuoto ei tue rataelementtiä
STR_6501 :Satunnainen väri
STR_6502 :Anna arvo väliltä {COMMA16}-{COMMA16}
STR_6503 :Ainakin yhden asemaesineen tulee olla valittuna
STR_6504 :Ainakin yhden maastopinnan tulee olla valittuna
STR_6505 :Ainakin yhden maastoreunan tulee olla valittuna
STR_6506 :Iso puolikas korkkiruuvi (vasen)
STR_6507 :Iso puolikas korkkiruuvi (oikea)
STR_6508 :Keskikokoinen puolisilmukka (vasen)
STR_6509 :Keskikokoinen puolisilmukka (oikea)
STR_6510 :Painoton kierre (vasen)
STR_6511 :Painoton kierre (oikea)
STR_6512 :Iso painoton kierre (vasen)
STR_6513 :Iso painoton kierre (oikea)
STR_6514 :Epäkelpo korkeus!
STR_6515 :{BLACK}RollerCoaster Tycoon 1:tä ei ole yhdistetty - korvikegrafiikka on käytössä.
STR_6516 :Yksi tai useampi lisätty esine vaatii RollerCoaster Tycoon 1:n yhdistämisen, jotta ne näkyvät oikein. Korvikegrafiikka on käytössä.
STR_6517 :Yksi tai useampi puiston esine vaatii RollerCoaster Tycoon 1:n yhdistämisen, jotta ne näkyvät oikein. Korvikegrafiikka on käytössä.
STR_6518 :{BLACK}Vie osoitin skenaarion päälle lukeaksi sen kuvauksen ja tavoitteen. Klikkaa pelataksesi.
STR_6519 :Ekstrat
STR_6520 :Resurssipaketit
STR_6521 :Matalampi prioriteetti
STR_6522 :Korkeampi prioriteetti
STR_6523 :Vähennä valitun resurssipaketin prioriteettia.
STR_6524 :Lisää valitun resurssipaketin prioriteettia.
STR_6525 :Päivitä kaikki pelissä olevat resurssit valituista resurssipaketeista.
STR_6526 :(perusgrafiikat, -musiikki, ja -ääniefektit)
STR_6527 :Kilpailut
STR_6528 :Epäkelvot rataparametrit!
STR_6529 :Epäkelpo väriteemaparametri!
STR_6530 :User Created Expansion Set
STR_6531 :Aikakone
STR_6532 :Ursulan unelmamaailma
STR_6533 :{WINDOW_COLOUR_2}Huvituskerroin: {BLACK}-{COMMA16}%
STR_6534 :{WINDOW_COLOUR_2}Jännityskerroin: {BLACK}-{COMMA16}%
STR_6535 :{WINDOW_COLOUR_2}Pahoinvointikerroin: {BLACK}-{COMMA16}%
STR_6536 :Tämä puisto on tallennettu uudemmalla OpenRCT2-versiolla. Puisto tallennettiin versiolla v{INT32}, ja nykyinen versiosi on v{INT32}.
STR_6537 :Salli polkujen käyttö jonoalueina
STR_6538 :Näyttää tavallisten polkujen tyylivaihtoehdot Polut-ikkunan jonoaluevalikossa.
STR_6539 :Jarru kiinni
STR_6540 :{WINDOW_COLOUR_2}Erityiskiitokset seuraaville yhtiölle, jotka suostuivat näköisyyksiensä käyttöön:
STR_6541 :{WINDOW_COLOUR_2}Rocky Mountain Construction Group, Josef Wiegand GmbH & Co. KG
STR_6542 :Osallistujat
STR_6543 :Osallistujat…
STR_6544 :Laina ei voi olla negatiivinen!
STR_6545 :Käytä RCT1:n korkolaskentaa
STR_6546 :Käytä RollerCoaster Tycoon 1:n käyttämää lainojen koron laskuyhtälöä, jonka tuloksena on n. 1.33% vakioprosentti.
STR_6547 :Kaikki maisemoinnit
STR_6548 :Näytä kaiteet risteyksessä
STR_6549 :Yhteensopivuusesineitä ei voi valita!
STR_6550 :Tämä merkintä on sisällytetty yhteensopivuuden takaamiseksi vanhojen tai rikkinäisten esineiden kanssa. Sitä ei voi valita - valinta voidaan vain poistaa.
STR_6551 :Armeijanvihreä
STR_6552 :Mesikaste
STR_6553 :Kellanruskea
STR_6554 :Kastanjanruskea
STR_6555 :Koralli
STR_6556 :Merenvihreä
STR_6557 :Keltavihreä
STR_6558 :Sammalenvihreä
STR_6559 :Patinanvihreä
STR_6560 :Limetinvihreä
STR_6561 :Seepia
STR_6562 :Persikka
STR_6563 :Talvionsininen
STR_6564 :Smaragdinvihreä
STR_6565 :Vaahdonvihreä
STR_6566 :Violetti
STR_6567 :Laventeli
STR_6568 :Pastellioranssi
STR_6569 :Syvänmerensininen
STR_6570 :Pastellipinkki
STR_6571 :Umbra
STR_6572 :Pellava
STR_6573 :Näkymätön
STR_6574 :Tyhjiö
STR_6575 :Salli erikoisvärit
STR_6576 :Lisää erikoisvärejä värivalikkoon
STR_6577 :Lohkojarrujen nopeus
STR_6578 :Aseta lohkojarruille nopeusrajoitus. Lohkojarrutustilassa vierekkäiset hitaamman nopeuden jarrut yhdistyvät lohkojarruihin.
STR_6579 :Ratamalleissa lohkojarrujen nopeus palautuu oletusasetukseen
STR_6580 :Palauta
STR_6581 :Oletko varma, että haluat palauttaa kaikki pikanäppäimesi alkutilaan?
STR_6582 :Avaa pikanäppäinten asetukset
STR_6583 :{WINDOW_COLOUR_2}Käänteiset junat
STR_6584 :Aseta junat kulkemaan takaperin
STR_6585 :Muutoksia ei voi tehdä…
STR_6586 :OpenRCT2
STR_6587 :OpenRCT2:n tunnusmusiikki on Allister Brimblen käsialaa,{NEWLINE}CC BY-SA 4.0 -lisenssin alaisena.
STR_6588 :Kiitoksemme Herman Ridderingille luvasta nauhoittaa 35er Voigtin musiikkia.
STR_6589 :Näytä ikkunan painikkeet vasemmalla
STR_6590 :Näytä ikkunan painikkeet (esim. ikkunan sulkemiseen) otsakerivin vasemmalla reunalla oikean reunan sijaan.
STR_6591 :Tämä toimihenkilö korjaa parhaillaan laitetta, eikä häntä voi irtisanoa.
STR_6592 :Tämä toimihenkilö tarkastaa parhaillaan laitetta, eikä häntä voi irtisanoa.
STR_6593 :Poista puiston aidat
STR_6594 :Ruututyökalu: Vaihda seinän kaltevuus
STR_6595 :{WINDOW_COLOUR_2}Tekijä: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Tekijät: {BLACK}{STRING}
STR_6597 :Epäkelpo parametri
STR_6598 :Arvo on rajojen ulkopuolella
STR_6599 :Kuvajaiselementtiä ei löytynyt
STR_6600 :Ilmapalloa ei löytynyt
STR_6601 :Henkilöstöä ei löytynyt
STR_6602 :Laitetta ei löytynyt
STR_6603 :Laite-esinettä ei löytynyt
STR_6604 :Pelaajaa ei löytynyt
STR_6605 :Sisäänkäyntielementtiä ei löytynyt
STR_6606 :Pintaelementtiä ei löytynyt
STR_6607 :Ruutuelementtiä ei löytynyt
STR_6608 :Rataelementtiä ei löytynyt
STR_6609 :Ratalohkoa ei löytynyt
STR_6610 :Polkuelementtiä ei löytynyt
STR_6611 :Seinäelementtiä ei löytynyt
STR_6612 :Bannerielementtiä ei löytynyt
STR_6613 :Päivitä esine
#############
# Scenarios #
@ -4235,7 +4353,7 @@ STR_DTLS :Olet menestyksekäs liikemies sapattivapaalla, ja haluat käyttää
<South America - Inca Lost City>
STR_SCNR :Etelä-Amerikka - Inkojen kadonnut kaupunki
STR_PARK :Kadonnut kaupunki
STR_DTLS :Edistääksesi paikallista turismia, sinun tulee rakentaa puisto, joka on ympäristönsä kaltainen, vaikka korkeusrajoitukset ovatkin voimassa.
STR_DTLS :Edistääksesi paikallista turismia, sinun tulee rakentaa puisto, joka on ympäristönsä kaltainen.
<South America - Rain Forest Plateau>
STR_SCNR :Etelä-Amerikka - Sademetsän tasanko
@ -4327,3 +4445,106 @@ STR_DTLS :Tämä vanha huvipuisto on nähnyt parempia päiviä. Auta sen omis
STR_SCNR :Pandamaailma
STR_PARK :Pandamaailma
STR_DTLS :Rakenna lisää laitteita ja houkuttele lisää kävijöitä tähän panda-teemaiseen puistoon
<Tycoon Park>
STR_SCNR :Pohattapuisto
STR_PARK :Pohattapuisto
STR_DTLS :
###
<UCES Halloween>
STR_SCNR :Kalmistokallio
STR_PARK :Kalmistokallio
STR_DTLS :Nyt on halloween, UCES halloween, kurpitsat kirkuvat öisin tääl! Tämä hautausmaa on pulassa, ja vain sinä voit sen pelastaa - kunhan annat vainajien levätä rauhassa! Pystytkö pitämään kummitukset haudoissaan, ja kävijät värinöissään?{NEWLINE}Tekijä: Squid
###############################################################################
## UCES: The Time Machine (2003)
###############################################################################
<Lighthouse of Alexandria by Katatude for UCES>
STR_SCNR :Faroksen majakka
STR_PARK :Faroksen majakka
STR_DTLS :Aleksanteri rakensi kaupunkinsa; kreikkalaiset, roomalaiset, ja egyptiläiset jättivät jälkensä. Mutta kaupungin suurin kunnia on yksi vanhan maailman seitsemästä ihmeestä - Faroksen majakka. Vieraile ja rakenna puisto!{NEWLINE}Tekijä: Katatude
<Cleveland's Luna Park>
STR_SCNR :Luna Park, Cleveland
STR_PARK :Luna Park
STR_DTLS :Aivan kuten se oli avajaispäivänään - 18. toukokuuta 1905.{NEWLINE}Tekijä: Aetherwave
<Mount Vesuvius 1700 A.D. by Katatude for UCES>
STR_SCNR :Vesuvius
STR_PARK :Vesuvius
STR_DTLS :Pompejin ja Herculaneumin kaupungit hautautuivat Vesuviuksen purkauduttua vuonna 79. Vieraile kaivauspaikalla, ja rakenna puisto!{NEWLINE}Tekijä: Katatude
<The Sandbox by Katatude for UCES>
STR_SCNR :Hiekkalaatikko
STR_PARK :Hiekkalaatikko
STR_DTLS :Se, mitä kaikki aina haluavat - hiekkalaatikko! Tartu siis ämpäriin ja lapioon, ja rakenna puisto!{NEWLINE}Tekijä: Katatude
<Niagara Falls & Gorge by Katatude for UCES>
STR_SCNR :Niagaran putoukset
STR_PARK :Niagaran putoukset
STR_DTLS :American Falls, Bridal Falls ja kanadalainen Horseshoe Falls, Niagaran rajaseudulla vuonna 1850.{NEWLINE}Tekijä: Katatude
<Rocky Mountain Miners>
STR_SCNR :Kalliovuorten kaivos
STR_PARK :Kalliovuorten kaivos
STR_DTLS :Maavyöry tukki rautatien. Työntekijäsi lähtivät tutkimuksille. Onko vuoristoradoissa sittenkin kultaa?{NEWLINE}Tekijät: Squid, Buckone, Fossil
<The Time Machine by Katatude for UCES>
STR_SCNR :Aikakone
STR_PARK :Aikakone
STR_DTLS :Aikakone. Rakenna mennäksesi mihin vain, milloin vain. Ikuisuus odottaa. Kaikki on suhteellista.{NEWLINE}Tekijä: Katatude
<Tower of Babel>
STR_SCNR :Baabelin torni
STR_PARK :Baabelin torni
STR_DTLS :Oho! Mihinkäs aikakone nyt meidät toi? Mihin kaikki häipyivät?{NEWLINE}Tekijä: Fossil
<Transformation>
STR_SCNR :Muutos
STR_PARK :Muutos
STR_DTLS :Olemme odottaneet teitä…{NEWLINE}Tekijä: Fossil
<Urbis Incognitus>
STR_SCNR :Urbis incognitus
STR_PARK :Urbis incognitus
STR_DTLS :Roomalaiset ovat kyllästyneitä tylsiin gladiaattoritaisteluihin. Näytä heille mitä todellinen huvitus on, muuttamalla roomalaiskaupunki kaikkien aikojen mahtavimmaksi huvipuistoksi!{NEWLINE}Tekijä: Kaffe
###############################################################################
## UCES: Katys Dreamworld (2003)
###############################################################################
<Beneath the Christmas Tree by Katatude for UCES>
STR_SCNR :Alla joulupuun
STR_PARK :Talven ihmemaa
STR_DTLS :Äiti rakensi tämän dioraaman joulukuusen alle. Nyt hän haluaa sinne huvipuiston! Pystytkö auttamaan?{NEWLINE}Tekijä: Katatude
<Bigrock Blast>
STR_SCNR :Jättikiven jytky
STR_PARK :Jättikiven jytky
STR_DTLS :Jättikiven Kaivokset Oy:n räjähdysonnettomuuden jälkeen Jättikiven kylän asukkaat ovat rakentaneet huvipuiston kylänsä elinkeinoksi.{NEWLINE}Tekijät: rbarclay & buckone
<Camp Mockingbird for UCES by Katatude>
STR_SCNR :Matkijalinnun leiri
STR_PARK :Matkijalinnun leiri
STR_DTLS :Kesäleirille, vain 500€/viikko! Tili tyhjäksi, ja tule pitämään hauskaa puiston rakennuksen ohessa.{NEWLINE}Tekijä: Katatude
<Choo Choo Town>
STR_SCNR :Tsuku-tsuku-kylä
STR_PARK :Tsuku-tsuku-kylä
STR_DTLS :Äiti! Isä! Tahdon mennä Tsuku-tsuku-kylään!{NEWLINE}Tekijä: Fossil
<Dragon Islands>
STR_SCNR :Lohikäärmesaaret
STR_PARK :Lohikäärmesaaret
STR_DTLS :Lohikäärmesaaret? En ole varma, haluanko mennä sinne…{NEWLINE}Tekijä: Fossil
<Kiddy Karnival II>
STR_SCNR :Kakarakarnevaali II
STR_PARK :Kakarakarnevaali
STR_DTLS :Hei muksut! Pidetään hauskaa!{NEWLINE}Tekijät: Piehead & Fossil
<Sand Dune>
STR_SCNR :Hiekkadyyni
STR_PARK :Hiekkadyyni
STR_DTLS :Pienen puiston omistajana ostit valtavan rantatontin kävijöitä houkuttelevaa laajennusta varten. Mutta varo: et saa häiritä ekologisesti herkkiä hiekkadyynejä.{NEWLINE}Tekijä: rbarclay

View File

@ -3690,6 +3690,7 @@ STR_6609 :Bloc de voie introuvable
STR_6610 :Élément de chemin introuvable
STR_6611 :Élément de mur introuvable
STR_6612 :Élément de bannière introuvable
STR_6613 :Recharger lobjet
#############
# Scenarios #

View File

@ -465,10 +465,10 @@ private:
Invalidate();
break;
case WIDX_INITIAL_LOAN_INCREASE:
if (gBankLoan < 5000000.00_GBP)
if (gameState.BankLoan < 5000000.00_GBP)
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::InitialLoan, gBankLoan + 1000.00_GBP);
ScenarioSetSetting::InitialLoan, gameState.BankLoan + 1000.00_GBP);
GameActions::Execute(&scenarioSetSetting);
}
else
@ -478,10 +478,10 @@ private:
Invalidate();
break;
case WIDX_INITIAL_LOAN_DECREASE:
if (gBankLoan > 0.00_GBP)
if (gameState.BankLoan > 0.00_GBP)
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::InitialLoan, gBankLoan - 1000.00_GBP);
ScenarioSetSetting::InitialLoan, gameState.BankLoan - 1000.00_GBP);
GameActions::Execute(&scenarioSetSetting);
}
else
@ -517,10 +517,10 @@ private:
Invalidate();
break;
case WIDX_INTEREST_RATE_INCREASE:
if (gBankLoanInterestRate < MaxBankLoanInterestRate)
if (gameState.BankLoanInterestRate < MaxBankLoanInterestRate)
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::AnnualInterestRate, gBankLoanInterestRate + 1);
ScenarioSetSetting::AnnualInterestRate, gameState.BankLoanInterestRate + 1);
GameActions::Execute(&scenarioSetSetting);
}
else
@ -530,9 +530,9 @@ private:
Invalidate();
break;
case WIDX_INTEREST_RATE_DECREASE:
if (gBankLoanInterestRate > 0)
if (gameState.BankLoanInterestRate > 0)
{
auto interest = std::min<uint8_t>(MaxBankLoanInterestRate, gBankLoanInterestRate - 1);
auto interest = std::min<uint8_t>(MaxBankLoanInterestRate, gameState.BankLoanInterestRate - 1);
auto scenarioSetSetting = ScenarioSetSettingAction(ScenarioSetSetting::AnnualInterestRate, interest);
GameActions::Execute(&scenarioSetSetting);
}
@ -622,6 +622,8 @@ private:
WindowDrawWidgets(*this, dpi);
DrawTabImages(dpi);
auto& gameState = GetGameState();
const auto& initialCashWidget = widgets[WIDX_INITIAL_CASH];
if (initialCashWidget.type != WindowWidgetType::Empty)
{
@ -642,7 +644,7 @@ private:
screenCoords = windowPos + ScreenCoordsXY{ initialLoanWidget.left + 1, initialLoanWidget.top };
auto ft = Formatter();
ft.Add<money64>(gBankLoan);
ft.Add<money64>(gameState.BankLoan);
DrawTextBasic(dpi, screenCoords, STR_CURRENCY_FORMAT_LABEL, ft);
}
@ -667,7 +669,7 @@ private:
screenCoords = windowPos + ScreenCoordsXY{ interestRateWidget.left + 1, interestRateWidget.top };
auto ft = Formatter();
ft.Add<int16_t>(std::clamp<int16_t>(static_cast<int16_t>(gBankLoanInterestRate), INT16_MIN, INT16_MAX));
ft.Add<int16_t>(std::clamp<int16_t>(static_cast<int16_t>(gameState.BankLoanInterestRate), INT16_MIN, INT16_MAX));
DrawTextBasic(dpi, screenCoords, STR_PERCENT_FORMAT_LABEL, ft);
}
}

View File

@ -491,8 +491,8 @@ public:
{
// If loan can be increased, do so.
// If not, action shows error message.
auto newLoan = gBankLoan + 1000.00_GBP;
if (gBankLoan < gameState.MaxBankLoan)
auto newLoan = gameState.BankLoan + 1000.00_GBP;
if (gameState.BankLoan < gameState.MaxBankLoan)
{
newLoan = std::min(gameState.MaxBankLoan, newLoan);
}
@ -505,10 +505,10 @@ public:
// If loan is positive, decrease it.
// If loan is negative, action shows error message.
// If loan is exactly 0, prevent error message.
if (gBankLoan != 0)
if (gameState.BankLoan != 0)
{
auto newLoan = gBankLoan - 1000.00_GBP;
if (gBankLoan > 0)
auto newLoan = gameState.BankLoan - 1000.00_GBP;
if (gameState.BankLoan > 0)
{
newLoan = std::max(static_cast<money64>(0LL), newLoan);
}
@ -527,7 +527,7 @@ public:
// drawing has completed.
auto ft = Formatter::Common();
ft.Increment(6);
ft.Add<money64>(gBankLoan);
ft.Add<money64>(GetGameState().BankLoan);
// Keep up with new months being added in the first two years.
if (GetDate().GetMonthsElapsed() != _lastPaintedMonth)
@ -569,7 +569,7 @@ public:
if (!(gameState.ParkFlags & PARK_FLAGS_RCT1_INTEREST))
{
auto ft = Formatter();
ft.Add<uint16_t>(gBankLoanInterestRate);
ft.Add<uint16_t>(gameState.BankLoanInterestRate);
DrawTextBasic(dpi, windowPos + ScreenCoordsXY{ 167, 279 }, STR_FINANCES_SUMMARY_AT_X_PER_YEAR, ft);
}
@ -615,8 +615,10 @@ public:
auto graphTopLeft = windowPos + ScreenCoordsXY{ pageWidget->left + 4, pageWidget->top + 15 };
auto graphBottomRight = windowPos + ScreenCoordsXY{ pageWidget->right - 4, pageWidget->bottom - 4 };
const auto& gameState = GetGameState();
// Cash (less loan)
auto cashLessLoan = GetGameState().Cash - gBankLoan;
auto cashLessLoan = gameState.Cash - gameState.BankLoan;
auto ft = Formatter();
ft.Add<money64>(cashLessLoan);

View File

@ -344,11 +344,11 @@ namespace Editor
gameState.InitialCash = std::min<money64>(GetGameState().InitialCash, 100000);
FinanceResetCashToInitial();
gBankLoan = std::clamp<money64>(gBankLoan, 0.00_GBP, 5000000.00_GBP);
gameState.BankLoan = std::clamp<money64>(gameState.BankLoan, 0.00_GBP, 5000000.00_GBP);
gameState.MaxBankLoan = std::clamp<money64>(gameState.MaxBankLoan, 0.00_GBP, 5000000.00_GBP);
gBankLoanInterestRate = std::clamp<uint8_t>(gBankLoanInterestRate, 5, MaxBankLoanInterestRate);
gameState.BankLoanInterestRate = std::clamp<uint8_t>(gameState.BankLoanInterestRate, 5, MaxBankLoanInterestRate);
}
ClimateReset(gameState.Climate);

View File

@ -62,6 +62,8 @@ namespace OpenRCT2
uint16_t ScenarioParkRatingWarningDays;
money64 ScenarioCompletedCompanyValue;
money64 ScenarioCompanyValueRecord;
money64 BankLoan;
uint8_t BankLoanInterestRate;
money64 MaxBankLoan;
random_engine_t ScenarioRand;
int32_t MapBaseZ;

View File

@ -591,7 +591,7 @@ void CheatSetAction::AddMoney(money64 amount) const
void CheatSetAction::ClearLoan() const
{
// First give money
AddMoney(gBankLoan);
AddMoney(GetGameState().BankLoan);
// Then pay the loan
auto gameAction = ParkSetLoanAction(0.00_GBP);

View File

@ -44,18 +44,18 @@ void ParkSetLoanAction::Serialise(DataSerialiser& stream)
GameActions::Result ParkSetLoanAction::Query() const
{
auto& gameState = GetGameState();
if (_value > gBankLoan && _value > gameState.MaxBankLoan)
if (_value > gameState.BankLoan && _value > gameState.MaxBankLoan)
{
return GameActions::Result(
GameActions::Status::Disallowed, STR_CANT_BORROW_ANY_MORE_MONEY, STR_BANK_REFUSES_TO_INCREASE_LOAN);
}
if (_value < gBankLoan && _value < 0.00_GBP)
if (_value < gameState.BankLoan && _value < 0.00_GBP)
{
return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_PAY_BACK_LOAN, STR_LOAN_CANT_BE_NEGATIVE);
}
// The “isPayingBack” check is needed to allow increasing the loan when the player is in debt.
const auto isPayingBack = gBankLoan > _value;
const auto amountToPayBack = gBankLoan - _value;
const auto isPayingBack = gameState.BankLoan > _value;
const auto amountToPayBack = gameState.BankLoan - _value;
if (isPayingBack && amountToPayBack > gameState.Cash)
{
return GameActions::Result(
@ -66,8 +66,10 @@ GameActions::Result ParkSetLoanAction::Query() const
GameActions::Result ParkSetLoanAction::Execute() const
{
GetGameState().Cash -= (gBankLoan - _value);
gBankLoan = _value;
auto& gameState = GetGameState();
gameState.Cash -= (gameState.BankLoan - _value);
gameState.BankLoan = _value;
auto windowManager = OpenRCT2::GetContext()->GetUiContext()->GetWindowManager();
windowManager->BroadcastIntent(Intent(INTENT_ACTION_UPDATE_CASH));

View File

@ -90,17 +90,17 @@ GameActions::Result ScenarioSetSettingAction::Execute() const
WindowInvalidateByClass(WindowClass::BottomToolbar);
break;
case ScenarioSetSetting::InitialLoan:
gBankLoan = std::clamp<money64>(_value, 0.00_GBP, 5000000.00_GBP);
gameState.MaxBankLoan = std::max(gBankLoan, gameState.MaxBankLoan);
gameState.BankLoan = std::clamp<money64>(_value, 0.00_GBP, 5000000.00_GBP);
gameState.MaxBankLoan = std::max(gameState.BankLoan, gameState.MaxBankLoan);
WindowInvalidateByClass(WindowClass::Finances);
break;
case ScenarioSetSetting::MaximumLoanSize:
gameState.MaxBankLoan = std::clamp<money64>(_value, 0.00_GBP, 5000000.00_GBP);
gBankLoan = std::min(gBankLoan, gameState.MaxBankLoan);
gameState.BankLoan = std::min(gameState.BankLoan, gameState.MaxBankLoan);
WindowInvalidateByClass(WindowClass::Finances);
break;
case ScenarioSetSetting::AnnualInterestRate:
gBankLoanInterestRate = std::clamp<uint8_t>(_value, 0, MaxBankLoanInterestRate);
gameState.BankLoanInterestRate = std::clamp<uint8_t>(_value, 0, MaxBankLoanInterestRate);
WindowInvalidateByClass(WindowClass::Finances);
break;
case ScenarioSetSetting::ForbidMarketingCampaigns:

View File

@ -577,7 +577,7 @@ static int32_t ConsoleCommandGet(InteractiveConsole& console, const arguments_t&
}
else if (argv[0] == "current_loan")
{
console.WriteFormatLine("current_loan %d", gBankLoan / 10);
console.WriteFormatLine("current_loan %d", gameState.BankLoan / 10);
}
else if (argv[0] == "max_loan")
{

View File

@ -39,8 +39,6 @@ static constexpr int32_t dword_988E60[static_cast<int32_t>(ExpenditureType::Coun
1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0,
};
money64 gBankLoan;
uint8_t gBankLoanInterestRate;
money64 gCurrentExpenditure;
money64 gCurrentProfit;
money64 gHistoricalProfit;
@ -138,16 +136,18 @@ void FinancePayResearch()
*/
void FinancePayInterest()
{
if (GetGameState().ParkFlags & PARK_FLAGS_NO_MONEY)
const auto& gameState = GetGameState();
if (gameState.ParkFlags & PARK_FLAGS_NO_MONEY)
{
return;
}
// This variable uses the 64-bit type as the computation below can involve multiplying very large numbers
// that will overflow money64 if the loan is greater than (1 << 31) / (5 * current_interest_rate)
const money64 current_loan = gBankLoan;
const auto current_interest_rate = gBankLoanInterestRate;
const money64 interest_to_pay = (GetGameState().ParkFlags & PARK_FLAGS_RCT1_INTEREST)
const money64 current_loan = gameState.BankLoan;
const auto current_interest_rate = gameState.BankLoanInterestRate;
const money64 interest_to_pay = (gameState.ParkFlags & PARK_FLAGS_RCT1_INTEREST)
? (current_loan / 2400)
: (current_loan * 5 * current_interest_rate) >> 14;
@ -229,12 +229,12 @@ void FinanceInit()
gameState.InitialCash = 10000.00_GBP; // Cheat detection
gameState.Cash = 10000.00_GBP;
gBankLoan = 10000.00_GBP;
gameState.BankLoan = 10000.00_GBP;
gameState.MaxBankLoan = 20000.00_GBP;
gHistoricalProfit = 0;
gBankLoanInterestRate = 10;
gameState.BankLoanInterestRate = 10;
gameState.ParkValue = 0;
gCompanyValue = 0;
gameState.ScenarioCompletedCompanyValue = MONEY64_UNDEFINED;
@ -270,7 +270,7 @@ void FinanceUpdateDailyProfit()
current_profit -= research_cost_table[level];
// Loan costs
auto current_loan = gBankLoan;
auto current_loan = gameState.BankLoan;
current_profit -= current_loan / 600;
// Ride costs
@ -302,7 +302,7 @@ money64 FinanceGetInitialCash()
money64 FinanceGetCurrentLoan()
{
return gBankLoan;
return GetGameState().BankLoan;
}
money64 FinanceGetMaximumLoan()

View File

@ -38,8 +38,6 @@ constexpr uint8_t MaxBankLoanInterestRate = 255;
extern const money64 research_cost_table[RESEARCH_FUNDING_COUNT];
extern money64 gBankLoan;
extern uint8_t gBankLoanInterestRate;
extern money64 gCurrentExpenditure;
extern money64 gCurrentProfit;

View File

@ -803,9 +803,9 @@ namespace OpenRCT2
auto& park = GetContext()->GetGameState()->GetPark();
cs.ReadWrite(park.Name);
cs.ReadWrite(gameState.Cash);
cs.ReadWrite(gBankLoan);
cs.ReadWrite(gameState.BankLoan);
cs.ReadWrite(gameState.MaxBankLoan);
cs.ReadWrite(gBankLoanInterestRate);
cs.ReadWrite(gameState.BankLoanInterestRate);
cs.ReadWrite(gameState.ParkFlags);
if (version <= 18)
{

View File

@ -1396,10 +1396,10 @@ namespace RCT1
gConstructionRightsPrice = ToMoney64(_s4.ConstructionRightsPrice);
gameState.Cash = ToMoney64(_s4.Cash);
gBankLoan = ToMoney64(_s4.Loan);
gameState.BankLoan = ToMoney64(_s4.Loan);
gameState.MaxBankLoan = ToMoney64(_s4.MaxLoan);
// It's more like 1.33%, but we can only use integers. Can be fixed once we have our own save format.
gBankLoanInterestRate = 1;
gameState.BankLoanInterestRate = 1;
gameState.InitialCash = ToMoney64(_s4.Cash);
gCompanyValue = ToMoney64(_s4.CompanyValue);

View File

@ -261,7 +261,7 @@ namespace RCT2
ImportEntities();
gameState.InitialCash = ToMoney64(_s6.InitialCash);
gBankLoan = ToMoney64(_s6.CurrentLoan);
gameState.BankLoan = ToMoney64(_s6.CurrentLoan);
gameState.ParkFlags = _s6.ParkFlags & ~PARK_FLAGS_NO_MONEY_SCENARIO;
@ -411,7 +411,7 @@ namespace RCT2
// Pad01358842
ImportResearchList(gameState);
gameState.MapBaseZ = _s6.MapBaseZ;
gBankLoanInterestRate = _s6.CurrentInterestRate;
gameState.BankLoanInterestRate = _s6.CurrentInterestRate;
// Pad0135934B
// Preserve compatibility with vanilla RCT2's save format.
gameState.ParkEntrances.clear();

View File

@ -105,7 +105,7 @@ void ScenarioReset(GameState_t& gameState)
gameState.ParkRating = park.CalculateParkRating();
gameState.ParkValue = park.CalculateParkValue();
gCompanyValue = park.CalculateCompanyValue();
gHistoricalProfit = gameState.InitialCash - gBankLoan;
gHistoricalProfit = gameState.InitialCash - gameState.BankLoan;
gameState.Cash = gameState.InitialCash;
{
@ -820,7 +820,7 @@ ObjectiveStatus Objective::CheckRepayLoanAndParkValue() const
{
const auto& gameState = GetGameState();
money64 parkValue = gameState.ParkValue;
money64 currentLoan = gBankLoan;
money64 currentLoan = gameState.BankLoan;
if (currentLoan <= 0 && parkValue >= Currency)
{

View File

@ -86,15 +86,17 @@ namespace OpenRCT2::Scripting
money64 ScPark::bankLoan_get() const
{
return gBankLoan;
return GetGameState().BankLoan;
}
void ScPark::bankLoan_set(money64 value)
{
ThrowIfGameStateNotMutable();
if (gBankLoan != value)
auto& gameState = GetGameState();
if (gameState.BankLoan != value)
{
gBankLoan = value;
gameState.BankLoan = value;
auto intent = Intent(INTENT_ACTION_UPDATE_CASH);
ContextBroadcastIntent(&intent);
}

View File

@ -496,7 +496,9 @@ money64 Park::CalculateRideValue(const Ride& ride) const
money64 Park::CalculateCompanyValue() const
{
auto result = GetGameState().ParkValue - gBankLoan;
const auto& gameState = GetGameState();
auto result = gameState.ParkValue - gameState.BankLoan;
// Clamp addition to prevent overflow
result = AddClamp_money64(result, FinanceGetCurrentCash());
@ -753,7 +755,7 @@ void Park::UpdateHistories()
// Update park rating, guests in park and current cash history
HistoryPushRecord<uint8_t, 32>(gameState.ParkRatingHistory, gameState.ParkRating / 4);
HistoryPushRecord<uint32_t, 32>(gGuestsInParkHistory, gameState.NumGuestsInPark);
HistoryPushRecord<money64, std::size(gCashHistory)>(gCashHistory, FinanceGetCurrentCash() - gBankLoan);
HistoryPushRecord<money64, std::size(gCashHistory)>(gCashHistory, FinanceGetCurrentCash() - gameState.BankLoan);
// Update weekly profit history
auto currentWeeklyProfit = gameState.WeeklyProfitAverageDividend;