1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-17 20:13:07 +01:00

Merge remote-tracking branch 'upstream/develop' into new-save-format

This commit is contained in:
Gymnasiast
2021-09-29 19:10:01 +02:00
13 changed files with 265 additions and 171 deletions

View File

@@ -804,6 +804,8 @@
C8D612EB56BD4214BEC0F7FF /* GroupVector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4D523B8782E4C458AF1490D /* GroupVector.hpp */; };
B2F44E535BD14A03BE8B9D14 /* ZipStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F28A181D311D4E078FDB090C /* ZipStream.hpp */; };
7CDC7EE9B12E40FB9FE78546 /* Crypt.OpenRCT2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4248E4E4394842D4AF6119DA /* Crypt.OpenRCT2.cpp */; };
4653963391E945D397BCCA0C /* ChangeMapSizeAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76CE81CEAF7F4538976F7C4C /* ChangeMapSizeAction.cpp */; };
F1BE1CB5525C4FF794A3F3CE /* ChangeMapSizeAction.h in Headers */ = {isa = PBXBuildFile; fileRef = C49050C073DB4CB980E1EC5A /* ChangeMapSizeAction.h */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -1911,6 +1913,8 @@
F4D523B8782E4C458AF1490D /* GroupVector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = GroupVector.hpp; path = src/openrct2/core/GroupVector.hpp; sourceTree = SOURCE_ROOT; };
F28A181D311D4E078FDB090C /* ZipStream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ZipStream.hpp; path = src/openrct2/core/ZipStream.hpp; sourceTree = SOURCE_ROOT; };
4248E4E4394842D4AF6119DA /* Crypt.OpenRCT2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Crypt.OpenRCT2.cpp; path = src/openrct2/core/Crypt.OpenRCT2.cpp; sourceTree = SOURCE_ROOT; };
76CE81CEAF7F4538976F7C4C /* ChangeMapSizeAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChangeMapSizeAction.cpp; path = src/openrct2/actions/ChangeMapSizeAction.cpp; sourceTree = SOURCE_ROOT; };
C49050C073DB4CB980E1EC5A /* ChangeMapSizeAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChangeMapSizeAction.h; path = src/openrct2/actions/ChangeMapSizeAction.h; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -2227,6 +2231,8 @@
66A10FC3257F1E2E00DD651A /* WaterRaiseAction.h */,
66A10FC7257F1E2E00DD651A /* WaterSetHeightAction.cpp */,
66A10FC8257F1E2F00DD651A /* WaterSetHeightAction.h */,
76CE81CEAF7F4538976F7C4C /* ChangeMapSizeAction.cpp */,
C49050C073DB4CB980E1EC5A /* ChangeMapSizeAction.h */,
);
path = actions;
sourceTree = "<group>";
@@ -3668,6 +3674,7 @@
E6C71B6165224F65AA87E65B /* RideUseSystem.h in Headers */,
C8D612EB56BD4214BEC0F7FF /* GroupVector.hpp in Headers */,
B2F44E535BD14A03BE8B9D14 /* ZipStream.hpp in Headers */,
F1BE1CB5525C4FF794A3F3CE /* ChangeMapSizeAction.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -4492,6 +4499,7 @@
6C90BE01D190493295071B23 /* ScTile.cpp in Sources */,
258C212125F84FA2B4C3BCAE /* RideUseSystem.cpp in Sources */,
7CDC7EE9B12E40FB9FE78546 /* Crypt.OpenRCT2.cpp in Sources */,
4653963391E945D397BCCA0C /* ChangeMapSizeAction.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@@ -533,11 +533,11 @@ STR_1144 :Ei pysty rakentamaan/siirtämään tämän laitteen/kohteen sisää
STR_1145 :Ei pysty rakentamaan/siirtämään tämän laitteen/kohteen uloskäyntiä…
STR_1146 :Sisäänkäyntiä ei ole vielä rakennettu
STR_1147 :Uloskäyntiä ei ole vielä rakennettu
STR_1148 :Neljänneskuorma
STR_1149 :Puolikas kuorma
STR_1150 :Kolmeneljäsosakuorma
STR_1151 :Täysi kuorma
STR_1152 :Mikä tahansa kuorma
STR_1148 :Neljänneslasti
STR_1149 :Puolikas lasti
STR_1150 :Kolmeneljäsosalasti
STR_1151 :Täysi lasti
STR_1152 :Mikä tahansa lasti
STR_1153 :Korkeusmerkinnät radoissa
STR_1154 :Korkeusmerkinnät maanpinnassa
STR_1155 :Korkeusmerkinnät poluissa
@@ -548,8 +548,8 @@ STR_1159 :Sijoita maisemointeja, kasveja ja somisteita
STR_1160 :Luo/säädä järviä ja vettä
STR_1161 :Tätä ei voi sijoittaa tähän…
STR_1162 :{OUTLINE}{TOPAZ}{STRINGID}
STR_1163 :{STRINGID}{NEWLINE}(Oikea klikkaus muokkaa)
STR_1164 :{STRINGID}{NEWLINE}(Oikea klikkaus poistaa)
STR_1163 :{STRINGID}{NEWLINE}(Muokkaa oikealla painikkeella)
STR_1164 :{STRINGID}{NEWLINE}(Poista oikealla painikkeella)
STR_1165 :{STRINGID} - {STRINGID} {COMMA16}
STR_1166 :Veden tasoa ei voi laskea tässä…
STR_1167 :Veden tasoa ei voi nostaa tässä…
@@ -873,7 +873,7 @@ STR_1482 :“Voin pahoin”
STR_1483 :“Voin erittäin pahoin”
STR_1484 :“Tahdon mennä johonkin jännittävämpään kuin {STRINGID}”
STR_1485 :“{STRINGID} näyttää liian hurjalta minulle”
STR_1486 :“En ole nauttinut {STRINGID} loppuun vielä”
STR_1486 :“Minulla on vielä {STRINGID} jäljellä”
STR_1487 :“Pelkästään laitteen {STRINGID} katsominen saa minut voimaan pahoin”
STR_1488 :“En aio maksaa noin paljon laitteesta {STRINGID}”
STR_1489 :“Haluan kotiin”
@@ -898,7 +898,7 @@ STR_1507 :“En löydä puiston uloskäyntiä”
STR_1508 :“Tahdon pois kohteesta {STRINGID}”
STR_1509 :“Tahdon ulos kohteesta {STRINGID}”
STR_1510 :“En mene kohteeseen {STRINGID} - se ei ole turvallinen”
STR_1511 :“Tämä tie on kuvottava”
STR_1511 :“Tämä polku on kuvottava”
STR_1512 :“Täällä on liikaa tungosta”
STR_1513 :“Täällä on todella paljon ilkivaltaa”
STR_1514 :“Mahtava maisema!”
@@ -918,7 +918,7 @@ STR_1527 :“Tämä hattara kojusta {STRINGID} on todella reilun hintainen”
STR_1528 :
STR_1529 :
STR_1530 :
STR_1531 :“Tämä pitsa kojusta {STRINGID} on todella reilun hintainen”
STR_1531 :“Tämä pizza kojusta {STRINGID} on todella reilun hintainen”
STR_1532 :
STR_1533 :“Tämä popcorn kojusta {STRINGID} on todella reilun hintainen”
STR_1534 :“Tämä nakkisämpylä kojusta {STRINGID} on todella reilun hintainen”
@@ -939,32 +939,32 @@ STR_1548 :
STR_1549 :
STR_1550 :“Vau!”
STR_1551 :“Minulla on outo fiilis että joku katselee minua”
STR_1552 :“En maksa noin paljon ilmapallosta kojussa {STRINGID}”
STR_1553 :“En maksa noin paljon pehmolelusta kojussa {STRINGID}”
STR_1554 :“En maksa noin paljon puiston kartasta kojussa {STRINGID}”
STR_1552 :“En maksa noin paljon ilmapallosta kojusta {STRINGID}”
STR_1553 :“En maksa noin paljon pehmolelusta kojusta {STRINGID}”
STR_1554 :“En maksa noin paljon puiston kartasta kojusta {STRINGID}”
STR_1555 :“En maksa noin paljon kuvasta laitteesta {STRINGID}”
STR_1556 :“En maksa noin paljon sateenvarjosta kojussa {STRINGID}”
STR_1557 :“En maksa noin paljon juomasta kojussa {STRINGID}”
STR_1558 :“En maksa noin paljon hampurilaisesta kojussa {STRINGID}”
STR_1559 :“En maksa noin paljon ranskalaisista kojussa {STRINGID}”
STR_1560 :“En maksa noin paljon jäätelöstä kojussa {STRINGID}”
STR_1561 :“En maksa noin paljon hattarasta kojussa {STRINGID}”
STR_1556 :“En maksa noin paljon sateenvarjosta kojusta {STRINGID}”
STR_1557 :“En maksa noin paljon juomasta kojusta {STRINGID}”
STR_1558 :“En maksa noin paljon hampurilaisesta kojusta {STRINGID}”
STR_1559 :“En maksa noin paljon ranskalaisista kojusta {STRINGID}”
STR_1560 :“En maksa noin paljon jäätelöstä kojusta {STRINGID}”
STR_1561 :“En maksa noin paljon hattarasta kojusta {STRINGID}”
STR_1562 :
STR_1563 :
STR_1564 :
STR_1565 :“En maksa noin paljon pitsasta kojussa {STRINGID}”
STR_1565 :“En maksa noin paljon pizzasta kojusta {STRINGID}”
STR_1566 :
STR_1567 :“En maksa noin paljon popcornista kojussa {STRINGID}”
STR_1568 :“En maksa noin paljon nakkisämpylästä kojussa {STRINGID}”
STR_1569 :“En maksa noin paljon lonkerosta kojussa {STRINGID}”
STR_1570 :“En maksa noin paljon hatusta kojussa {STRINGID}”
STR_1571 :“En maksa noin paljon toffeeomenasta kojussa {STRINGID}”
STR_1572 :“En maksa noin paljon t-paidasta kojussa {STRINGID}”
STR_1573 :“En maksa noin paljon donitsista kojussa {STRINGID}”
STR_1574 :“En maksa noin paljon kahvista kojussa {STRINGID}”
STR_1567 :“En maksa noin paljon popcornista kojusta {STRINGID}”
STR_1568 :“En maksa noin paljon nakkisämpylästä kojusta {STRINGID}”
STR_1569 :“En maksa noin paljon lonkerosta kojusta {STRINGID}”
STR_1570 :“En maksa noin paljon hatusta kojusta {STRINGID}”
STR_1571 :“En maksa noin paljon toffeeomenasta kojusta {STRINGID}”
STR_1572 :“En maksa noin paljon t-paidasta kojusta {STRINGID}”
STR_1573 :“En maksa noin paljon donitsista kojusta {STRINGID}”
STR_1574 :“En maksa noin paljon kahvista kojusta {STRINGID}”
STR_1575 :
STR_1576 :“En maksa noin paljon paistetusta kanasta kojussa {STRINGID}”
STR_1577 :“En maksa noin paljon limsasta kojussa {STRINGID}”
STR_1576 :“En maksa noin paljon paistetusta kanasta kojusta {STRINGID}”
STR_1577 :“En maksa noin paljon limsasta kojusta {STRINGID}”
STR_1578 :
STR_1579 :
STR_1580 :
@@ -986,7 +986,7 @@ STR_1595 :“Tämä lihapullakeitto kojusta {STRINGID} on todella reilun hint
STR_1596 :“Tämä hedelmämehu kojusta {STRINGID} on todella reilun hintainen”
STR_1597 :“Tämä soijamaito kojusta {STRINGID} on todella reilun hintainen”
STR_1598 :“Tämä sujongkwa kojusta {STRINGID} on todella reilun hintainen”
STR_1599 :“Tämä pantonki kojusta {STRINGID} on todella reilun hintainen”
STR_1599 :“Tämä voileipä kojusta {STRINGID} on todella reilun hintainen”
STR_1600 :“Tämä keksi kojusta {STRINGID} on todella reilun hintainen”
STR_1601 :
STR_1602 :
@@ -1006,24 +1006,24 @@ STR_1615 :
STR_1616 :“En maksa noin paljon kuvasta laitteesta {STRINGID}”
STR_1617 :“En maksa noin paljon kuvasta laitteesta {STRINGID}”
STR_1618 :“En maksa noin paljon kuvasta laitteesta {STRINGID}”
STR_1619 :“En maksa noin paljon rinkelistä kojussa {STRINGID}”
STR_1620 :“En maksa noin paljon kaakaosta kojussa {STRINGID}”
STR_1621 :“En maksa noin paljon jääteestä kojussa {STRINGID}”
STR_1622 :“En maksa noin paljon tippaleivästä kojussa {STRINGID}”
STR_1623 :“En maksa noin paljon aurinkolaseista kojussa {STRINGID}”
STR_1624 :“En maksa noin paljon häränlihanuudeleista kojussa {STRINGID}”
STR_1625 :“En maksa noin paljon paistetuista riisinuudeleista kojussa {STRINGID}”
STR_1626 :“En maksa noin paljon wontonkeitosta kojussa {STRINGID}”
STR_1627 :“En maksa noin paljon lihapullakeitosta kojussa {STRINGID}”
STR_1628 :“En maksa noin paljon hedelmämehusta kojussa {STRINGID}”
STR_1629 :“En maksa noin paljon soijamaidosta kojussa {STRINGID}”
STR_1630 :“En maksa noin paljon sujongkwasta kojussa {STRINGID}”
STR_1631 :“En maksa noin paljon patongista kojussa {STRINGID}”
STR_1632 :“En maksa noin paljon keksistä kojussa {STRINGID}”
STR_1619 :“En maksa noin paljon rinkelistä kojusta {STRINGID}”
STR_1620 :“En maksa noin paljon kaakaosta kojusta {STRINGID}”
STR_1621 :“En maksa noin paljon jääteestä kojusta {STRINGID}”
STR_1622 :“En maksa noin paljon tippaleivästä kojusta {STRINGID}”
STR_1623 :“En maksa noin paljon aurinkolaseista kojusta {STRINGID}”
STR_1624 :“En maksa noin paljon häränlihanuudeleista kojusta {STRINGID}”
STR_1625 :“En maksa noin paljon paistetuista riisinuudeleista kojusta {STRINGID}”
STR_1626 :“En maksa noin paljon wontonkeitosta kojusta {STRINGID}”
STR_1627 :“En maksa noin paljon lihapullakeitosta kojusta {STRINGID}”
STR_1628 :“En maksa noin paljon hedelmämehusta kojusta {STRINGID}”
STR_1629 :“En maksa noin paljon soijamaidosta kojusta {STRINGID}”
STR_1630 :“En maksa noin paljon sujongkwasta kojusta {STRINGID}”
STR_1631 :“En maksa noin paljon voileivästä kojusta {STRINGID}”
STR_1632 :“En maksa noin paljon keksistä kojusta {STRINGID}”
STR_1633 :
STR_1634 :
STR_1635 :
STR_1636 :“En maksa noin paljon grillimakkarasta kojussa {STRINGID}”
STR_1636 :“En maksa noin paljon grillimakkarasta kojusta {STRINGID}”
STR_1637 :
STR_1638 :
STR_1639 :
@@ -1199,7 +1199,7 @@ STR_1816 :Valitse kävijälistan näyttämä tietotyyppi
STR_1817 :({COMMA32})
STR_1818 :{WINDOW_COLOUR_2}Kaikki kävijät
STR_1819 :{WINDOW_COLOUR_2}Kaikki kävijät (yhteenvetona)
STR_1820 :{WINDOW_COLOUR_2}Kävijät {STRINGID}
STR_1820 :{WINDOW_COLOUR_2}Kävijät: {STRINGID}
STR_1821 :{WINDOW_COLOUR_2}Kävijät, jotka ajattelevat {SMALLFONT}{STRINGID}
STR_1822 :{WINDOW_COLOUR_2}Kävijöiden ajatukset kohteesta {POP16}{STRINGID}
STR_1823 :Näytä kävijöiden ajatukset tästä laitteesta/kohteesta
@@ -1364,34 +1364,34 @@ STR_1984 :{WINDOW_COLOUR_2}Paistetun kanan hinta:
STR_1985 :{WINDOW_COLOUR_2}Limsan hinta:
STR_1986 :{WINDOW_COLOUR_2}
STR_1987 :{WINDOW_COLOUR_2}
STR_1988 :ilmapalloani
STR_1989 :pehmoleluani
STR_1990 :puiston karttaani
STR_1991 :valokuvaani
STR_1992 :sateenvarjoani
STR_1993 :juomaani
STR_1994 :hampurilaistani
STR_1995 :ranskalaisiani
STR_1996 :jäätelöäni
STR_1997 :hattaraani
STR_1998 :tyhjää tölkkiäni
STR_1999 :roskaani
STR_2000 :tyhjää hampurilaisrasiaani
STR_2001 :pizzaani
STR_2002 :kuponkiani
STR_2003 :popcorniani
STR_2004 :nakkisämpylääni
STR_2005 :lonkeroani
STR_2006 :hattuani
STR_2007 :toffeeomenaani
STR_2008 :t-paitaani
STR_2009 :donitsiani
STR_2010 :kahviani
STR_2011 :tyhjää kuppiani
STR_2012 :paistettua kanaani
STR_2013 :limsaani
STR_2014 :tyhjää rasiaani
STR_2015 :tyhjää pulloani
STR_1988 :ilmapallo
STR_1989 :pehmolelu
STR_1990 :puiston kartta
STR_1991 :valokuva
STR_1992 :sateenvarjo
STR_1993 :juoma
STR_1994 :hampurilainen
STR_1995 :ranskalaisannos
STR_1996 :jäätelö
STR_1997 :hattara
STR_1998 :tyhjä tölkki
STR_1999 :roska
STR_2000 :tyhjä hampurilaisrasia
STR_2001 :pizza
STR_2002 :kuponki
STR_2003 :popcorn
STR_2004 :nakkisämpylä
STR_2005 :lonkero
STR_2006 :hattu
STR_2007 :toffeeomena
STR_2008 :t-paita
STR_2009 :donitsi
STR_2010 :kahvi
STR_2011 :tyhjä kuppi
STR_2012 :paistettu kana
STR_2013 :limsa
STR_2014 :tyhjä rasia
STR_2015 :tyhjä pullo
STR_2016 :Ilmapalloja
STR_2017 :Pehmoleluja
STR_2018 :Puistokarttoja
@@ -1488,32 +1488,32 @@ STR_2111 :{WINDOW_COLOUR_2}Lihapullakeiton hinta:
STR_2112 :{WINDOW_COLOUR_2}Hedelmämehun hinta:
STR_2113 :{WINDOW_COLOUR_2}Soijapapumaidon hinta:
STR_2114 :{WINDOW_COLOUR_2}Sujongkwan hinta:
STR_2115 :{WINDOW_COLOUR_2}Patongin hinta:
STR_2115 :{WINDOW_COLOUR_2}Voileivän hinta:
STR_2116 :{WINDOW_COLOUR_2}Piparin hinta:
STR_2117 :{WINDOW_COLOUR_2}
STR_2118 :{WINDOW_COLOUR_2}
STR_2119 :{WINDOW_COLOUR_2}
STR_2120 :{WINDOW_COLOUR_2}Grillimakkaran hinta:
STR_2121 :{WINDOW_COLOUR_2}
STR_2125 :rinkeliäni
STR_2126 :kaakaotani
STR_2127 :jääteetäni
STR_2128 :tippaleipääni
STR_2129 :aurinkolasejani
STR_2130 :häränlihanuudeleitani
STR_2131 :paistettuja riisinuudeleitani
STR_2132 :wontonkeittoani
STR_2133 :lihapullakeittoani
STR_2134 :hedelmämehuani
STR_2135 :soijapapumaitoani
STR_2136 :sujongkwaani
STR_2137 :patonkiani
STR_2138 :pipariani
STR_2139 :tyhjää kulhoani
STR_2140 :tyhjää juomatölkkiäni
STR_2141 :tyhjää mehukuppiani
STR_2142 :grillimakkaraani
STR_2143 :tyhjää kulhoani
STR_2125 :rinkeli
STR_2126 :kaakao
STR_2127 :jäätee
STR_2128 :tippaleipä
STR_2129 :aurinkolasi
STR_2130 :häränlihanuudeli
STR_2131 :paistettu riisinuudeli
STR_2132 :wontonkeitto
STR_2133 :lihapullakeitto
STR_2134 :hedelmämehu
STR_2135 :soijapapumaito
STR_2136 :sujongkwa
STR_2137 :voileipä
STR_2138 :pipari
STR_2139 :tyhjää kulho
STR_2140 :tyhjää juomatölkki
STR_2141 :tyhjää mehukuppi
STR_2142 :grillimakkara
STR_2143 :tyhjää kulho
STR_2147 :Rinkeleitä
STR_2148 :Kaakaoita
STR_2149 :Jääteitä
@@ -1526,7 +1526,7 @@ STR_2155 :Lihapullakeittoja
STR_2156 :Hedelmämehuja
STR_2157 :Soijapapumaitoja
STR_2158 :Sujongkwoita
STR_2159 :Patonkeja
STR_2159 :Voileipiä
STR_2160 :Pipareita
STR_2161 :Tyhjiä kulhoja
STR_2162 :Tyhjiä juomatölkkejä
@@ -1545,7 +1545,7 @@ STR_2177 :lihapullakeittoa
STR_2178 :hedelmämehu
STR_2179 :soijapapumaitoa
STR_2180 :sujongkwaa
STR_2181 :patonki
STR_2181 :voileipä
STR_2182 :pipari
STR_2183 :tyhjä kulho
STR_2184 :tyhjä juomatölkki
@@ -1564,7 +1564,7 @@ STR_2199 :Lihapullakeitto
STR_2200 :Hedelmämehu
STR_2201 :Soijapapumaito
STR_2202 :Sujongkwa
STR_2203 :Patonki
STR_2203 :Voileipä
STR_2204 :Pipari
STR_2205 :Tyhjä kulho
STR_2206 :Tyhjä juomatölkki
@@ -1579,7 +1579,7 @@ STR_2214 :Rakentaminen ei ole mahdollista pelin ollessa pysäytettynä!
STR_2215 :{STRINGID}{NEWLINE}({STRINGID})
STR_2216 :{WINDOW_COLOUR_2}{COMMA16}°C
STR_2217 :{WINDOW_COLOUR_2}{COMMA16}°F
STR_2218 :{RED}{STRINGID} laitteessa {STRINGID} ei ole vielä palautunut {STRINGID}lle!{NEWLINE}Tarkista, onko se jumissa tai juuttunut
STR_2218 :{RED}{STRINGID} laitteessa {STRINGID} ei ole vielä palannut {STRINGID}lle!{NEWLINE}Tarkista, onko se jumissa tai juuttunut
STR_2219 :{RED}{COMMA16} henkilöä on kuollut laitteen {STRINGID} onnettomuudessa
STR_2220 :{WINDOW_COLOUR_2}Puiston taso: {BLACK}{COMMA16}
STR_2221 :Puiston taso: {COMMA16}
@@ -1740,17 +1740,17 @@ STR_2382 :Maa
STR_2383 :Vesi
STR_2384 :{WINDOW_COLOUR_2}Tavoitteesi:
STR_2385 :{BLACK}Ei mitään
STR_2386 :{BLACK}Puistossasi tulee olla vähintään {COMMA16} kävijää {MONTHYEAR} loppuun mennessä ja puiston tason tulee olla vähintään 600
STR_2387 :{BLACK}Saavuta puiston arvoksi vähintään {POP16}{POP16}{CURRENCY} vuoden {PUSH16}{PUSH16}{PUSH16}{MONTHYEAR} loppuun mennessä
STR_2386 :{BLACK}Puistossasi tulee olla vähintään {COMMA16} kävijää {MONTHYEAR} loppuun mennessä, ja puiston tason tulee olla vähintään 600
STR_2387 :{BLACK}Saavuta puiston arvoksi vähintään {POP16}{POP16}{CURRENCY} {PUSH16}{PUSH16}{PUSH16}{MONTHYEAR} loppuun mennessä
STR_2388 :{BLACK}Pidä hauskaa!
STR_2389 :{BLACK}Rakenna niin hyvä {STRINGID} kuin voit!
STR_2390 :{BLACK}Puistossasi tulee olla 10 eri tyyppistä toiminnassa olevaa vuoristorataa joiden huvitustaso on vähintään 6.00
STR_2391 :{BLACK}Puistossasi tulee olla vähintään {COMMA16} kävijää, eikä puiston taso saa pudota hetkeksikään alle 700:n!
STR_2392 :{BLACK}Sinun tulee saada {POP16}{POP16}{CURRENCY} kuukausituloja laitteiden lipputuloista
STR_2392 :{BLACK}Sinun tulee ansaita {POP16}{POP16}{CURRENCY} kuukausituloja laitteiden lipputuloista
STR_2393 :{BLACK}Puistossasi tulee olla 10 eri tyyppistä toiminnassa olevaa vuoristorataa, joiden pitää olla vähintään {LENGTH} pitkiä ja joiden huvitustaso on vähintään 7.00
STR_2394 :{BLACK}Viimeistele puiston 5 osittain rakennettua vuoristorataa niin, että jokaisen huvitustaso on vähintään {POP16}{POP16}{COMMA2DP32}
STR_2395 :{BLACK}Maksa lainasi takaisin ja saavuta puistolle arvo {POP16}{POP16}{CURRENCY}
STR_2396 :{BLACK}Sinun tulee saada {POP16}{POP16}{CURRENCY} kuukausituloja ruoan, juomien ja tavaroiden myynnistä
STR_2395 :{BLACK}Maksa lainasi takaisin, ja saavuta puiston arvoksi vähintään {POP16}{POP16}{CURRENCY}
STR_2396 :{BLACK}Sinun tulee ansaita {POP16}{POP16}{CURRENCY} kuukausituloja ruoan, juomien ja tavaroiden myynnistä
STR_2397 :Ei mitään
STR_2398 :Kävijöiden määrä tiettynä päivänä
STR_2399 :Puiston arvo tiettynä päivänä
@@ -1792,12 +1792,12 @@ STR_2436 :1 viikko
STR_2443 :{WINDOW_COLOUR_2}Viikottainen kustannus: {BLACK}{CURRENCY2DP}
STR_2444 :{WINDOW_COLOUR_2}Kokonaiskustannus: {BLACK}{CURRENCY2DP}
STR_2445 :Aloita tämä markkinointikampanja
STR_2446 :{YELLOW}Markkinointikampanjasi ilmaiseen sisäänpääsyyn on loppunut
STR_2447 :{YELLOW}Markkinointikampanjasi ilmaiseen pääsyyn laitteeseen {STRINGID} on loppunut
STR_2448 :{YELLOW}Markkinointikampanjasi sisäänpääsyyn puoleen hintaan on loppunut
STR_2449 :{YELLOW}Markkinointikampanjasi ilmaisia {STRINGID} varten on loppunut
STR_2450 :{YELLOW}Mainoskampanjasi puistolle on loppunut
STR_2451 :{YELLOW}Mainoskampanjasi laitteelle {STRINGID} on loppunut
STR_2446 :{YELLOW}Markkinointikampanjasi ilmaiseen sisäänpääsyyn on päättynyt
STR_2447 :{YELLOW}Markkinointikampanjasi ilmaiseen pääsyyn laitteeseen {STRINGID} on päättynyt
STR_2448 :{YELLOW}Markkinointikampanjasi sisäänpääsyyn puoleen hintaan on päättynyt
STR_2449 :{YELLOW}Markkinointikampanjasi ilmaisia {STRINGID} varten on päättynyt
STR_2450 :{YELLOW}Mainoskampanjasi puistolle on päättynyt
STR_2451 :{YELLOW}Mainoskampanjasi laitteelle {STRINGID} on päättynyt
STR_2452 :{WINDOW_COLOUR_2}Varat (miinus velka): {BLACK}{CURRENCY2DP}
STR_2453 :{WINDOW_COLOUR_2}Varat (miinus velka): {RED}{CURRENCY2DP}
STR_2454 :{BLACK}{CURRENCY2DP} -
@@ -2000,8 +2000,8 @@ STR_2793 :(Suorittanut {STRINGID})
STR_2794 :{WINDOW_COLOUR_2}Suorittanut: {BLACK}{STRINGID}{NEWLINE}{WINDOW_COLOUR_2}Yhtiön arvolla: {BLACK}{CURRENCY}
STR_2795 :Järjestä
STR_2796 :Järjestä laitelistaus valitun tietotyypin mukaan
STR_2797 :Vieritä näkymää kun hiiri on näytön reunassa
STR_2798 :Valitse vieritetäänkö näkymää kun hiiri on näytön reunassa
STR_2797 :Vieritä näkymää kun osoitin on näytön reunassa
STR_2798 :Valitse vieritetäänkö näkymää kun osoitin on näytön reunassa
STR_2799 :Näytä ja aseta näppäinasetukset
STR_2800 :{WINDOW_COLOUR_2}Sisäänpääsyt: {BLACK}{COMMA32}
STR_2801 :{WINDOW_COLOUR_2}Tulot sisäänpääsyistä: {BLACK}{CURRENCY2DP}
@@ -2015,10 +2015,10 @@ STR_2808 :{RED}Kävijät valittavat puistosi ilkivallasta{NEWLINE}Tarkista ja
STR_2809 :{RED}Kävijät ovat nälkäisiä eivätkä löydä paikkaa josta saisi ruokaa
STR_2810 :{RED}Kävijät ovat janoisia eivätkä löydä paikkaa josta saisi juotavaa
STR_2811 :{RED}Kävijät valittavat etteivät löydä vessaa puistostasi
STR_2812 :{RED}Kävijät eksyvät tai jäävät jumiink{NEWLINE}Tarkista polkusi että kävijät löytävä tiensä paikasta toiseen
STR_2813 :{RED}Sisäänpääsyn hinta on liian korkea!{NEWLINE}Laske sisäänpääsyhintaa tai paranna puiston arvoa jotta puistosi houkuttelee enemmän kävijöitä
STR_2812 :{RED}Kävijät eksyvät tai jäävät jumiin{NEWLINE}Tarkista polkuasettelusi, jotta kävijät löytävät tiensä paikasta toiseen
STR_2813 :{RED}Puiston sisäänpääsyhinta on liian korkea!{NEWLINE}Laske sisäänpääsyhintaa tai paranna puiston arvoa jotta puistosi houkuttelee enemmän kävijöitä
STR_2814 :{WINDOW_COLOUR_2}Sotkuisin puisto -palkinto
STR_2815 :{WINDOW_COLOUR_2}Siistein puisto -palkinto
STR_2815 :{WINDOW_COLOUR_2}Puhtain puisto -palkinto
STR_2816 :{WINDOW_COLOUR_2}Parhaimmat vuoristoradat -palkinto
STR_2817 :{WINDOW_COLOUR_2}Paras hinta/laatu-suhde -palkinto
STR_2818 :{WINDOW_COLOUR_2}Kaunein puisto -palkinto
@@ -2035,7 +2035,7 @@ STR_2828 :{WINDOW_COLOUR_2}Häikäisevimmät värivalinnat -palkinto
STR_2829 :{WINDOW_COLOUR_2}Sekavin asettelu -palkinto
STR_2830 :{WINDOW_COLOUR_2}Parhaat lempeät laitteet -palkinto
STR_2831 :{TOPAZ}Puistosi sai ”Maan sotkuisin puisto” -palkinnon!
STR_2832 :{TOPAZ}Puistosi sai ”Maan siistein puisto” -palkinnon!
STR_2832 :{TOPAZ}Puistosi sai ”Maan puhtain puisto” -palkinnon!
STR_2833 :{TOPAZ}Puistosi sai ”Parhaimmat vuoristoradat” -palkinnon!
STR_2834 :{TOPAZ}Puistosi sai ”Maan paras hinta/laatu-suhde” -palkinnon!
STR_2835 :{TOPAZ}Puistosi sai ”Maan kaunein puisto” -palkinnon!
@@ -2051,7 +2051,7 @@ STR_2844 :{TOPAZ}Puistosi sai ”Maan parhaat mukautetut laitteet” -palkinn
STR_2845 :{TOPAZ}Puistosi sai ”Häikäisevimmät värivalinnat” -palkinnon!
STR_2846 :{TOPAZ}Puistosi sai ”Sekavin asettelu” -palkinnon!
STR_2847 :{TOPAZ}Puistosi sai ”Maan parhaat lempeät laitteet” -palkinnon!
STR_2848 :{WINDOW_COLOUR_2}Ei tuoreita palkintoja
STR_2848 :{WINDOW_COLOUR_2}Ei viimeaikaisia palkintoja
STR_2849 :Uusi skenaario asennettiin onnistuneesti
STR_2850 :Uusi ratamalli asennettiin onnistuneesti
STR_2851 :Skenaario on jo asennettu
@@ -2152,7 +2152,7 @@ STR_3062 :Perusvuoristorata
STR_3063 :Vesikanava (vedenalainen rata)
STR_3064 :Aloittelijoiden puistot
STR_3065 :Haastavat puistot
STR_3066 :Asiantuntijoiden puistot
STR_3066 :Vaativat puistot
STR_3067 :“Oikeat” puistot
STR_3068 :Muut puistot
STR_3069 :Yläosa
@@ -3585,7 +3585,7 @@ STR_6377 :{WINDOW_COLOUR_2}Tyyppi: {BLACK}{STRINGID} laitteelle {STRINGID}
STR_6378 :Vastaanotetaan esinelistaa: {INT32} / {INT32}
STR_6379 :Vastaanotettiin epäkelpoja tietoja
STR_6380 :Päivitys saatavilla!
STR_6381 :Liity OpenRCT2 -Discordiin!
STR_6381 :Liity OpenRCT2:n Discordiin!
STR_6382 :Uusi OpenRCT2-versio on saatavilla: {STRING}!
STR_6383 :Avaa lataussivusto
STR_6384 :Lumisade

View File

@@ -16,6 +16,7 @@
- Fix: [#14649] ImageImporter incorrectly remaps colours outside the RCT2 palette.
- Fix: [#14667] “Extreme Hawaiian Island” has unpurchaseable land tiles (original bug).
- Fix: [#15096] Crash when placing entrances in the scenario editor near the map corner.
- Fix: [#15136] Exported SV6 files cause vanilla RCT2 to hang.
- Fix: [#15142] ToonTowner's mine roofs were moved into the pirate theme scenery group instead of the mine theme scenery group.
- Fix: [#15148] Track Designs Manager delete confirmation window doesn't display properly.
- Fix: [#15170] Plugin: incorrect label text alignment.

View File

@@ -18,6 +18,7 @@
#include <openrct2/Game.h>
#include <openrct2/Input.h>
#include <openrct2/OpenRCT2.h>
#include <openrct2/actions/ChangeMapSizeAction.h>
#include <openrct2/actions/LandSetRightsAction.h>
#include <openrct2/actions/PlaceParkEntranceAction.h>
#include <openrct2/actions/PlacePeepSpawnAction.h>
@@ -655,17 +656,8 @@ static void window_map_textinput(rct_window* w, rct_widgetindex widgetIndex, cha
size += 2;
size = std::clamp(size, MINIMUM_MAP_SIZE_TECHNICAL, MAXIMUM_MAP_SIZE_TECHNICAL);
int32_t currentSize = gMapSize;
while (size < currentSize)
{
map_window_decrease_map_size();
currentSize--;
}
while (size > currentSize)
{
map_window_increase_map_size();
currentSize++;
}
auto changeMapSizeAction = ChangeMapSizeAction(size);
GameActions::Execute(&changeMapSizeAction);
w->Invalidate();
}
break;
@@ -1370,17 +1362,8 @@ static void window_map_set_peep_spawn_tool_down(const ScreenCoordsXY& screenCoor
*/
static void map_window_increase_map_size()
{
if (gMapSize >= MAXIMUM_MAP_SIZE_TECHNICAL)
{
context_show_error(STR_CANT_INCREASE_MAP_SIZE_ANY_FURTHER, STR_NONE, {});
return;
}
gMapSize++;
map_extend_boundary_surface();
window_map_init_map();
window_map_centre_on_view_point();
gfx_invalidate_screen();
auto increaseMapSizeAction = ChangeMapSizeAction(gMapSize + 1);
GameActions::Execute(&increaseMapSizeAction);
}
/**
@@ -1389,17 +1372,8 @@ static void map_window_increase_map_size()
*/
static void map_window_decrease_map_size()
{
if (gMapSize < 16)
{
context_show_error(STR_CANT_DECREASE_MAP_SIZE_ANY_FURTHER, STR_NONE, {});
return;
}
gMapSize--;
map_remove_out_of_range_elements();
window_map_init_map();
window_map_centre_on_view_point();
gfx_invalidate_screen();
auto decreaseMapSizeAction = ChangeMapSizeAction(gMapSize - 1);
GameActions::Execute(&decreaseMapSizeAction);
}
static constexpr const uint16_t WaterColour = MapColour(PALETTE_INDEX_195);

View File

@@ -103,6 +103,7 @@ enum class GameCommand : int32_t
GuestSetFlags, // GA
SetDate, // GA
Custom, // GA
ChangeMapSize,
Count,
};

View File

@@ -0,0 +1,77 @@
/*****************************************************************************
* Copyright (c) 2014-2021 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#include "ChangeMapSizeAction.h"
#include "../Context.h"
#include "../drawing/IDrawingEngine.h"
#include "../ui/UiContext.h"
#include "../ui/WindowManager.h"
#include "../windows/Intent.h"
ChangeMapSizeAction::ChangeMapSizeAction(const int32_t targetSize)
: _targetSize(targetSize)
{
}
uint16_t ChangeMapSizeAction::GetActionFlags() const
{
return GameAction::GetActionFlags() | GameActions::Flags::AllowWhilePaused;
}
void ChangeMapSizeAction::Serialise(DataSerialiser& stream)
{
GameAction::Serialise(stream);
stream << DS_TAG(_targetSize);
}
GameActions::Result::Ptr ChangeMapSizeAction::Query() const
{
if (_targetSize >= MAXIMUM_MAP_SIZE_TECHNICAL)
{
return std::make_unique<GameActions::Result>(
GameActions::Status::InvalidParameters, STR_CANT_INCREASE_MAP_SIZE_ANY_FURTHER, STR_NONE);
}
if (_targetSize < 16)
{
return std::make_unique<GameActions::Result>(
GameActions::Status::InvalidParameters, STR_CANT_DECREASE_MAP_SIZE_ANY_FURTHER, STR_NONE);
}
return std::make_unique<GameActions::Result>();
}
GameActions::Result::Ptr ChangeMapSizeAction::Execute() const
{
while (gMapSize != _targetSize)
{
if (_targetSize < gMapSize)
{
gMapSize--;
map_remove_out_of_range_elements();
}
else
{
gMapSize++;
map_extend_boundary_surface();
}
}
auto* ctx = OpenRCT2::GetContext();
auto uiContext = ctx->GetUiContext();
auto* windowManager = uiContext->GetWindowManager();
windowManager->BroadcastIntent(Intent(INTENT_ACTION_MAP));
gfx_invalidate_screen();
return std::make_unique<GameActions::Result>();
}
void ChangeMapSizeAction::AcceptParameters(GameActionParameterVisitor& visitor)
{
visitor.Visit("targetSize", _targetSize);
}

View File

@@ -0,0 +1,30 @@
/*****************************************************************************
* Copyright (c) 2014-2021 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#pragma once
#include "../world/Map.h"
#include "GameAction.h"
DEFINE_GAME_ACTION(ChangeMapSizeAction, GameCommand::ChangeMapSize, GameActions::Result)
{
public:
ChangeMapSizeAction() = default;
ChangeMapSizeAction(const int32_t targetSize);
void AcceptParameters(GameActionParameterVisitor & visitor) override;
uint16_t GetActionFlags() const override;
void Serialise(DataSerialiser & stream) override;
GameActions::Result::Ptr Query() const override;
GameActions::Result::Ptr Execute() const override;
private:
int32_t _targetSize;
};

View File

@@ -13,6 +13,7 @@
#include "BannerSetColourAction.h"
#include "BannerSetNameAction.h"
#include "BannerSetStyleAction.h"
#include "ChangeMapSizeAction.h"
#include "ClearAction.h"
#include "ClimateSetAction.h"
#include "CustomAction.h"
@@ -172,6 +173,7 @@ namespace GameActions
Register<GuestSetFlagsAction>();
Register<ParkSetDateAction>();
Register<SetCheatAction>();
Register<ChangeMapSizeAction>();
#ifdef ENABLE_SCRIPTING
Register<CustomAction>();
#endif

View File

@@ -58,6 +58,7 @@
<ClInclude Include="actions\BannerSetColourAction.h" />
<ClInclude Include="actions\BannerSetNameAction.h" />
<ClInclude Include="actions\BannerSetStyleAction.h" />
<ClInclude Include="actions\ChangeMapSizeAction.h" />
<ClInclude Include="actions\ClearAction.h" />
<ClInclude Include="actions\ClimateSetAction.h" />
<ClInclude Include="actions\CustomAction.h" />
@@ -505,6 +506,7 @@
<ClCompile Include="actions\BannerSetColourAction.cpp" />
<ClCompile Include="actions\BannerSetNameAction.cpp" />
<ClCompile Include="actions\BannerSetStyleAction.cpp" />
<ClCompile Include="actions\ChangeMapSizeAction.cpp" />
<ClCompile Include="actions\ClearAction.cpp" />
<ClCompile Include="actions\ClimateSetAction.cpp" />
<ClCompile Include="actions\CustomAction.cpp" />

View File

@@ -200,6 +200,7 @@ const std::array<NetworkAction, static_cast<size_t>(NetworkPermission::Count)> N
GameCommand::PlaceParkEntrance,
GameCommand::RemoveParkEntrance,
GameCommand::PlacePeepSpawn,
GameCommand::ChangeMapSize,
},
},
NetworkAction{

View File

@@ -40,7 +40,7 @@
// This string specifies which version of network stream current build uses.
// It is used for making sure only compatible builds get connected, even within
// single OpenRCT2 version.
#define NETWORK_STREAM_VERSION "10"
#define NETWORK_STREAM_VERSION "11"
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
static Peep* _pickup_peep = nullptr;

View File

@@ -1796,7 +1796,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr)
break;
}
auto parkEntranceRemoveAction = ParkEntranceRemoveAction(CoordsXYZ{ seqLoc, element->GetBaseZ() });
auto result = GameActions::Execute(&parkEntranceRemoveAction);
auto result = GameActions::ExecuteNested(&parkEntranceRemoveAction);
// If asking nicely did not work, forcibly remove this to avoid an infinite loop.
if (result->Error != GameActions::Status::Ok)
{
@@ -1808,7 +1808,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr)
{
CoordsXYZD wallLocation = { loc.x, loc.y, element->GetBaseZ(), element->GetDirection() };
auto wallRemoveAction = WallRemoveAction(wallLocation);
auto result = GameActions::Execute(&wallRemoveAction);
auto result = GameActions::ExecuteNested(&wallRemoveAction);
// If asking nicely did not work, forcibly remove this to avoid an infinite loop.
if (result->Error != GameActions::Status::Ok)
{
@@ -1820,7 +1820,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr)
{
auto removeSceneryAction = LargeSceneryRemoveAction(
{ loc.x, loc.y, element->GetBaseZ(), element->GetDirection() }, element->AsLargeScenery()->GetSequenceIndex());
auto result = GameActions::Execute(&removeSceneryAction);
auto result = GameActions::ExecuteNested(&removeSceneryAction);
// If asking nicely did not work, forcibly remove this to avoid an infinite loop.
if (result->Error != GameActions::Status::Ok)
{
@@ -1832,7 +1832,7 @@ static void clear_element_at(const CoordsXY& loc, TileElement** elementPtr)
{
auto bannerRemoveAction = BannerRemoveAction(
{ loc.x, loc.y, element->GetBaseZ(), element->AsBanner()->GetPosition() });
auto result = GameActions::Execute(&bannerRemoveAction);
auto result = GameActions::ExecuteNested(&bannerRemoveAction);
// If asking nicely did not work, forcibly remove this to avoid an infinite loop.
if (result->Error != GameActions::Status::Ok)
{

View File

@@ -46,21 +46,19 @@ static std::array<std::vector<uint16_t>, SPATIAL_INDEX_SIZE> gSpriteSpatialIndex
static void FreeEntity(EntityBase& entity);
constexpr size_t GetSpatialIndexOffset(int32_t x, int32_t y)
static constexpr size_t GetSpatialIndexOffset(const CoordsXY& loc)
{
if (x == LOCATION_NULL)
if (loc.IsNull())
return SPATIAL_INDEX_LOCATION_NULL;
const auto tileX = std::clamp<size_t>(x / COORDS_XY_STEP, 0, MAXIMUM_MAP_SIZE_TECHNICAL);
const auto tileY = std::clamp<size_t>(y / COORDS_XY_STEP, 0, MAXIMUM_MAP_SIZE_TECHNICAL);
const auto index = tileX * MAXIMUM_MAP_SIZE_TECHNICAL + tileY;
// NOTE: The input coordinate is rotated and can have negative components.
const auto tileX = std::abs(loc.x) / COORDS_XY_STEP;
const auto tileY = std::abs(loc.y) / COORDS_XY_STEP;
if (index >= std::size(gSpriteSpatialIndex))
{
if (tileX >= MAXIMUM_MAP_SIZE_TECHNICAL || tileY >= MAXIMUM_MAP_SIZE_TECHNICAL)
return SPATIAL_INDEX_LOCATION_NULL;
}
return index;
return tileX * MAXIMUM_MAP_SIZE_TECHNICAL + tileY;
}
// Required for GetEntity to return a default
@@ -155,7 +153,7 @@ EntityBase* get_sprite(size_t spriteIndex)
const std::vector<uint16_t>& GetEntityTileList(const CoordsXY& spritePos)
{
return gSpriteSpatialIndex[GetSpatialIndexOffset(spritePos.x, spritePos.y)];
return gSpriteSpatialIndex[GetSpatialIndexOffset(spritePos)];
}
void EntityBase::Invalidate()
@@ -463,7 +461,7 @@ void sprite_misc_update_all()
// Performs a search to ensure that insert keeps next_in_quadrant in sprite_index order
static void SpriteSpatialInsert(EntityBase* sprite, const CoordsXY& newLoc)
{
size_t newIndex = GetSpatialIndexOffset(newLoc.x, newLoc.y);
size_t newIndex = GetSpatialIndexOffset(newLoc);
auto& spatialVector = gSpriteSpatialIndex[newIndex];
auto index = std::lower_bound(std::begin(spatialVector), std::end(spatialVector), sprite->sprite_index);
spatialVector.insert(index, sprite->sprite_index);
@@ -471,7 +469,7 @@ static void SpriteSpatialInsert(EntityBase* sprite, const CoordsXY& newLoc)
static void SpriteSpatialRemove(EntityBase* sprite)
{
size_t currentIndex = GetSpatialIndexOffset(sprite->x, sprite->y);
size_t currentIndex = GetSpatialIndexOffset({ sprite->x, sprite->y });
auto& spatialVector = gSpriteSpatialIndex[currentIndex];
auto index = std::lower_bound(std::begin(spatialVector), std::end(spatialVector), sprite->sprite_index);
if (index != std::end(spatialVector) && *index == sprite->sprite_index)
@@ -487,8 +485,8 @@ static void SpriteSpatialRemove(EntityBase* sprite)
static void SpriteSpatialMove(EntityBase* sprite, const CoordsXY& newLoc)
{
size_t newIndex = GetSpatialIndexOffset(newLoc.x, newLoc.y);
size_t currentIndex = GetSpatialIndexOffset(sprite->x, sprite->y);
size_t newIndex = GetSpatialIndexOffset(newLoc);
size_t currentIndex = GetSpatialIndexOffset({ sprite->x, sprite->y });
if (newIndex == currentIndex)
return;