From 2c68c73a24495b8ff2a04d6ef89909e01e25555f Mon Sep 17 00:00:00 2001 From: Karst Date: Wed, 7 Dec 2022 22:52:22 +0100 Subject: [PATCH] Add steep drops to the Log Flume --- distribution/changelog.txt | 1 + resources/g2/sprites.json | 95 +++++++++++++ .../flume/25-60-down-nesw-back-water.png | Bin 0 -> 1013 bytes .../g2/track/flume/25-60-down-nesw-back.png | Bin 0 -> 1109 bytes resources/g2/track/flume/25-60-down-nesw.png | Bin 0 -> 1853 bytes .../flume/25-60-down-nwse-back-water.png | Bin 0 -> 1037 bytes .../g2/track/flume/25-60-down-nwse-back.png | Bin 0 -> 1162 bytes resources/g2/track/flume/25-60-down-nwse.png | Bin 0 -> 1909 bytes .../flume/60-25-down-nesw-back-water.png | Bin 0 -> 945 bytes .../g2/track/flume/60-25-down-nesw-back.png | Bin 0 -> 1165 bytes resources/g2/track/flume/60-25-down-nesw.png | Bin 0 -> 1871 bytes .../flume/60-25-down-nwse-back-water.png | Bin 0 -> 965 bytes .../g2/track/flume/60-25-down-nwse-back.png | Bin 0 -> 1192 bytes resources/g2/track/flume/60-25-down-nwse.png | Bin 0 -> 1834 bytes .../g2/track/flume/60-down-nesw-back.png | Bin 0 -> 1368 bytes resources/g2/track/flume/60-down-nesw.png | Bin 0 -> 2199 bytes .../g2/track/flume/60-down-nwse-back.png | Bin 0 -> 1386 bytes resources/g2/track/flume/60-down-nwse.png | Bin 0 -> 2167 bytes src/openrct2/network/NetworkBase.cpp | 2 +- src/openrct2/ride/water/LogFlume.cpp | 131 ++++++++++++++++++ src/openrct2/ride/water/meta/LogFlume.h | 4 +- src/openrct2/sprites.h | 19 ++- 22 files changed, 248 insertions(+), 4 deletions(-) create mode 100644 resources/g2/track/flume/25-60-down-nesw-back-water.png create mode 100644 resources/g2/track/flume/25-60-down-nesw-back.png create mode 100644 resources/g2/track/flume/25-60-down-nesw.png create mode 100644 resources/g2/track/flume/25-60-down-nwse-back-water.png create mode 100644 resources/g2/track/flume/25-60-down-nwse-back.png create mode 100644 resources/g2/track/flume/25-60-down-nwse.png create mode 100644 resources/g2/track/flume/60-25-down-nesw-back-water.png create mode 100644 resources/g2/track/flume/60-25-down-nesw-back.png create mode 100644 resources/g2/track/flume/60-25-down-nesw.png create mode 100644 resources/g2/track/flume/60-25-down-nwse-back-water.png create mode 100644 resources/g2/track/flume/60-25-down-nwse-back.png create mode 100644 resources/g2/track/flume/60-25-down-nwse.png create mode 100644 resources/g2/track/flume/60-down-nesw-back.png create mode 100644 resources/g2/track/flume/60-down-nesw.png create mode 100644 resources/g2/track/flume/60-down-nwse-back.png create mode 100644 resources/g2/track/flume/60-down-nwse.png diff --git a/distribution/changelog.txt b/distribution/changelog.txt index de09e19853..8d6cb3b488 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,6 +1,7 @@ 0.4.3 (in development) ------------------------------------------------------------------------ - Feature: [#17782] The Flying Coaster now has access to boosters and can draw outside loops. +- Feature: [#17997] The Log Flume can now draw steep pieces down (if vehicle allows it). - Feature: [#18312, objects#220, OpenSFX#13] New sound effects for the Hybrid and Single Rail roller coasters. - Feature: [objects#173] Add alpine coaster vehicle. - Feature: [objects#221] Add two extra jungle walls. diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 8b6724d820..8458de2fd2 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -4423,6 +4423,101 @@ "y_offset": -29, "palette": "keep" }, + { + "path": "track/flume/25-60-down-nesw.png", + "x_offset": -26, + "y_offset": -39, + "palette" : "keep" + }, + { + "path": "track/flume/25-60-down-nwse.png", + "x_offset": -28, + "y_offset": -39, + "palette" : "keep" + }, + { + "path": "track/flume/25-60-down-nesw-back-water.png", + "y_offset": -23, + "palette" : "keep" + }, + { + "path": "track/flume/25-60-down-nesw-back.png", + "x_offset": -26, + "y_offset": -12, + "palette" : "keep" + }, + { + "path": "track/flume/25-60-down-nwse-back-water.png", + "x_offset": -25, + "y_offset": -22, + "palette" : "keep" + }, + { + "path": "track/flume/25-60-down-nwse-back.png", + "x_offset": -10, + "y_offset": -12, + "palette" : "keep" + }, + { + "path": "track/flume/60-down-nesw.png", + "x_offset": -27, + "y_offset": -71, + "palette" : "keep" + }, + { + "path": "track/flume/60-down-nwse.png", + "x_offset": -28, + "y_offset": -70, + "palette" : "keep" + }, + { + "path": "track/flume/60-down-nesw-back.png", + "x_offset": -26, + "y_offset": -53, + "palette" : "keep" + }, + { + "path": "track/flume/60-down-nwse-back.png", + "x_offset": -27, + "y_offset": -55, + "palette" : "keep" + }, + { + "path": "track/flume/60-25-down-nesw.png", + "x_offset": -27, + "y_offset": -39, + "palette" : "keep" + }, + { + "path": "track/flume/60-25-down-nwse.png", + "x_offset": -28, + "y_offset": -39, + "palette" : "keep" + }, + { + "path": "track/flume/60-25-down-nesw-back-water.png", + "x_offset": -20, + "y_offset": -6, + "palette" : "keep" + }, + { + "path": "track/flume/60-25-down-nesw-back.png", + "x_offset": -27, + "y_offset": -22, + "palette" : "keep" + }, + { + "path": "track/flume/60-25-down-nwse-back-water.png", + "x_offset": 2, + "y_offset": -6, + "palette" : "keep" + }, + { + "path": "track/flume/60-25-down-nwse-back.png", + "x_offset": -26, + "y_offset": -22, + "palette" : "keep" + }, { "path": "support/flat_to_steep_1_1.png", "x_offset": -32, diff --git a/resources/g2/track/flume/25-60-down-nesw-back-water.png b/resources/g2/track/flume/25-60-down-nesw-back-water.png new file mode 100644 index 0000000000000000000000000000000000000000..938913f6d5de0af6eb1cacb754daa1c2548fddf7 GIT binary patch literal 1013 zcmWktZ)oFm7=F8d*=}wC%gXADWlnB|(MxB|c6G_36DZ>5*k-`>rn zx6`|O@4xeX`gwp!*xJ}xLkLA8k%@_k$;rv7sj2Dd>6w`s48vw;XXobT;)z6pVQ4|% zWm(iT#W3_@u~@Cvn@zXf?gqhVJZ5O%IgrG8MTupzM7}_m%3QT3HJWP6Gdg~`Kd=P~ zOL6nM7&lXdrIB@mIVuWXHPvbA!EtFA*r%g*5(kxnJP($PHFV4?M|+LfxPzl1jm9cE zvk+=003-kv!}Ms>#BqxxZH_yVq~lDcXPOV{b>w+C6HD-MS|T`=OzKq1WHgI2YC_Qw zD=pdXsBVxUSe#BKIGGYPR?!8$B$euF-PK*+YzGy8*yx{nQ66G4#4|t?fV42S9#1w& z#p889Rqh-1$ZDe_iHd0~o=;Nc6xYy%mLdB^tyeV$PI2T_Pkjds+R+$GQYnVb@Iqde z%bHfp=bPoSSFii7+wXQqqY(mJ2eOJWji}JVXLfEStG?6=Ub=M&Y9as zy%8A$mcWv9RN;xN%oH-BWoGS)*>Wm=+ZhIJH14yah+IGcAOxWomfa(*5?(A|*)&_L zvbF2A!NBNr*xKiUqR82-Rw(EUU1aGh&o~0(iF8+@hN%Qn31pI}#vqqRz8D_=#mifZ z;lo67+nX{h|Nhf{I9y#{UDUhapL#c!8pmtPr~)Q_Ls6R$rr_1eq(+*5aMfBDao zbmWlv^XhYdU3;|q$S>zFU71_B^_zC#@W#(i|9Y`|Qo1y^yhwbueGQgwuEhU%;>{Ze z=HJD;n>%aEUHahGcORTQd-Lwb27UkjHwU?gg)4U+QeH}mhsufiVFbQD-}&?n_TRNI P39PSeu735x<&XXYC+@Gs literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/25-60-down-nesw-back.png b/resources/g2/track/flume/25-60-down-nesw-back.png new file mode 100644 index 0000000000000000000000000000000000000000..13a1fe6ff45c6d3e66a20cba9c199aa43c361fcb GIT binary patch literal 1109 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/25-60-down-nwse-back.png b/resources/g2/track/flume/25-60-down-nwse-back.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b79d8213cf3fd3935e68d4e7000d4935e99c06 GIT binary patch literal 1162 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 literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-25-down-nesw-back-water.png b/resources/g2/track/flume/60-25-down-nesw-back-water.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0301fd985244e5b6dbcfebed533ac0edace3ed GIT binary patch literal 945 zcmWktL5SmI82x5CGwICiTA@gFbBIzTha4j05HSmJ%nY?gChKINLS3_CrjtWff@Yvf z4*@F{sSt)DQ3Cc5u!n#}1__!&z<^bH2w1RU4m}htxJZQ}Jw-4$h5t8qZeWJ<}Q| zjkEI)-}|L;7a#}sUOzp`jyEQP+uPi|%we$CU;{C5+5*(w)scfx>Fs zz9E*Z8eyws-(;@aLgduOLn9q^7OA&h#uXeC3Yt9FGBz-7BpHZ=*C7U zE(1sa3Wgblf`#KYNqQW2ElDFyn_AYRejh~<&J@dhiIxaXAu9$|vl!LpOjl_8VlR}v zu@a;j!QynK%*m9fvUNi+I#Q>v^aCSEtT^o@i@|Ii6?iDhP||>C0cm4wzf>8L^@ul; zT6bo8OFKr_5>-@Lyjh{THEy5^p(!VAb?TUNzrBo{b>gFWTqv?6RbyC<7n-u%RaLjy z9Co`=zn=ubY%*Ccmk4kJNC#sE1tG-cF{RCf&b;m|n&Hx(tcHu5=^E`*g#ueDRfw`o z(JIH8qSR3`v(~WN8x4kOoUCR%C?aOc1xq1popM{e-;qOC8~N5Wau?HhwR(hjfEs`a zU<3F7BY-&uC>u#YEfe`3N~aPD1_M1Ff(oP(AQ_NRLR|)V5(;!Q?x56z$HlWC3Q&_U zT`gHns%KXQo*IVjB=HxE1Z7#c225+8w@Z>oC;@4toV~33t7f=%#y7zXO_yX5SOTli zg*s2@GSkvT+tR(B75cp-_7`c4Rx?%ym;gO m6A!1K|917_cdz}hc?+I@nm!HxeeiSU0@b7A!*5=B@X`ONsgFSb literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-25-down-nesw-back.png b/resources/g2/track/flume/60-25-down-nesw-back.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d0ac1539c838f7343840966b975c7d23feccdf GIT binary patch literal 1165 zcmWktacmQH6n@)aw=r2UO{mbs0#z^M5(^yRA_qCxZ7Ivi4tGF}&2r$a6jI@kn!80_Zn$A=`OdVB99N`!>HnYT`4c=tL8ZWV$M*0Ua&C)-LEcmk~?|a|->-&=L zz4zXpA@A~KtCs=5^1)sG!!3TPg>_vWt$we3rrx4eV*{^_3G$(_@WB%S*f}b{9#}JY z^k6VB95^_7>dhYl+WSpxIXJu>G|eJ)MH(+W8iWeZ7PDJNUAv6`hf>qV~)raXcDioZg-OV^Wyo(lbuT1z< zQqpK8#YVGSA}{DA(XfIp%IWdCX@TG*$}h8WjE|+ov>_X&TC@^oEmLV0Yz){1a0I~> z0bIkVw8NXj{RKugeesH-*R>*=;t9J%Im2Ee?xQmjn^y!gDwUH;H5;uLl1(#G1#JDd1S}@mNT5s9_?Zc{93{&qqx&TdSF<<>d?l8R=m(2d}$C1D7pY ztNXK!aK4!=EgBV6uH$x~T$tBm^E0lHKt_U`riS!{n$IT8Vzy=#QKLd}95Mh|fDp92 zu+S*3#hlRy779?QB$fIwRjn$e5|#Rh_4|cTNQy*c(i5dTNrud_WP$U{^F+<(MxqO; zI7*SoV35hRj(`1uJ-w}mX&W0J5@5%JUk|nBm4p2|_n!Q1;{Nuxi))_hJWyXzL0i9^ zdFHU^7322E2iK0g+c!+#WY;} zcy8t}b?MmW`}+Hm##`m#-ji>T&wn30 z+xPEZ*UihHgl?C;XFvXf`MX-8|NL}?b$oo=PaPxUk9X{xwolAGSU8R^+wkaCZ4OU7 eNBbtlwoWKmQ}-_2cIvITU~pil|7zcXcm4wwO8~_H literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-25-down-nesw.png b/resources/g2/track/flume/60-25-down-nesw.png new file mode 100644 index 0000000000000000000000000000000000000000..b2169787adaca1a7d250def9e7b55982922c2988 GIT binary patch literal 1871 zcmWlaaa_`O8ppp$25N;x9VMGo*mxNx)vrZG3l%*yEV7@8MII>Se| zEw9`6m3$ol1h6^3Fb6_7Wy+M8m>2?qFm>wG*x1-<)20!LL=uS<7Z*omFc=8J=JR2TcQa5z1l!9XA!i6Csi;{uT|K_a0jm2|a+Z7_0iv&iOxVNHvtn;wPLzS#+Hf77i#rNodE@%Lt_gVT$Cl0aU>WYGl&cpsl|yoeOgbT#TT*#C){Kn zprC-N0CWvtnur_=Rp4Ms+&s)DHU?GJu*m~^MJ$SpLsJV_MlshW*d^L(1Wiqo`?JyeM7K_j63=R&4!(j+$7+~T=#75@3XsDN^ z2=Wah5^G593Y!Kaj?kok0w%D?WDb=opfgYwTgK(8gd&49x=iCRw)EQ^0go>dLW zs6xqFDcz)GnKeAS0d<)b{dTS2Z4UW8k;o|I0U!oI1%L?vI{^Ivj1U2gmWU5EDrmRD zfM3J}7y?>&z$pL$5r8Ow7!?{3Xca-H5_%0VU z(4Z1w1ek827!7~w&doEUz)Y#$vIzwl z&xUqI!5GTR&Md5b*ntl;KUtlquLGxpaNlaeszfhqsCfeqZ@>9$r8NGMBD8b)zkZZ*=i98j9q6GMA#!Nu&h z)Vc*li~3W-|9gIKL{7T_^R0&-Twp<5IJin6sB8y1UJ*Hjc6D-wxDLkEhn$J_2_5MWegq>5J!9 zP?p+~&K)h>^8Cvml*2vK6D#P*{yD$sv(DvBmse)hN@l+N^P1GIW`e%+aBKN)`LbE*@7Jbe z?#}w>LPfk$`VsQUqV4(Kr1$UcFq9EiA4deHl;3WGzgHN~t|1BLPP^~~&jzx0oH&))9F395HCDMT3Q&mG0SwRpM%J;Jxuw5gW4+eat%4J; z5@P!HVaxqw(}Q+LJ0aM2jKOq_HI5(pDdUsx^%C&HwJGZ_g^e|ub8*MEwcOcL6~trS zE9#iqX*3g_B#jlH={jV_i*9CK{_@_%ee&hT%$%}C9LkR@`e2FIv8tf)!Mb1HO`lPK zwP=;}64<(U_WtrSg(Pcjg|M z?l@2u{LgUzVEDkphSW8m-@8o{P%7*9`2#mZNs&kfc#M<=D^MdH^<4gU9RhUV;7Eb=Dc@>JFs{08-4N{*}yRO xGUQKARK2pBtA+!YnMydNCrkTg#tS_9@UEM^hi+C<&P9O-c{!W1d$M*m{2!&dQqcea literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-25-down-nwse-back-water.png b/resources/g2/track/flume/60-25-down-nwse-back-water.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6e834b36e5777b0c1cbcd8d9910a426f9ba0a0 GIT binary patch literal 965 zcmWktPl)4m82#pN=FiR+ELhwK5h?_Yl0%RjB4l?nLubf387GSoi)6-3CrHugWS}cO zL<~}-LePp;!cs7YA^{6Kha5T>BtjW_$f1WW2CY)DhZQT^!-#YE8R2{H@m=0Kyzl#D zZ?~|qc4G|yHg>i*_fx%*Vr^w1<@>k4*Hd}wbnEp~**HF}9G;Zm){*g6>6x8(4)xN0 z>G0@-_b*B>11!Maox58Ip}D!a`T6;Ug@wh%#igaC<>h4z!&X*SR##VZ`Fx&XXhGm* zS=6+mX&Sa|H=C_aCy1g!l1yhah6bJkNn9@$v*j{TsnWGN*L0qE#ISc6D&>_@|;YG8e233qbAi_YAY~;*ou-yJZXu5fKl=$dkDYs02F_U&odyo`M`jxt%6q!fnLd7&c9bxm_C zl}^1Lwpwuzj0S`0bcz5sfNWw+J0o;)xlidMp*AjhlS+5$3}&6l)$kInQ<)5#%N2;c zOwk(0nW9uvQ?qKP-srVENfggUJg6dO${9-~oHFHBdA}xiUA^a9!_b`!quJ~c;sF!@ z6TkuR0eS#q3{X0ffT||)J(LV35)1|!JOl+uBtSACBZuk?@+1_LQNM-~5B@Kn1yKM+ z!pd6Cs!$E5(Dt-$*N$UrpM{LdZiT~8lo?sR`w zhMRvpJWiM0oy}W!@BQ>?{fCVYZ(fTYpnKbYzW2)Dm$lzlzuErhGe>(``uo>&8(qJ@ zzxU$#tH*ymzVkqN?F;&)FQ5GR;@cme|M=OH&mX>fk$L;g-yT140561Z{Cl!_el2x| Novq!??`|J_^dBvrpUeON literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-25-down-nwse-back.png b/resources/g2/track/flume/60-25-down-nwse-back.png new file mode 100644 index 0000000000000000000000000000000000000000..abf464125355e124e70749b38e8ac6cf137233f3 GIT binary patch literal 1192 zcmWktacmQH6n>*+H<(zZl8PmiS;IjpRC103E1r0p-Ew9(b|f_^q-?iRO);n5w3uR! ztRs!7;i8=@q=Xu4tmcr0OgNV&7Cm5)DyK|W@RXW0+8`z+si6rY`B{_qz3=_?eaZLU zdv9>SyJGoc%K>0Te_zi~i^&!q?=ZFc_iNAWY0>Jj-j~NXVgFcU_{|{f92G`_>-t|C z4h4sT!=vxKaV7XHfC&a)+TDu~YHMp-vSf+LWHOu0OP4NfZ*RvitfQl2*|KFer_)Ig zZknbzj^TN~C4s8Jjnc`-_yI`w|r~TbDI7&AO~SX^(ha37;p&(*=>!V|+O!R+U)2m}=?@s%jQ1 ziMxCR8KUS2$0c|^9f{-I#u3oPrunT~vFd}E63wEyL3RUQM)t{|J3Uzs| zk*_V5o2b)ev5+>K*Wu(`Zrq@Prqn4LF1Vprxl5K3(5m0f# z@W^$)(ufqAsnViaLFGDb1=4|e-4;LP2y;X<#K=-Oo0JMlQrDE4p`k{FWEi9ZG5{fH zd12vET#nmgQ7jxJ(8HEfm67XG*Wt0b>)jXccX!V`lDagZZtYX+>$lxJ7wufbcQh;Q zpKqR+o&WLC*zmjOW*$0uyIY;O6S%jv>j&;o>8V z%(crmW^UpeAK0<2>%9NPt{&-9>V0CJxap&O-#@!1H%u-}6rKof@7(p>iCg2R2D%Pk z)za5SkC?x%tuK!92hOfMQ=rx>zl7E9?u?vy@_xVRk6oL!^Jn`vtdj2UeLXN>V}K+>x$S7~?8amybQYr`gtf@ART|AIxLXg+D__SGSUc{@#I}(=Y5B F{}2Da5@7%U literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-25-down-nwse.png b/resources/g2/track/flume/60-25-down-nwse.png new file mode 100644 index 0000000000000000000000000000000000000000..2089874076bd40d170595b82052118132feb9e74 GIT binary patch literal 1834 zcmWlYe^`?D8pgl=M6;sh8Z%5ROlp{c;y@wZKRxKhDFnwIi^%rR91APB5T`wIM?;u&;8$X|8YN`FS9ba zixws6jdq;Dx@G)f)q+)(@P6v(i~}l zq-O7kbTa@!AZustHXO$T0s;a91A~Hsf`fxYLPA1ALkR>zSXfwicsPklr9u#c!(qcP zPb?OqD56rSv|7E%WVYGHolcL}3o!tj1^B!Op)gV|rzmO}Y7I-P<9C@v7AtCZXk0S} z4xJ!iMIbzqQb57PG(8ISt2kDzz-~gE!)mwF;PcqHWFVpg1sh;6p$j2cHN=UoNUxoY zyBWAwgulUX+(rd}4}ge3K!`*onT*kB1{SNI&mWe_CX~uqy&kt($xtMfO=9pVED?>1 z&;?3JjImH1M`h$SSzv=*WOm9ZOfrK@Wx;fwm?=a!h?=j~i}Ys1>`>aAO%8XL%V#CB zK_m=FGC-*XG>pL1lei|D(8@*}0*wnbcrY8@&!J5=HcEjnXV zd8}HW!-&t=h>=VhT>vponkHDa+&p)hGQR=wU~HoL~hJsuAZ$Oxcm2~Zc2V8n z@dzkPREj8=oUW^78`ZEyCmS{@C#*X6gw5-n#n}J|06+o205AeD48RNl;Qrxr@LCi% z8gS zXX@HGLLn@di)(8Uh@oOKv~0-8fvh~nIG^qoP;n6jSJH4Dgqzv8gXe$#wY#zw`+*6l z%*lj7%Ke)~elYse(^7M*fBQNwwZgf6;po)W=eXm)XM0N4j*-%`gD>#D`=G3I{IhFM zPPG@$->OdjWL=*H%+Jj^9OX5WFQOXuQJ&5AHO;+|((d{0my)EJS7LTRD|GI)Tz2LWmvr*B zVye+L7x7~Cx9biYIH$W`8P1-1gns&z)48#UoLb6jxW4iE$G4=J8%OG2c3;g+u6I>k z7GxE!s*fgCZRQjv-*~aIqxttUAME~KvgX^c{jaO&CSU5s(YErcSU7yFx#RQ4RrAqt zJOAGL+dGHe4bfCVF0J$6(6c@{FDtxpdBUFeiW-;3OZJwIJh)QSn5WrNm%RFT`?{zf zKTbGalX;_%$d#f;aOayZklfBzdjpQCIJ*YJO{*l%*YfIXah6pc^Pu zvz?RVmR~juHJ_piu5A82)b-s1)2rk5gB9YT(S2KLT6ZQ&p36RzV)wKm!{J|jHjp1$ zwkkU+eRn-+G`2JmnR@-#*%$klGEYCI6xWm9{k0P2e6Gc&o4va`w)~`u+S;=>XujXQ z??mpZTR}U7<Ozx#o@_^2JT+^XpczwvgX&N0WqStX$7NaPZVFW1(deil0r${)kjX#dOMcSZD+1L z(h`#K>_2a%{@D0+|D7WBNa0>M+#%VtpV|>B6SCB0E0)s(--Bb7k{xrG-dMa#vGXC(7o_zu|lUKHD;RQ#-RM5?bl{Kd6 zc$0ms>cI8em%f3@(fG&L6Un}76Skh&KhD+9{(JIqiL?GEV%ayIio`?KKEx?-*_L(2 zJ=#4Jxt`M8@uYgm76N*g6svFe+Z@*tbiW4iUD)lGl8)BkvY`VJ>%o_Gv;VwutZdNF PGDzQ+nbx~?SKa>ranelv literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-down-nesw-back.png b/resources/g2/track/flume/60-down-nesw-back.png new file mode 100644 index 0000000000000000000000000000000000000000..3d283de7b757b85b771da69da22a8eae18e13f8a GIT binary patch literal 1368 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 EKc^~a!2kdN literal 0 HcmV?d00001 diff --git a/resources/g2/track/flume/60-down-nwse.png b/resources/g2/track/flume/60-down-nwse.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9f6158107f394071d6a658d9a1c28b3f286ac7 GIT binary patch literal 2167 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 XFkMWaw#66Rj}feoPh49amwM#?B7XMi literal 0 HcmV?d00001 diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 04938821a0..6ef1363452 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -43,7 +43,7 @@ // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "9" +#define NETWORK_STREAM_VERSION "10" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION diff --git a/src/openrct2/ride/water/LogFlume.cpp b/src/openrct2/ride/water/LogFlume.cpp index 298fbb3c08..5e9a31814b 100644 --- a/src/openrct2/ride/water/LogFlume.cpp +++ b/src/openrct2/ride/water/LogFlume.cpp @@ -10,6 +10,7 @@ #include "../../interface/Viewport.h" #include "../../paint/Paint.h" #include "../../paint/Supports.h" +#include "../../sprites.h" #include "../Track.h" #include "../TrackPaint.h" @@ -849,6 +850,128 @@ static void paint_log_flume_track_reverser( PaintUtilSetGeneralSupportHeight(session, height + 32, 0x20); } +// Steep Additions added by OpenRCT2 + +static void log_flume_track_25_down_60( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + static constexpr const uint32_t imageIds[4][2] = { + { SPR_G2_FLUME_25_60_NW_SE_BACK, SPR_G2_FLUME_25_60_NW_SE_BACK_WATER }, + { SPR_G2_EMPTY, SPR_G2_FLUME_25_60_NW_SE }, + { SPR_G2_EMPTY, SPR_G2_FLUME_25_60_NE_SW }, + { SPR_G2_FLUME_25_60_NE_SW_BACK, SPR_G2_FLUME_25_60_NE_SW_BACK_WATER }, + }; + + auto imageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][0]); + auto frontImageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][1]); + + PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { 32, 1, 42 }, { 0, 27, height + 4 }); + PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height }); + + if (direction == 1 || direction == 2) + { + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, METAL_SUPPORTS_BOXED, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + } + + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_14); + } + else + { + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, METAL_SUPPORTS_BOXED, 4, 8, height + 12, session.TrackColours[SCHEME_SUPPORTS]); + } + + PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_2); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); +} + +static void log_flume_track_60_down( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + static constexpr const uint32_t imageIds[4][2] = { + { SPR_G2_FLUME_60_NW_SE_BACK, SPR_G2_EMPTY }, + { SPR_G2_EMPTY, SPR_G2_FLUME_60_NW_SE }, + { SPR_G2_EMPTY, SPR_G2_FLUME_60_NE_SW }, + { SPR_G2_FLUME_60_NE_SW_BACK, SPR_G2_EMPTY }, + }; + + auto imageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][0]); + auto frontImageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][1]); + + PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { 32, 1, 98 }, { 0, 27, height + 4 }); + PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { 32, 20, 2 }, { 0, 6, height }); + + if (direction == 1 || direction == 2) + { + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, METAL_SUPPORTS_BOXED, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + } + + PaintUtilPushTunnelRotated(session, direction, height - 8, TUNNEL_SQUARE_7); + } + else + { + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, METAL_SUPPORTS_BOXED, 4, 8, height + 12, session.TrackColours[SCHEME_SUPPORTS]); + } + + PaintUtilPushTunnelRotated(session, direction, height + 56, TUNNEL_SQUARE_8); + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); +} + +static void log_flume_track_60_down_25( + PaintSession& session, const Ride& ride, uint8_t trackSequence, uint8_t direction, int32_t height, + const TrackElement& trackElement) +{ + static constexpr const uint32_t imageIds[4][2] = { + { SPR_G2_FLUME_60_25_NW_SE_BACK, SPR_G2_FLUME_60_25_NW_SE_BACK_WATER }, + { SPR_G2_EMPTY, SPR_G2_FLUME_60_25_NW_SE }, + { SPR_G2_EMPTY, SPR_G2_FLUME_60_25_NE_SW }, + { SPR_G2_FLUME_60_25_NE_SW_BACK, SPR_G2_FLUME_60_25_NE_SW_BACK_WATER }, + }; + + auto imageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][0]); + auto frontImageId = session.TrackColours[SCHEME_TRACK].WithIndex(imageIds[direction][1]); + + PaintAddImageAsParentRotated(session, direction, imageId, { 0, 0, height }, { 32, 1, 42 }, { 0, 27, height + 4 }); + PaintAddImageAsParentRotated(session, direction, frontImageId, { 0, 0, height }, { 32, 20, 0 }, { 0, 6, height }); + + if (direction == 1 || direction == 2) + { + PaintUtilPushTunnelRotated(session, direction, height, TUNNEL_1); + + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, METAL_SUPPORTS_BOXED, 4, 8, height, session.TrackColours[SCHEME_SUPPORTS]); + } + } + else + { + PaintUtilPushTunnelRotated(session, direction, height + 24, TUNNEL_SQUARE_FLAT); + + if (track_paint_util_should_paint_supports(session.MapPosition)) + { + MetalASupportsPaintSetup(session, METAL_SUPPORTS_BOXED, 4, 8, height + 8, session.TrackColours[SCHEME_SUPPORTS]); + } + } + PaintUtilSetSegmentSupportHeight( + session, PaintUtilRotateSegments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + PaintUtilSetGeneralSupportHeight(session, height + 56, 0x20); +} + TRACK_PAINT_FUNCTION get_track_paint_function_log_flume(int32_t trackType) { switch (trackType) @@ -884,6 +1007,14 @@ TRACK_PAINT_FUNCTION get_track_paint_function_log_flume(int32_t trackType) return paint_log_flume_track_on_ride_photo; case TrackElemType::LogFlumeReverser: return paint_log_flume_track_reverser; + + // Added by OpenRCT2 + case TrackElemType::Down25ToDown60: + return log_flume_track_25_down_60; + case TrackElemType::Down60: + return log_flume_track_60_down; + case TrackElemType::Down60ToDown25: + return log_flume_track_60_down_25; } return nullptr; diff --git a/src/openrct2/ride/water/meta/LogFlume.h b/src/openrct2/ride/water/meta/LogFlume.h index c0e2620210..3f75328362 100644 --- a/src/openrct2/ride/water/meta/LogFlume.h +++ b/src/openrct2/ride/water/meta/LogFlume.h @@ -19,7 +19,7 @@ constexpr const RideTypeDescriptor LogFlumeRTD = { SET_FIELD(AlternateType, RIDE_TYPE_NULL), SET_FIELD(Category, RIDE_CATEGORY_WATER), - SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_SLOPE, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_ON_RIDE_PHOTO, TRACK_LOG_FLUME_REVERSER}), + SET_FIELD(EnabledTrackPieces, {TRACK_STRAIGHT, TRACK_STATION_END, TRACK_SLOPE, TRACK_S_BEND, TRACK_CURVE_SMALL, TRACK_ON_RIDE_PHOTO, TRACK_LOG_FLUME_REVERSER, TRACK_SLOPE_STEEP_DOWN}), SET_FIELD(ExtraTrackPieces, {}), SET_FIELD(CoveredTrackPieces, {}), SET_FIELD(StartTrackPiece, TrackElemType::EndStation), @@ -37,7 +37,7 @@ constexpr const RideTypeDescriptor LogFlumeRTD = SET_FIELD(NameConvention, { RideComponentType::Boat, RideComponentType::Track, RideComponentType::Station }), SET_FIELD(EnumName, nameof(RIDE_TYPE_LOG_FLUME)), SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_CONTROL_FAILURE)), - SET_FIELD(Heights, { 9, 24, 7, 9, }), + SET_FIELD(Heights, { 10, 24, 7, 9, }), SET_FIELD(MaxMass, 255), SET_FIELD(LiftData, { OpenRCT2::Audio::SoundId::Null, 5, 5 }), SET_FIELD(RatingsCalculationFunction, ride_ratings_calculate_log_flume), diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 37df96271a..c3a6392fc2 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1190,9 +1190,26 @@ enum SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP = SPR_G2_LIM_LAUNCHED_TRACK_LARGE_ZERO_G_ROLL + 40, SPR_G2_LIM_LAUNCHED_TRACK_END = SPR_G2_LIM_LAUNCHED_TRACK_SMALL_FLAT_TO_STEEP + 20, + SPR_G2_FLUME_25_60_NE_SW = SPR_G2_LIM_LAUNCHED_TRACK_END, + SPR_G2_FLUME_25_60_NW_SE, + SPR_G2_FLUME_25_60_NE_SW_BACK_WATER, + SPR_G2_FLUME_25_60_NE_SW_BACK, + SPR_G2_FLUME_25_60_NW_SE_BACK_WATER, + SPR_G2_FLUME_25_60_NW_SE_BACK, + SPR_G2_FLUME_60_NE_SW, + SPR_G2_FLUME_60_NW_SE, + SPR_G2_FLUME_60_NE_SW_BACK, + SPR_G2_FLUME_60_NW_SE_BACK, + SPR_G2_FLUME_60_25_NE_SW, + SPR_G2_FLUME_60_25_NW_SE, + SPR_G2_FLUME_60_25_NE_SW_BACK_WATER, + SPR_G2_FLUME_60_25_NE_SW_BACK, + SPR_G2_FLUME_60_25_NW_SE_BACK_WATER, + SPR_G2_FLUME_60_25_NW_SE_BACK, + // G2 Supports - SPR_G2_SUPPORT_BEGIN = SPR_G2_LIM_LAUNCHED_TRACK_END, + SPR_G2_SUPPORT_BEGIN, SPR_G2_SUPPORT_END = SPR_G2_SUPPORT_BEGIN + 32, // G2 New track types