From aad739532432ba92bcc3b3863f528811ff90d169 Mon Sep 17 00:00:00 2001 From: hazelnot Date: Sun, 18 Oct 2020 19:47:09 +0300 Subject: [PATCH 01/46] Added icons --- src/skel/glfw/re3_logo.png | Bin 0 -> 27059 bytes src/skel/glfw/re3_logo.svg | 94 +++++++++++++++++++++++++++++++++ src/skel/glfw/re3_logo_red.png | Bin 0 -> 25459 bytes src/skel/glfw/re3_logo_red.svg | 93 ++++++++++++++++++++++++++++++++ src/skel/win/gta3.ico | Bin 2238 -> 174425 bytes 5 files changed, 187 insertions(+) create mode 100644 src/skel/glfw/re3_logo.png create mode 100644 src/skel/glfw/re3_logo.svg create mode 100644 src/skel/glfw/re3_logo_red.png create mode 100644 src/skel/glfw/re3_logo_red.svg diff --git a/src/skel/glfw/re3_logo.png b/src/skel/glfw/re3_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fb82cd9d59bc8c399144897948fe9f44b5cb569b GIT binary patch literal 27059 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 TE)$zy2FPoku6{1-oD!M + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/skel/glfw/re3_logo_red.png b/src/skel/glfw/re3_logo_red.png new file mode 100644 index 0000000000000000000000000000000000000000..3d24fe7d5cb4ae28cf249eb1f90bcb30a5f2398b GIT binary patch literal 25459 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 literal 0 HcmV?d00001 diff --git a/src/skel/glfw/re3_logo_red.svg b/src/skel/glfw/re3_logo_red.svg new file mode 100644 index 00000000..02c8463f --- /dev/null +++ b/src/skel/glfw/re3_logo_red.svg @@ -0,0 +1,93 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/skel/win/gta3.ico b/src/skel/win/gta3.ico index 2017c8116bb76bf612babe81eb013c2c0250dbc2..dae70c373fb2d565608677d74f60ea9d19f00281 100644 GIT binary patch literal 174425 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 Q!v6n%5Z+V&|Ns8~06Ez!#sB~S From 91f2275d9e184c747401594a8c909d2eabb47991 Mon Sep 17 00:00:00 2001 From: hazelnot Date: Sun, 25 Oct 2020 18:11:18 +0200 Subject: [PATCH 02/46] Updated logo --- src/skel/glfw/re3.png | Bin 0 -> 26360 bytes src/skel/glfw/re3.svg | 88 ++++++++++++++++++++++++++++++ src/skel/glfw/re3_logo.png | Bin 27059 -> 0 bytes src/skel/glfw/re3_logo.svg | 94 --------------------------------- src/skel/glfw/re3_logo_red.png | Bin 25459 -> 0 bytes src/skel/glfw/re3_logo_red.svg | 93 -------------------------------- src/skel/win/gta3.ico | Bin 174425 -> 176959 bytes 7 files changed, 88 insertions(+), 187 deletions(-) create mode 100644 src/skel/glfw/re3.png create mode 100644 src/skel/glfw/re3.svg delete mode 100644 src/skel/glfw/re3_logo.png delete mode 100644 src/skel/glfw/re3_logo.svg delete mode 100644 src/skel/glfw/re3_logo_red.png delete mode 100644 src/skel/glfw/re3_logo_red.svg diff --git a/src/skel/glfw/re3.png b/src/skel/glfw/re3.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca7d5fa1d821a520b47de3b966689574664a3d3 GIT binary patch literal 26360 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

    Hb&WSr44~wccJ# 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 literal 0 HcmV?d00001 diff --git a/src/skel/glfw/re3.svg b/src/skel/glfw/re3.svg new file mode 100644 index 00000000..045624cb --- /dev/null +++ b/src/skel/glfw/re3.svg @@ -0,0 +1,88 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/skel/glfw/re3_logo.png b/src/skel/glfw/re3_logo.png deleted file mode 100644 index fb82cd9d59bc8c399144897948fe9f44b5cb569b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27059 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 TE)$zy2FPoku6{1-oD!M - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/src/skel/glfw/re3_logo_red.png b/src/skel/glfw/re3_logo_red.png deleted file mode 100644 index 3d24fe7d5cb4ae28cf249eb1f90bcb30a5f2398b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25459 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 diff --git a/src/skel/glfw/re3_logo_red.svg b/src/skel/glfw/re3_logo_red.svg deleted file mode 100644 index 02c8463f..00000000 --- a/src/skel/glfw/re3_logo_red.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/src/skel/win/gta3.ico b/src/skel/win/gta3.ico index dae70c373fb2d565608677d74f60ea9d19f00281..6cc872f45d572d9948b4cf8b27e38a539be281fa 100644 GIT binary patch literal 176959 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 literal 174425 zcmZQzU}WH85D);-3Je)63=GQ{7#JiZAp8za1_nM>1_lKM2!DkD1H&{v1_lic2tPxL zfx%9mfx*B4!e61vz_84cfx*E6!q;$OVDO7)VDRvO@H;{n7|IqhFeD^E_$#I`F#P+< zz|hbD;cIX(GA!$2WB>t11_g$0F$RWnlb9GZ7#J7?7#J877$E9E@(e5t42St37|b7J zgp!gHLr6#nLrhEzLv(aB9EXR8GpMMj5OOV(l$4aMsi|p>g@r{fGB!0e%@-3B^8g10 znklZXt_+QhjUZ8(#>U2**REarfAi)|Furl)2ADo~?%e;du&@>X|Nm!*o3(`@dGTHb z)9_RVHZE=kF)^_~H#fIVGc&Wfixw^V_W%F?|9kfA`M-Mg>i^rfZ~wnz$BzFiR;>7M zYHo2(T+^^c-q@xKgeBDV%2?Ss6&xKMXPiHO{{Q~{`~R<6wF;#De^*!6e~{RV7cc(5 zdiCo6jqBI`2P9|zkDRjhf84As|KnzD{_o#7{lB=HZmXxK=d|a~pZ~vl_3HmMYu5b# z_wV2TxpU|K|MKO_|NHmv|KGWD=l^3zkNyu%%lq$BH~GI?Q7hPt*qNLD%Nbfu2kC$E z@lspFe;8pEz;i|4*Mj{eSxODH#9y`SX8NM&5thw2J?Z*){(Y z=5GHVIeGPeDQ%;Ekp5@Sp8bFS{{8>kw{L^}KYR9Uu=_#!L2mo?^T+?h(%Sz)oeTf_ zHB9}VFmK0ynEP#QZKs364i;x;&z}9Claur5;K76cU}DFP9{J}U5&t=;WB&h$i7Wp{ zOjz;Xv!dsZsIq2_fPjF5k&#gzG`-{*8XBhY^77j2>gpz1SXh9>^Yrxek~p}y9Yqw> z(!^D@^FUZYT0WYQkx5iaN{S&cFc6$(LFv}p+nYg1NQlA7$q6pz;^M-<&BxCmXK2Zw zYU>Wh66(4POw25xbT^>*|9=Js5N=>6%^4s)APg#JBp4VN48WNSRN62wFmOW37*JV5 znyI6z=@|mj($Wl|GL0BahPwo~xVUl^6clDDDJjjtgXi+{^7b$=Fo+UshpenD11~Rc zVOv|<{|gr`{J(hdB2Ek{y8{9OUNA5)DC0AqiHQl68Mzo37`Pc27`S9*W#@s+1s6zA z0#vsC{rmSnGXDMh_y6SN;AXATvOiL($A0X03~|vhqHAd;7ySHa3T} zw6vbX%zyj#?f=5U!vCeErT;rRI#6(VdHH`OC8bZCf+AZbHS`ZkY8o7t)HFB*qD7T8 z_ONkr=Rxg_Zf$M-`|jPl|1V#@{GXSX2d+avPJj6D;s1bufd8Pd0M#cTc@PG%uUx+T z-`2_HzgtPi|M)rE{>RVW3db?iH~iOf4gA2sz~IEdzz{iU(xjgt^FX+)tPE@(i2dNf zga1WEMgKuz0pf#bP#A&OAe>QD`af#=hW}aXPXEtXb?kr2(gXj~R~`GGx%T9L>%_vJ z3=9lW$mWB>xum27!+cQP0x}O&uQoL`{olNK^Z)hh*Zp_%@&9j?SoGhuu;ss1LjHe? z=&b+gE06xqTyp}e`5-eu^&+U=0kLo0x&;m|nE8($Jp!A(b?a6z?c(9}U&}q@ze!li zf8*f9|8B)?VDmFpAOCL=ll_B%fgu#x{U9@uF{pk@NJ#kq>(?)2VK_TAC;xwF|8j8H zfZPqkY0D4&*YODX#K6GdhHO44d=@TT`2XI$dtfu}+`02VKR^FJ%>74?9{qpdzyYuv zC>~D>v)hKkitI_Wd7vIli}$HtQksx z(hn%T{`vCx6<|AhQ`57^2I|%l}@vas{I- zm@;L`KVxI#51{mN>Cz>*JctcSO9sX!Un~;}{)coegyYceMgId@X8u>UbbiXfz+lF} zz+f&cEId3s%fN# z028$R#>>FKz(Xu%WMpKeLVy{wu&~S*5fM2eE-rptTwMGZF_?>s>o@}ggD-{li-?Mf z9_#Jx{eSxOX>hv>)Q={FL1Pq=k&*uy7#LD0wBN|V!Qtb#Z{Xn*)XJX#57cgEU|>ih z)_x`?CQyZ_&cMK+1I3!4_NS|>>lbAEL2W5eyZrU**WmUvsJ)DiLGtP8=^+1SF)%R5 zLd}Dj3!_0rvmlcDRJpmiFPfT~zO}NldTniO{aQmq%Z^czr%eC8bdNPH2m-3 z;qgByDd~SoN(!i-0mdLUNX*O2>%WMI$UjCV=9_}DiVwuqbYG)mQDu#n9K8IXG~y0* zgQmW|{u5A}5j5uW`Sa)hpmwgWukU|k|F2xR@;}Ia(D)CiPk{}C`Y+~YX8+ZleE);` z3W@V~{zu24u^N~B#{Zmr0>>B_7=#%Z7&MKHj2?r+73SH42M_*7w;wcS2J$CN4K6yr zpy0n_UgQ7FwWq*+3Q)fS)HVe5Ghl2`zeZR=71T!q#Rb@YP~Qh;CaA59&Hl8sG?)@F z4H}OEVK4_u6cv~JcP?o8pS}JJxW56i8#Kn0v|u;fJ)l07h@u+Eeo$J&upiVv0L3M8 z_=Eh9ZhwD&|9^jf|Nk>*&ip@p`t<)ZX3Y5S?Ckts&E5;#rngQk{BIeT`(IpD`@etF zjQ<&{Pk`M($bQh6XLoluynPSy8YuqJ?Z15aGI(rp-n@DLL3sZB`Tt#AUH=O!Y5Z5Q zasjoK!5GxX2nY3NRv!oVY2xQ>{SWm&*6;_}hm1k}fa2of|A~o-$ii6Jp!^RSR|NGn zKz$B$oU!Wof8Y8k|G5N&FM@{YVd)P!{z3gR&{!v^Uj?(Ixw#pf?_hio4Js2r7{rEQ zP`}GOHWxgm2^pK+0`5PjE;|VBV}a6PaOZ;mykb(VHN?#((7eziipE z|EZ~|Fl)f{f&~k}@ebxd36T9#FQ%gPUsPG+e{jb*z6h0sfwirr)`la^Swcx%XD7}O7U-F{8|5KM80*61? z|6u!3{SPX;p+;b(Kx61JF)>)>kOe{IzjaC()c)h(Fo(GVJ3ISIF)^{D zXl;_?ATbUOjx`Jn3_&2ZtQ=fBIQfN+q2c2ky!?k485yTS$Hy3$n3#xZW3e+cgS*6_ zDhtHG)fNMd*)cFOf_lIVpn4r$9jF}#8q))rGm1w;V8n+2a@hrA|6pMJ{{ab8E0AF3 zBh#P;00;*lk5fpFj#E%8%ty@`4S~@R7%?FLTH>PwZCiobmZW0PoTU`FD5heNF*7r> zF)%P>FfuZp7%3Rk z{?5wE0*(Ewr-A$C<>cfbSDR$9+uPeg?gO>^L2YO%1|P#p(EKY|jzZFe3@{AhpTg!o&^$OO-a!2+LU9cm+sw|+28G{N1_lNT=o}-=4s<$(fq?-u z^}>hb5m3Klud=f8e_LDI|28%@U~Fw|{hyzo|35bOf%@{?+}!_FRaO7Hxw-xK@$tcm z-QC^)YiMZv=iuM~x$h$fFaJAHWsQFl8hZb+VR2RMf84@iUl|w}HZm|U$V1%-b{}Z1 z7O3A3>VJbUXdJ}T)AN6QeLYf4L71R1M|E}e|DZer8#@GzAEINB94L%UO-%lCi%9(U zshtR3GY0CHCokIb9~JNYpR{oI|FE7V|E08zLH=n+b{}Yr3t~Hj1dR=W#_F)S4>Vpx zO1`P9t^KcT?Ft^F0*w=-uRQi2D_(W%f7aSl|E&@VK<)$ejX~=?z~KiPhl98bLW0IJ z@VO5(t_4v^m~3lp`LE{S4IaZo9@hemX@SNTki|gbU$!ZwAouMBtzUuSz0`2uzJ2?^ z>lo2p+}_sqU(L}6I_`M_Jl+Ue(-GJ@>%V(R$N#hyM<8P`(6t!Ex(_rKT3cI-ZXI|$ z5L@_x;#^Zx^M74k9UM0_H2imRbo?)@pbB2I0a~{K#vw`n#np5`YabC~L?pNml>R_& zm^Et_hWkMI10;to0SZ6#bv>Xpo*wS*|5>?s{);H7{})x#_%8~k)j?yW|MmT%|EDcK zj1+z+|J$aP5sY7u-Jo$~P@V>{VHmU?6Ev3qT2})TBSd$!xBZthwgHdngT}LA7_|N~ zdGS8D+d%0sZN=gLhJkS)_kqTQK=WZ(^9L?FL3OZD*k7oZ}5k z3n-jGbAq7s4zdFo<8mKpEg5M18(A%g4GKR=ZDa75vR~u0{~!#S*U)ke{I6o;hUq>c z%0E#2g4RWY)>eb;K*qS-2b%K%tqDU`3u1%PpOTdec+3~HmI^fP3koODd`r}nH7NN5 zBu-5E2Qn8I#^pX->Ou7f$bIQ65#=x_Emb#A|mn`ls1nXIRc*RM%M>Yf9%+?|De8sl$7L8W;Twmh5@nQGzgmG zz=lEd9-z486_fhIz`&3SEnhep7#LP_adEvO)c4`#<$c7!z;J+pfgzZIfgz58f#Dc0 zFE7r16CWSn6GleHQ=oBo1_p)@1_p+`tQ?#V*|~Y2VZ&@(+)o&pn9eaUFcdQ~GJ?t# zkP|_J<}yU|9YK9W(9$B%*g8lb2!qNkQU|OZS83I+n}J%m44`=>eZp zaQyi3|CC_Rm`inaHK>^i+LsGji%(1U8!$03y+xl#0=FwEAV6zz85kIzGcYjF+WoHF z+}uAvV^|b87egy({WhK4?*?-J;lqb9+(3x{X#XqJ{R9sNAtG^wGB7aAXMn6V0IfHG z;n@rf3_G~Fx&L5uKWLt1!-ft2L2dzIP?!>f7cX86-p|3nzyMm`kjTKmP{Y8$FcXXY zFn56HSquyeO$-bS&J2u;w5*&nNPK%(V6YLGxKDOZNZAg+cP5Ge?X=lKwNXuzUgS z=|zfwE)x?I@R=#-X&SWW7@zx9R8;{4jss zJZSiD0ncB7;sAs}^DyCk%l@layMp(0faYVsZeMv6ybb{={E2e^rcImv^YQWh$5wxV z${$?m2Xt;hU|`^XAt51fSqa)_0osoQ!l1cAdwcu;?A*NI^9;1y0zv0gfU&k)(0>IJ z8&Ej|KC1}iA4=T6d-v}D+S=OxL2VZFbb!zOpzsIn;Q`IZqGQlGAE3E1Mkc2J9DD+x zy-7$|2+ZaclLW7u0p(d7?k6h!fBpLPKj?e~P??DCe$X5@s9i@+{spyvxCDg2d#j?R zto;u<&j}fW%BAGRdr{^}6cr3(_GmFNF@f8qFmYmO zP(95pgeX5j^P%V%9`2yDzw#(JPlNW@F|)CO&YS?v)xo>~F8{HWpSauuO5dRKzPPx! z{)6`3;Zlc79PEB!vH#Ii*Miq3fzmlT28B0@A66Xs?_D$DKPSK7KL!SdG??QV7#MK6 zACz`Lc41rJ0Gbz9P*4D$SBA}0K#D$^m7g1CPmH!y|7qtGAD9fRW zK>M~q>t*BO;{Ic6<3N>Rr9k^enONDu+=K^sFih$go3oCp;W@7j#x6Xzd9;GeCBL`U`@Bf`1tp7~TuZtNaI* zmHv&>!254OXBJ`NS^xc;rvG=!tq1qR7#J9CLf3A0jshli+fDQ<4=pG-_l z?-&>uwlOd;*f20KR5CCy++}BH|3+wBi-UvX8v_FaXfG^iov$+k1H&c;M#i@+>>NK> zIk|q}#2lPI8JUjTU$%0|P@T4bB51 zCpZ~H)VM4)wUEG#VG^I||}#?S(@vxB#tf#$_P=NEwXXOrV*YUu%`LC{)B@L4*b zvtmH&G(l?wLFcYg8-wN{r%s*vAGDT(fq`KQbbmUv{6da7p!ul>a&mJ2LF+HTLoYNY zKiBkoZ50fq~&KXigdKKpHa!ng2m+v*_x7 z(E30+q<_$v5}>aA9)>28LQ<;vaNo2WSmDr5Ln63beixv<4kKpAWeQO`3s$ z!H9u@!3vLCk^KOwr}YTj0|(k`ai4*K0d$rbXbmChIXF1{ z2VoE!c1|0yG)NCfFK8_XsE%b|V7SDGcg4~16o#{Rgc}1)X0;4EFHw_^+?8 z{~xLD2b%@58?-h{TG!;if~nnqMIx|*iS2($O?~h=L?HbP3=9XM*ViHk1IYg`L2(0G z>knGDUs_uFKWI+|=uQeyo3(J3f-$?Mfe9&G3&>2d^V9p!4xScaSNXfo6~xK<4!zdmeOm0RsaA*#Dq) zy}10fXwf2&UZVZq*w~26D5Awd=LCV`O;XbUyhamc-8ioGU>M@Z{)5gT0t<7a% zV7QD{9>C)tpZ`I7aX@Y%l>cGzzj5P6qWy_WA!yweHzz0fjy;TZdl>#ain`tpMgG|T zq=kFHXVgLWHzDuuqq_eY85#d?*|G(fw}=)8)qgzP-2b)RgHhL9qWBG;zY%hvd?2Br z4@$!?p=lnL4F;|MLG2%i|AX-QACxb!uI)q$r@`cZP~E<3*Di1x!I$Sy;~#B3E6i`J zj)Cu21l`jaJ#`(OW%2e^C1ev=2H63s|9E*IXPG)=RQ-3zs{Zeg zi34X<|Bsxsia`F?1EmvC`43tmLQ?q;at|R4%EO?zB*y=Q%mT^7%0ET$d8Ckb45*yP zg>khJK=lJ?PY=JOEXe<$b=siw*{SM(P?`p{`9R}puK3=_WU8oF=%{@nDh_Y zivz;QdePZ1|H~WO{0H6n2Rb7dwATg~hTV^bo<2bN0@VHm-DAeU!0?QLfdP4cKT-Y% z-De2e-wnFY65XB1{N&{1|AhPxI@=s{J}v01f6)Dp$oi4lApi66^8RPz<^kWoCaSFY z9~Tx=*8J~T(E~m&8{PjPKBe_PXm2K{4$95VMRpVMGQ7BMlg|99`+#V`XV z0QNs0A1Kcfg&nhMXjcEj{0}-89Ogc3G`0N?s{cU!7Pq2S@E!4>J!r_-y`=rWtbqkM zd}!%^&^!m|UPkn@teU)*YO#vDSNQPyM$` zE&DH{XA0fhjJ=;gY5E847X-D*LG2cp`>@f(_#dPXRGxy&!&e5v{0};p8u?srP<}?n zps^rOKLB)IIzpTFb|J0?ByHAn*L@XOr z|AX!;6_Ql~m6Hz`5cidU!T{`lQ2!I#o@RXRLze^10gH=^gY5VZy6*(r{$zALxcH#< zH0a!OP*`&C@c;L!?EMdF$73x6*PH;?d)Vbpg6|)(Pp|mT%*qCG8|dyC4v@#880>#t zU0v{<&7i%}Ab${xLG{A=_3QtG&fWs;`(Wf6)0I>^$Ih#3u#@27jo( zVHC*!Z$W21fch@vV5mDmVGD9AXxo7k*oa;y0a6Rn!@$4*I*aWP0|SE- z^eiV(zx6*O6Eip-L2*e82Au~2H4l{T)3K~00nMq+U|?WaPUbom(E68I3=9lq3=9mW zNalm~r1~*1Ftjl+Ff1U!>_yOXctGc8i9jO>)L#Sbtu2P0X$7*An6)-b7#J8p_r!wk zQU}fRL5;(pKx;cdc94TXdNB;dB0#L!#Fz(CLyUPKby%D-Dl{4bqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0wXH~aE-lCO&oM{8~gwN|3N)(5DhwIiUb-O8?cidhI?NQ=09cz z1~$;m%luS}2OI{076E_`(3*gJPDJ47eLm21H%g6$z-S1JhQMeDjE2By2#kinXb6mk zz-S1JhQMeDjE2By2#kgRdI*5lBY^Hb1f3Bg$iTorFATB|Hb#c-roq4$XJBARVPIeY ztywwDz`$^pfq~&Xo$v+ddVl4?5D-}006JIT7z5;p+y9_7SfKS!w8o&l%tw)I;dI%=O11eKMWiGLpnDBY~_AU7STu@xg z$jJN$VGvtFLgGI;SW;3FYz9a#XrC$r0|V&Hpq&g13{M#t7(g@DpgN5l3_2ePbhb(X z0|Nu79{>v%7!3-aqo6hyXkR;M?-%GUJailx8TlV{-Vo@1Tafz*l|P`pgrGBqU||kw zL#nH*gZE#Ag@yeO4-Y2_gVcidZtLji{0Hq{hM5PWS=c$icf^9u9#XM#`LAM499Fh+ z2Jg?~6PE_>3k98_1zq2ce%~@Ud_aC)vt|vrR0ZuhL&u=~VxaRQKxZU@!jhQq0r?5! z4^dIk|DZDkL3{2%`_ItLCd3EraR!C=(xprPgYMV^nF+$6yEi?`yTN;OL3`2CRvZEE zS0~KzAeJ zb1$jk1G=jg)L#Pa;lXDvDRP%DU;ZyFEc73gFJfnG!g+23vEc(!2Ri2ow9g%MhbFY& z3p(45F5v?@rxSEu1u0>GPc5kZBPk*AUqD9TKWOh7Xb&66kCb50{xHzqVd$QqqiE*< z&@}yUa&rD34Ij)H2bHIw{58^Yj4yo+_Vfd)7i(&2{)6tue)#YqW?&PoMrTE++P$UrO$O#Ke{0x;2h=_W z`9(=d=|8C5gbRbtW(2k0L3=Pk`-+7XRR0UhW5Eil|9Qp0<3wP2P}tEUd_e97`Ge5- z1}WvwvuDr#hlGUu2kn&xwc)L;t^Z@gAUV)^p`bPc$PL6|P&m>fd_dbrx^JfcbaM^f@Xr-1PP$jPh!XRbX7-v18T1CI~m3LB6(=&ohZ zIbzWCxQl^-fgRR3gtmo_g8E;C+Ru1`14Rmyc0l{$L1yys@KC?~0}3C0A#nK&3KNhY z$;F`awLs^@N%G5bMyY^;N{1QL29J5 z48iS4P&&aDM$~K{g60K5ZXKDG zp9_>R= z8R6~i{U21WfX=tU7tf@mpGS`#{kO8R`VR_wLUY!j^aJXja*K%nkD0#lKd9{j${*-B zYu)MpzV(yA<7je5R{s;{?}YSYv5Yf<^ipH|2UL!}c=6&tsO<-8%Tg3`7KX!y*9hmWxMf5^Gd*w1|fl`|=e_k+&>jhnRvJcbGq!-lC9KKR^?E(h{2vE>iC zUVMB~!Uq%o0uafi4FQA4!S-+(e`wT;YK(J`mvps0ywSPcs;gIJEiEjUp z;wjJ>%AmPK&|Del4hK^7;!_J+BLxa`(0rAD<23Lc6S(|MtT?EBXcmzUuIm^W7*->l zr3LD0z{7{om<~R7Bg=ut{o>-{VD^FQrdzjeAuAz^4Jy+>XPblC7a*)`>GVHt_7*&6 z)Zsh74k8EY-v+hM{VyOb4|8ueC{U0vID9~JZnd?w|3TxMptdnN7<8UpPfyQ(&>8d~ z^Pp!2-vIdqG*%BXf7Pm0B(22*t=j{QE3~$@{x>x>h56wF0|Ub+(0rA+n$CaF_%f(| z_NwapPc*LV{qLOD_+Q^Q3O>%rz`y{S+d*He01BVuAU}Y{EkR?zpz%3!Fi1bh94LOo zz`zg%y^rY}R1AD>KdEMe#z|oM85kHqcO8N59E)aPV7Lnt2cLh(!up??NX*2-3Y&Ka zg*m9-4!Q#fbe0@a(g8C;bA|I67#J>6xHcCQ1}C6*R@I=bEtO$lU;w3C(4CH;I0C69 zb}cYSEhzrhF)%QI)}^R|T@4{XTiHSPQLcxsK>?{H)?CnfWKdZQIu|_=?QR^1=@1gM zKOeMijvDK_LF>yv>xm#HW0Ih815kPet?eeoK9KuB_j6*J2oV9vfz*&ly0pwodeK)vOhCss|ygUaM?x20zpgp&P z1%uoJbsOlOkl_;kR?zdl!C@~aC-*-#HugVg&-0>1i~cWPz8rkl2G|{Lqxg5QaYn;`U}I#MhJP8T>;d7?^iOsN4Rn5r8+6P7G;TmF_GDmSSO5xp5GFPJ zLFfK~&P}BU2H6EV1JK{!A6!;K+yA=I5EEu#V9;Y=U~pt$VDKU%9AM$)&A`Cm%)r0^ zY7>ISHb7%BP%H3KAiG~MFfjaPU|;}^8<2wGcPx<-{$IX)`CnF62JSC}hKBy92L|;` zq@|@{;s1_-fgzcJfuRq2J`$)6{f!L&qlXpf-YAgS*BBTW<}olZxG*p^~CJy_r>FoDk&cNb7kB9`iUA+tp47kq7f`>n- ze+VioiEXKX?neRn0fZ?Df6)1HnVFgYLH8Jd?mQsYenRR%Wj^R`7SLT>pmQ5R?u22` zT^rhNLH|R$7yXCbg8(|0k`kQ0^4NdS{bP}nR{b{)N&3&m#RH3n&kPI<=y#C8@&i2l zLG=@;okqxCFnQ2@05Jbh68>3PSp?6>h1p3i-QC>{KF1H{UTyc_|EWt4{s-NOL+qKB z#Hs_G?+A(ui|8!a`JkY90G&w(-PQ>UdN4hp;V&d4^#APHv*ZRV(fUB=AcO8Q1cg87 zeD&at`7{Z8SR8@!5$LRG0Vz39*n{wO9CJPc8vdaB9$&qBMRYils}NKcfzHDRg}H_8<(pTUra8;!%kK4S&$MDX2X}ZnzSw4^*y#>NimM zizuq$y*mI~Sdt@_y6n(@1ru9P*n===&Ic6MsG-lm01^Yq{U3<(e>D6@!=IeAO^lw= z^p7Z=C@FtHXX%5^I|pG#7s$M6UB^FZMM!k~2)pnDn)9Xj-%5Z=FkKlrXikUoA%S@1nn zpt}bA8m9fnhXa~t{5K4Ug@?aUU_AKlJbd8}lN;{g4?4RZbZ-N(7IA9P+y@3L^O0#t`ELV`bLbokXs(ND{aA`~s z{}mJz!0w_~_#?MJxdep4;SRc^2b7jc!MN@_L=JZl8`Nh=TDbc^=q?ygI%8m9c*wxO zpokv$3>1t%kQ4r(@%@H|hX0^7xgd89Solv^PINm46rQAFP};Z8s07#XAb&D2Fl<1( zBN!GHWRL%l8vdX=13~j<92^|rv=4IEunYfH$H4bqg6=lYxOD9TwndG~L4g z*RNmyuU)(LA2tp-EW>~0(f?`75B-mxw*J4acR2F=3utcywlxuS3x8OC0o~&Uns*u4 z@LxgG@&{C>fbOUS-E#`^C-e?1DYUc?;*uTypgIjyo`de~1g+zNg)brc`Sa)h)zs9$ zd2=AjAJCjTXx=w<>4E<#i}#U)LFGEJbpc4Nypc87p9~BPpfxVAHAkRuhhehAf9~A5 z|3P;*J2^T12i;9aDBNN4p!-%eG&I2OA~pQapFjVc!Du}TTtOhy!L3+u>ps^rO*+NVnpmq3@yZ(Wa@JAkh1C4)x1D6PbTH!yK#(#!t z_=D~VHwsSpZxx^S-!d*2FSd%$|F3N20?+4zDf~hCAC`{?qWmc@FDD}9LzEz=e_l~Z z@EzKjYfllp$2EKXng0&R9#?1 zkQ@H^!k3WTX!t|I9z>3YKPVI+cr^XPx?W(K?EV)dG)X5x;ZJV=i*(x{I#AQUB+=zR zp)v-a{9rAAKx<)DR8+uiIvpLI|F2)ah6EA~NzmAzx3@RgPHthb|51}y|0lK{#TUl- z+6HVf|Y{{ zyp9L7o(f<1Q6dMLe~F*7?Z2>`GT2TA28KHf3=E(<+hO4jqv>A$Adg#s`VY;`&9n@9 zu-TyVH<0Jwbv#1;r>!_b^ja#C;$qb?@Y*7$-1`5_tgNu`2hG2*!2%tLhKE0BdRY-|KY<2s@n`2pIyCr^?yZ0MX+6<_y%EC4$l8( z5$XTq=Rnq>gYp73Fla3oXg`f>VatDBF-e%6puLUJNMVl5goi)qd=^kTq2@U;%a$$s zKXc~H|D~m+|1B&m{<9*|!&m5>9B9uVSlr6W3cN28q#mS?Tz7!hsDS$8pm9=HSJ(gC z+}yBm0MYju7#Mzn;sCS`LPSv=JWpbqQu5z9ui?K-ej{1fIj`|QXui=nIPt%Xo+jAUmNKu_1*zf(Z(L&`pB4^ixY5bfe*W1_p+G z3=9mQyvPA{0v7`VLp%cm!$AfH29P{R9kuKPne&-}f#D1T149u51A`FMPS9S&Uxw6lkwD=sY^mxpcHRC$E8lfdO<*K@0-}g9!rz1Fn1s z5;tRDV2FjP2k9f%J&gAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsFbYOPU^E0qLtr!nMniy%5TN=(vq5hl=vqDo279nO4}e1q!UipQ zfQf^Jp=zklhS&r)S00JYj>Klh!Dd7fA7z7skYT8V1Fkp)$GZaq1L#Zyd2q5EL4*c$ zu@M6!0|O%iY!%)Ydv;MK&LyY425z1j?U|;~9hYz|7;0OZ) z!!rg32GBhre;61TK=&dH2MoGXp?ZYIFFtRJF)%QI?ge>4<+~_A;XT;!X#At51UUu< zhOHwY-eKu*H2x9s531)^qQ|{}fWUtn8=L=WX=(o(8yo-k_4WOqFk!-w!;>dZ{-2bT z^dEGe5|STB;~x?KDGUq@p!yx0H$ZpPf$mm5di3c3&!0aJixW9EY}oLhg@py|KWG{l zjekh|3o{p=j|0rQI7&)MOtU-5GQ)>C}$34hAO5^|T-Mjyb zii-YcWo7-(&dwe*I5#)ns150b1yxv2N)`QiV{mQKj=|Av8q0pH$) zArt@A)z$c-gsyVP^M9-yoZvPesI3QzgMr5Cj^4=e59-^SU}k%`$dHNunwlEA#xXw2 zFyg;yI=HPr&~Xp4U&GM{J^n#)43BU$21pK+M!t){I5RoKd@yM%9x#^nf-rIKOQ|^iRF*RKV~F;{rdI4ot+&# z{-vd*|AW?-V5%fe1bO`rsQ(|(JmWuT{1ud+Nx>jJL2YyXvvDHkxs@!OM&tkgfACm8 z^87y~?LYMR2bl}nlbV;8_aC&LhZGDNhxGFDf{*_(F|+(vGI#v1>lylA$0LL^>=_Ck zuLI2;g32Wj9*uuU9t6$xfZ_=hCLm1B_y?IcSn+85Q$PMe^*`wBfx#N*$nF}-@gEcv z1g~ScxVR|V|3%IG|LfPU|EpH5`VU&u13Gtt5)4`&m6(`_a~%kBT#~~cs_j3}TAZ$~ zF7O%|e}Dh~QBhG8wXvxg|Bw=edL;V!55n>)|3UGlU~2cD5-e|Q^WP#SXGr${K%om7 z1N{B__kS4v_wOG_m@GV);~%;I2g>6%Nk!oPdg`)6|0%_k^!-46M0JOOng1gzlJRI- zzkWUV{18z1f-oiRKRniuC4~|H$tB?aA1M3>5~nUZ_+Q=_G0p+qhX6Wr5pCKJ&ZXM? zA6Ws3LldYR0j)&^#XAfS{`fxuE&~QC{y}32!JYH}a|w#T+h7a~44}Ozp!2xk5stn*!&v)28vnTGe^Qnl_#f0Z_rJ7`F>>64*d=K3jm{l3@egV%oIij5 zKWJPAw7wsf?_u<4{9}v%W8k&sj@h;Uh2)e$@r{h%GB7Y0qenOzf6&A~s44)p8y`P@ z4Bpd$zV~Z1{;|dX(f{cyj{HwvwD&(~3|dml5IO!q`#C}9F`-2{3U^S&KPU}=FzCEE z-IGGH|Ram4>hh&Z_Z@0d5F>wi$(!|;Ly3*ckyLnHoA4ru!i)b7O5{s-+vN6GX^ z9IEDjQ2Py3hQlzZPKU)Osq~gDTmB=r0|s^eAMO8x_u^4={BP^ltyGJDP==vW>WMd(RO8kS)fpX4o{GYk@6nOvlNM8RpSlfS~^*^*){|k=) zyauxN|AO|6g4h4DbHLlCislYOa{VW$ufKfxa`4zKXs>Q_bMt@DSqWIOHc>*<%>SVE zKXc~Hfx8XVPksCLEm7{krU<$HM^XH*ItD(!#WXzizfn;9f5U*d|1SAWLw5ZKwy+{s zjGFOJt{ZUaqgMQb#_ZBp9{UeE%Lh~zfbpv16pbSeRR0fGSdl9}a^fE{eh*0tl(R?U zpWGBjygusYf6C(=Iqi(bKk@NMuFBE)CpYAX*Ed@JlUFVbm;8@D{|D+*5TANzs}eMS z1Uvs5-2Tt4C#(O5Ty9f~JzUoRg3kCvzGE{dCx^C?N`mQg=gx)q*Fj_dw&3-@1H1kc zlzu?xfr7>lKyHHKSI~3Gk*54nm{gtrCm{$4Dh2J)hx!2=)}XULLGyS7HPS&rK|ul7 zO)&R?_U?nie;_ev+%azUR`hj%*BBTWBv4`;l`|;gA2e>Hr>BP!#{B&J|M%?KLx5o^bTgw zT_LDB9+ig@|DZh=Gz>nxMt}J50i3@zv9e~|kJ5eBVapUS|%z|O$HkjTKmK$ClF$n-Dhu9fKw3=Fai3=E(< zZ$W7Ro(9M?lUn*gZT}OzLsAgbb(8S?*(0vw33=9mQbL~O#07|={d$2%hf);KExeaum z{UZhjhTRMd45bVV45~QXro_O&0NQV}lYxN&lzu__K>BInE|7nJLht{&!N9< zbSIo34!7YF2DJ~UdH)}&_XtKaFfar%FfiCd!xfgNaJd&I4!YAohJk^>f`Ng-hk=0s z3y|dr@qd66Gcdr-r!60}fgNfg zi29Glw@2g4qw)FC`0NDu%xLnXd{C$(@Mw4-!UDt^>fu2sKcMFyNdDpgd0hZRK=Pj* zh*<+7U}e%MJw!sFGr-TCmrII^fq{Y7)59f*fq@ZJwli?BF)%R16s<^OU=R!Pba4!+ zxb^mK?F5mhjmJOcf8X=w+@{m}9(+2tP9T7}NyvrArB{5XhDxAT*dmo9bM8I$(R;FP z#hh@prL5tlE4}m>@2~QkoKg8~3OA!*Z_>U$7^6iQ)Y(yC%qOVm$rY>5JjH z8AUViey@MKy>a9D8JmvHPx_a7fS)mb8}~Hksz!?fsTT~l8q^*L6i8&SEpq;_bLxSJ z1#&Bx-55;|6f9ujm~eZc%=_7g4tOpQwYaqXzTJ!8#WsiMzhpnheC+$%?VPps>)6^D z5AI7XGG!5}{k^2Uzkh3TP0bovb|vSJ2UjvB*nBWu|J{#oV*%eAu?MjU#upggy!ie5 zpcHouV+`{drgO(FUwZHPcSv#)!>&TUSFs0HAJ9Hv&12`ne4zEf)dN!xlqB#3IKFyp zC4a-h-fr!IxCj3m>=}D44$cxaf1omXt>()Tp&J}J2Q4$%A0<7oZ`fYw$FhFEx7qTv z1lbK78uAD1w3)>i{F&T~A5^ClzdH8w;?MLstLG>#XYi=+di-bA-Hy+%pQP!0cyBSi zJZ}2!*Dp;zR6pQevTy6mZegjrmH~PC>fFy)eU>j=SJBqPl<*)}yujYT>ZILXu?l7O zQ!}%JrTsL*zHdH%s?oYIPjQc4x}I<09EUl_1Ogd&>ZtD`0xbnisT{%0gA`iT` z+j!rNvHxMnsjAq0F>}iv#W<$UVR~?9+3|*e`}^i}2XntGo%t!TO76K?CX1g!MeMwq z8GH|7V);B)9al1E$bPvz?5Y8e-i`-MSy@>da;q22pZ!_qw31xEaHq?Qckh;M-aNU$ zq9>L2#m6#{=XSZaAEF=ZYFs13!?tq8iUoW2%<1al^78Wf@cXZX+d8|mO)g4~Hgf7R ze3!3Ybqx;}pXiZdaQuYSoL`O6?7NaOJLhi-n6N3xe&HmBy8WG*bvHy5uJ?s9-`?h_ zqEnT$ch0*`VN2QPCH`|-Odo98$9;$AkLq9l^64fFf9mZ0?S86oi|H)bzWw^+xic!y z*?Tob=(t(PEL*y?m6@II!?o!Ajj5-_%HG^?Oixd@nthA&kKhlzmD=nx4HB8A$CgP> zkFT@5yv#TG&ySB+u3Qn|YW?v0?~fY0_2s^&{$9I%+gnF$@#f8wpFK!5!h?cElOi-c3?3Xd>7B#po3kNj_Pu*7 zwin~9c2!x_E$XgqzkPG>_SU`aQ7>P-@hs0i|IlWl)y#8;n)w;f=VxcvL~LyG zoo&XOB^??XsuR0wiuJo4%^Q=CSN)y3NlC2xc6F%jy?Zec#u`R;O*Ayo9h49eS34$c){27Serii`uCq}(q2W>ENcvHQ2#g6?oXBS zs?$4ajzq~#kxDq( zYaIDyyQci#deP^#9N}CIJS*3(P5t@lX^*6_+S;f2JD-Y8(}{dky3sZ~KK}ftr>9r0 zTj#ekXNAdu`?aNF!oU6gC8gXpQ)QID|L2sd&upVpxffR+coT9vm?7oDo12?=zFamt zNH07(`m}8M9Y=);pB6dq|9hu?qSoN-a9V-Gz^jsm_hJwK=j}{km9+@Bf4w+s;;AJ-j1h((BxRE_1jJE)ijn3=0lE{N&{1 z$>;PnH4|@bQLHXk&hM46yku(OJ~#Ya<<-L?4Cx#{eAWC4YMJ-4Nxa34 z`jM5DmdfsZG6%%EojpA}vstrBQ#&pR?brK%K1HHujpVa$BAPD$^TX?07!6pov?lFe zB+J95sjdBaSBK?s6W{B9!@{IqWS`eh*WzZq`>k94Dr3t0=(qbaXZ`rwdLcRV+0M7- z`_G@b$@h29l%)LhIy6GB;W0Ny>9crd)spV)Yu+;chi{BGC;Mg^spCvQhHXzH~+ymKpcx4*#r%!Fs3{cE_m z7*2A(UGDdJdU;>!-=f_bL9=Ud1AU5#}03)28lG(w*p05o>dDQ&SDsf{%|U%{ETwn>%;zjA!xb z`*UxHgog)5Mp~ZG^|m{8n_-4^xt@0Tx;N$X&Oc9nc4lUrxS{&py5Dc_l-B-y}+k?T9riK<2hu_1PM*~aAKeCxXvSgh$XHj zSN}KPPPuH}hV1(lTn#*(N0aVUzu&tiZttzvi#!;Oe^A+idYp*gSNy3DZl+J?tSwg{cN*cQ(Y)N_wKsm zx4IopRR^*jP>7gz^k6f4<=d^-Z|o>k=H=y;u`YXa$6V(V=eFF-cW#|MxA$z$-NKe* zbA4rUUwUngV*ik>FfYsTE)!2vqC|_6qFax|!50@7U#$si>q(SgX|~g9n;H-r=(WOR zg5UeIY!AHCe{(fB{wR2|u$5bUQ_)kexT=?`?{+?yTeWJ{9=%y23uc`%va5c{^6#Z| z_=Z=kH+d8@+>aqZubCwk2*zIVm(vFZNYw;F5-$+dkhrcy+V- zrYFa|KdQc0|7(-rxazGYgVCGY_y27>c5Sj^I`j2&v(G&FC79P8%ga+7?Z7x8@$1*G zXJ(t9f1TvfxH)(BtW!p5e$ubE-4IFWxy{7Yz+>z?d1dhODo}(k%QVQW>Ajtx8LGjs zY5lTgZp^t}VLa+de5KUdH|LyG<|iFxS{I?>`^Xu8{s=rdl4e_~b`2 z=Wi>Q9`BRQxwU2G|GAGoe|)N6KeJO8i|5(5LdWI9mdE0$`k6Zs-ufDw^_DJ2`pZwuQJL_0FTbLBo zCE6xV&z!?M(W529k%894h+aDO2l$dmg7_v5a2nNeG)EqJ3Id$rk&2HZg zx5Y=2Hr737ZMI{QGhs3+*!8IE7+3KIan^>KCA)UbVwbCE@SLo+vrow;By4Te(OX-y z&;P1E+z`F5g!8jq@cgeuGnbv*HrM^f*IBuh*8k>9vo_SINbneCU(?as^TEmAuKw&S zQ_p7-S9;f`JiB73vdP9|#`*M1RYpDw_uX8`Froj(HeaQQAKrYvTX#2?TWH#4W4|y- zKYyE6uc-}6u0D(klh~>!d@h=s$JphQnW=d&;lrBnX}YHuty!a^KAWTZ?0aL*sVpyi zBmS1{6a4V}y30w!Bzl{yyjSvMpPt?Am3uzI#Tn&gn;!x{rO>T)+EV zC0D_-yv=jfMZP{>Wm}mwiIb~A$++@UN@FPT^4jigaPbC?2JjqCi9ZMX)-1cJJ_U{5h4X+IXxEgf0+YfKq zy0tR4XO3|9(Tu!2Kdb$3Q&jTfcSw5W$_j2@y;$zSl-s|!8g#l{l=ghTR~;v={Cvyy z?ZqD+99;65U-qqn-1l|6H^ofxh>*#7RS^9|QXHcEZW)-oOtWv&BMEY`|r>#lgKEIc3^za*w)7O?aj@{rG`aqxwms}Y*5UU zWjJtgn%=gzIhQ6k*)7ZbFulCLaKpRo?Z@z=HMBD;LefyMoHtEz9=f!f3? zm(MGTJ+>)l-pw!T)-e^-{q-;X`r(UwnXq?Vv*8u~C#K<*wcTCRBH{Yqdi@!qo>NgPvIm^mV zDyOIEKHm9!-sfE!^DOKBSb(^#;&C3;b4&H#Ju;WRw@6*;xJkD*i_c{Rx$P0Z5Bbfz zvB5Uol;Hk_U5+#b+P}(hD7G=_o}o%KR>^G-MV*c@^*7Oy1TRY_V%uc+dJ#)>+Afx zY+dr#ALXvUclcX*zhV8oly&oLCw@L29xTRXalAD*`L_JG2h;t(>eM=>SsdS|go~C={`gP;#Z#ik_=bgQ>GFZ|)Pv+{?t1V87f9m$9D}P`1`tZY}i!N&1 zy?fWh+n!jlQupTRb*4_W3`@0~@F5$;JN{lm7RCFZi7N!7ZALXT*db zesPOym6n&L?#IX9e}8%uc5qWpm9W^w41L*HTa)c&pZ`59D|?@xc)l_0menP@d-1Gt zUgZxR*&UQ7K6tnLecIJkq4Tb!?cOSNI(%Ac;e!K=d@>dXW|?MdXlgE8w5aLRr=nA* zPiyMx9)14#>6fehsgXw>7an?O5E~m?Qd%m=*WUg`!t(0X!`rsczVWS0*zU4Ih|~fd z5fEwe;`npp-`^tj;&?6gf8jhW+4SejON)te=~71=R|LS9evBWp8-T^qOtgA|{7Vt*%|+ z(cKeR_psdI;aL^f$&}EsVru*`S;lFPP4cgvYqdSFpJ_WoH2dy}hpMklVQxC8ASx=# z)yUZ8w)n_n&-wZ8jq!~A4Dqb{*v_!DRmQ&4vEqGmXy=vxvK#)#n9tB+IAbzxqW=v0 z`ntgFAEej(ez&{7^mR;rvhM?p4-6lq9~d8a-e`G%)j?Nak-@s0+&RMgWS_g-=la80 zFqJw4XUfNh31-@oMR*RBOcN53vL{N&d)`Tu0A2K#TmiU}eC z{8t#03lAk&1hf^;`Mu{~ot}!$Lh;FQ|9J66fQc-E(%=h)sMG z$N;O8Fc{i57*0I(Gj=I*wPSC{X6EnRqdY0fj@^Oh#dc$-)0?ZB+x43er%My(z#SB{*+b5mP$;nx=bZIKXY++5i zpE3-B3k+|bv911g;lhOnrIM~iQFiPM2j&-A1zLFPh&`UZ|Bve1w{PR72dbn$t!Bt! zz2|H8d1`oE;?-55RVo^jT=ua$80+0tjGlJ%)Ku-rokgk_GfEg{i)!-ylw)A{&%I}U zPMV6)!*{#iKl^?E|2{V(p`R@=?=%c!b1h`;>l#&R_p1tVN=ZxK+)=2Uo0}UF8X6cG z>8T*_Vb`0Ywq9xTO{u4+rEI?4c)a0EkB*i@UCFc=eV-ey9@zR)Cnh@j^qHB)GmX>v zE-&|AzHVLLty@v2PMzXlVY0MmNLMuCX|{g9XL7rIoyAS1>cU+N_OD7KxjhwSpKdO6 zdJxPUdGh^td zQvw$LJ@Z%Y2j97aN=lj{Q49<={57)bJXaVTj<_naF<2;{&}00^dgE Date: Mon, 26 Oct 2020 10:23:10 +0200 Subject: [PATCH 03/46] Replaced logo with red version and moved it to root directory --- logo.png | Bin 0 -> 24957 bytes src/skel/glfw/re3.svg => logo.svg | 18 +++++++++--------- src/skel/glfw/re3.png | Bin 26360 -> 0 bytes src/skel/win/gta3.ico | Bin 176959 -> 2238 bytes 4 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 logo.png rename src/skel/glfw/re3.svg => logo.svg (94%) delete mode 100644 src/skel/glfw/re3.png diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c64fb1de752251c489d642ca635013d5fa4c5b31 GIT binary patch literal 24957 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 literal 0 HcmV?d00001 diff --git a/src/skel/glfw/re3.svg b/logo.svg similarity index 94% rename from src/skel/glfw/re3.svg rename to logo.svg index 045624cb..ff01d499 100644 --- a/src/skel/glfw/re3.svg +++ b/logo.svg @@ -7,14 +7,14 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - sodipodi:docname="re3_logo_2_o_2.svg" + sodipodi:docname="re3_red.svg" inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" id="svg8" version="1.1" viewBox="0 0 270.93331 270.93334" height="1024" width="1024" - inkscape:export-filename="/home/hazelnot/Design/re3_logo_2_o_2.png" + inkscape:export-filename="/home/hazelnot/Design/re3_red.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> diff --git a/src/skel/glfw/re3.png b/src/skel/glfw/re3.png deleted file mode 100644 index 7ca7d5fa1d821a520b47de3b966689574664a3d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26360 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

      Hb&WSr44~wccJ# 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 diff --git a/src/skel/win/gta3.ico b/src/skel/win/gta3.ico index 6cc872f45d572d9948b4cf8b27e38a539be281fa..2017c8116bb76bf612babe81eb013c2c0250dbc2 100644 GIT binary patch literal 2238 zcmZQzU}RuqP*7k1gB2VM3}Orn3>pj!3?Lx~29P`lSgwHuOhE`n2n8V<7#JED7#JEF zAQVFbh{4{9nA7;s5&e4F7lUX83>nIK%(* z#~J?LzRmFe`E!QF)N zr!&khE@oI>U(c|)yPIME^yv(z7cXYGzJ5K!CsS<^9_kHqSoHaCr4)hV$F+Gu%G>nxT7oKEve2)eQ63w==BXJ(*$q@%ap= zZ*OL}{(L{f7L3;LK2Jz+R8KgJgW>DV$oI(5aX9n}@ z{~7*&{?G9L^?!!{_y05ezxWTxU4UaGYT~!*+(n49gj&GfZdbX6R-pXDDY#XGmx8X9#A{XE0`X{r^A1^Z)-D z?*ISKaQXj#hTZ@FGtB<~pTYkBe+Gun-x(O5zh+>#f1iQj@?{2wC+4h`}Z?2Y~IYkuy`>8!}Q4v4BgEP z4As>P4C&bn4AIdH4DQ|x49dz344?mhX1M?VIm7k;*BK7~KhLoH|89oG{}(f~|8HkV z|DVoa{@v{~2Dt{?Bm#{(pwc zm;W;yKK!3y{rdk5vuFQj=){@PT0!!+(`+4F5e2 zG5pUt$MAo`Er$PFo-us*@PXmZojVLCPMl!avSkayf&~i*=3fR5RKUQX4HjTv(16mA z5&}-Dfl3wz26au4e;6PI3tW;444B&ILW}^8DWnF6e*e*SVSr*;|INVgg5Gz7iw55z@(dghaegSRZE(@ZP)+}$fjU$ks(=GV8(h4g z!=Pqpuoj2B-bEb-hPB%Ixa2j!A@^Mi?0ZmPK`e%w?+OlicdfOcxWgj9Rzpo)eL91V z%UY-jX!;qZ>s+{SQI7*;3@8%TqRG2__0YL^k;CIVL_buTpPvI9K%ceT**P>gI5arm z;Rg*L2=(pzx9{J-e3||AJ18Mw#4kTP`xg$5Z@OREIk3xr{q~JR%RtY7g994B3=nf+ zA2(>^flKq=<4XW z!gZi9T-7u=zN;G;=zwA$MFzrgb=6|fnXaa-fkU1{gPq}<+VttuA=wC`35nzY*{i0m zp@C0cM_ofh2T2n$6QrL(M_UtF44Dmi`1-^8v!jkX0~3su2PE|NlYQ Q!v6n%5Z+V&|Ns8~06Ez!#sB~S literal 176959 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 From 984b8efccc844588d8d7ddfd94713dee5ac90fc7 Mon Sep 17 00:00:00 2001 From: erorcun Date: Tue, 15 Dec 2020 05:51:53 +0300 Subject: [PATCH 04/46] Radio scroll to prev. station & radio off text --- src/audio/MusicManager.cpp | 92 ++++++++++++++++++++++++++++++++--- src/core/ControllerConfig.cpp | 46 ++++++++++++++++++ src/core/ControllerConfig.h | 4 ++ src/core/config.h | 2 + 4 files changed, 136 insertions(+), 8 deletions(-) diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp index 5519d899..5f94093e 100644 --- a/src/audio/MusicManager.cpp +++ b/src/audio/MusicManager.cpp @@ -83,12 +83,41 @@ cMusicManager::DisplayRadioStationName() if(m_bPlayerInCar && !m_bPreviousPlayerInCar) pCurrentStation = nil; +#ifdef RADIO_SCROLL_TO_PREV_STATION + if(gNumRetunePresses < 0) { + gStreamedSound = m_nCurrentStreamedSound; + + if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT || + gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { + gStreamedSound = RADIO_OFF; + } else { + + if(gStreamedSound > + STREAMED_SOUND_RADIO_MP3_PLAYER) + return; + } + + gRetuneCounter = gNumRetunePresses; + pRetune = gStreamedSound; + + while(gRetuneCounter < 0) { + if(pRetune == HEAD_RADIO) { + pRetune = RADIO_OFF; + } else if(pRetune == RADIO_OFF || pRetune == POLICE_RADIO) { + pRetune = SampleManager.IsMP3RadioChannelAvailable() ? USERTRACK : USERTRACK - 1; + } else + pRetune--; + + ++gRetuneCounter; + } + } else +#endif if(SampleManager.IsMP3RadioChannelAvailable()) { gStreamedSound = m_nCurrentStreamedSound; if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT || gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { - gStreamedSound = STREAMED_SOUND_RADIO_POLICE; + gStreamedSound = RADIO_OFF; } else { if(gStreamedSound > @@ -140,10 +169,17 @@ cMusicManager::DisplayRadioStationName() case FLASHBACK: string = TheText.Get("FEA_FM7"); break; case CHATTERBOX: string = TheText.Get("FEA_FM8"); break; case USERTRACK: string = TheText.Get("FEA_FM9"); break; +#ifdef RADIO_OFF_TEXT + case RADIO_OFF: string = TheText.Get("FEM_OFF"); break; +#endif default: return; }; +#ifdef RADIO_OFF_TEXT + if(pRetune == USERTRACK && !SampleManager.IsMP3RadioChannelAvailable()) { return; } +#else if(pRetune > CHATTERBOX && !SampleManager.IsMP3RadioChannelAvailable()) { return; } +#endif if(string && pCurrentStation != string || m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_MP3_PLAYER && @@ -442,17 +478,31 @@ cMusicManager::ServiceGameMode() if (m_bPlayerInCar) { if (FindPlayerPed() != nil && !FindPlayerPed()->DyingOrDead() - && CPad::GetPad(0)->ChangeStationJustDown() && !CReplay::IsPlayingBack() && FindPlayerVehicle() != nil && !UsesPoliceRadio(FindPlayerVehicle())) { - gRetuneCounter = 30; - gNumRetunePresses++; - AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 1.0f); - if (SampleManager.IsMP3RadioChannelAvailable()) { - if (gNumRetunePresses > RADIO_OFF) - gNumRetunePresses -= RADIO_OFF; + + if (CPad::GetPad(0)->ChangeStationJustDown()) { + gRetuneCounter = 30; + gNumRetunePresses++; + AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 1.0f); + if (SampleManager.IsMP3RadioChannelAvailable()) { + if (gNumRetunePresses > RADIO_OFF) + gNumRetunePresses -= RADIO_OFF; + } } +#ifdef RADIO_SCROLL_TO_PREV_STATION + else if(CPad::GetPad(0)->GetMouseWheelDownJustDown() || CPad::GetPad(0)->GetMouseWheelUpJustDown()) { + int scrollNext = ControlsManager.GetControllerKeyAssociatedWithAction(VEHICLE_CHANGE_RADIO_STATION, MOUSE); + int scrollPrev = scrollNext == rsMOUSEWHEELUPBUTTON ? rsMOUSEWHEELDOWNBUTTON : scrollNext == rsMOUSEWHEELDOWNBUTTON ? rsMOUSEWHEELUPBUTTON : -1; + + if (scrollPrev != -1 && !ControlsManager.IsAnyVehicleActionAssignedToMouseKey(scrollPrev)) { + gRetuneCounter = 30; + gNumRetunePresses--; + AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 1.0f); + } + } +#endif } } else { nFramesSinceCutsceneEnded = -1; @@ -494,10 +544,22 @@ cMusicManager::ServiceGameMode() gNumRetunePresses = 0; m_bSetNextStation = false; } + // Because when you switch radio back and forth, gNumRetunePresses will be 0 but gRetuneCounter won't. +#ifdef RADIO_SCROLL_TO_PREV_STATION + if (gRetuneCounter != 0) { + if (gRetuneCounter > 1) gRetuneCounter--; + else if (gRetuneCounter == 1) gRetuneCounter = -1; + else if (gRetuneCounter == -1) { + m_bSetNextStation = true; + gRetuneCounter = 0; + } + } +#else if (gNumRetunePresses) { if (gRetuneCounter != 0) gRetuneCounter--; else m_bSetNextStation = true; } +#endif if (gRetuneCounter) AudioManager.DoPoliceRadioCrackle(); if (m_bSetNextStation) { @@ -863,6 +925,20 @@ cMusicManager::GetNextCarTuning() if (veh == nil) return RADIO_OFF; if (UsesPoliceRadio(veh)) return POLICE_RADIO; if (gNumRetunePresses != 0) { +#ifdef RADIO_SCROLL_TO_PREV_STATION + if (gNumRetunePresses < 0) { + while (gNumRetunePresses < 0) { + if(veh->m_nRadioStation == HEAD_RADIO) { + veh->m_nRadioStation = RADIO_OFF; + } else if(veh->m_nRadioStation == RADIO_OFF || veh->m_nRadioStation == POLICE_RADIO) { + veh->m_nRadioStation = SampleManager.IsMP3RadioChannelAvailable() ? USERTRACK : USERTRACK - 1; + } else + veh->m_nRadioStation--; + + ++gNumRetunePresses; + } + } else +#endif if (SampleManager.IsMP3RadioChannelAvailable()) { if (veh->m_nRadioStation == RADIO_OFF) veh->m_nRadioStation = POLICE_RADIO; diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp index cadba7f2..b56a19f0 100644 --- a/src/core/ControllerConfig.cpp +++ b/src/core/ControllerConfig.cpp @@ -1718,6 +1718,52 @@ void CControllerConfigManager::DeleteMatching1rstPersonControls(e_ControllerActi #undef CLEAR_ACTION_IF_NEEDED +#ifdef RADIO_SCROLL_TO_PREV_STATION +#define CHECK_ACTION(action) \ +if (key == GetControllerKeyAssociatedWithAction(action, type))\ + return true; + +bool CControllerConfigManager::IsAnyVehicleActionAssignedToMouseKey(int32 key) +{ + const eControllerType type = MOUSE; + if (!GetIsKeyBlank(key, type)) + { +#ifdef BIND_VEHICLE_FIREWEAPON + CHECK_ACTION(VEHICLE_FIREWEAPON); +#endif + CHECK_ACTION(VEHICLE_LOOKBEHIND); + CHECK_ACTION(VEHICLE_LOOKLEFT); + CHECK_ACTION(VEHICLE_LOOKRIGHT); + CHECK_ACTION(VEHICLE_LOOKBEHIND); // note: duplicate + CHECK_ACTION(VEHICLE_HORN); + CHECK_ACTION(VEHICLE_HANDBRAKE); + CHECK_ACTION(VEHICLE_ACCELERATE); + CHECK_ACTION(VEHICLE_BRAKE); + CHECK_ACTION(VEHICLE_CHANGE_RADIO_STATION); + CHECK_ACTION(TOGGLE_SUBMISSIONS); + CHECK_ACTION(VEHICLE_TURRETLEFT); + CHECK_ACTION(VEHICLE_TURRETRIGHT); + CHECK_ACTION(VEHICLE_TURRETUP); + CHECK_ACTION(VEHICLE_TURRETDOWN); + CHECK_ACTION(VEHICLE_ENTER_EXIT); + CHECK_ACTION(CAMERA_CHANGE_VIEW_ALL_SITUATIONS); +#ifndef BIND_VEHICLE_FIREWEAPON + CHECK_ACTION(PED_FIREWEAPON); +#endif + CHECK_ACTION(GO_LEFT); + CHECK_ACTION(GO_RIGHT); + CHECK_ACTION(NETWORK_TALK); + CHECK_ACTION(SWITCH_DEBUG_CAM_ON); + CHECK_ACTION(TOGGLE_DPAD); + CHECK_ACTION(TAKE_SCREEN_SHOT); + CHECK_ACTION(SHOW_MOUSE_POINTER_TOGGLE); + } + return false; +} + +#undef CHECK_ACTION +#endif + void CControllerConfigManager::DeleteMatchingActionInitiators(e_ControllerAction action, int32 key, eControllerType type) { if (!GetIsKeyBlank(key, type)) diff --git a/src/core/ControllerConfig.h b/src/core/ControllerConfig.h index 92017a93..d3c2293d 100644 --- a/src/core/ControllerConfig.h +++ b/src/core/ControllerConfig.h @@ -188,6 +188,10 @@ public: void DeleteMatching1rstPersonControls (e_ControllerAction action, int32 key, eControllerType type); void DeleteMatchingActionInitiators (e_ControllerAction action, int32 key, eControllerType type); +#ifdef RADIO_SCROLL_TO_PREV_STATION + bool IsAnyVehicleActionAssignedToMouseKey(int32 key); +#endif + bool GetIsKeyBlank(int32 key, eControllerType type); e_ControllerActionType GetActionType(e_ControllerAction action); diff --git a/src/core/config.h b/src/core/config.h index ad0df2da..54d53253 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -284,6 +284,7 @@ enum Config { // #define BETA_SLIDING_TEXT #define TRIANGULAR_BLIPS // height indicating triangular radar blips, as in VC // #define XBOX_SUBTITLES // the infamous outlines +#define RADIO_OFF_TEXT #define PC_MENU #ifndef PC_MENU @@ -348,6 +349,7 @@ enum Config { #define FREE_CAM // Rotating cam // Audio +#define RADIO_SCROLL_TO_PREV_STATION #ifndef AUDIO_OAL // is not working yet for openal #define AUDIO_CACHE // cache sound lengths to speed up the cold boot #endif From b834d9258535b2cb89bd7bde3db111a74c59e746 Mon Sep 17 00:00:00 2001 From: erorcun Date: Tue, 15 Dec 2020 18:37:21 +0300 Subject: [PATCH 05/46] radio scroll fix --- src/audio/MusicManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp index 5f94093e..26f6d15c 100644 --- a/src/audio/MusicManager.cpp +++ b/src/audio/MusicManager.cpp @@ -89,7 +89,7 @@ cMusicManager::DisplayRadioStationName() if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT || gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { - gStreamedSound = RADIO_OFF; + gStreamedSound = POLICE_RADIO; // which means OFF } else { if(gStreamedSound > @@ -117,7 +117,7 @@ cMusicManager::DisplayRadioStationName() if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT || gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { - gStreamedSound = RADIO_OFF; + gStreamedSound = POLICE_RADIO; // which means OFF } else { if(gStreamedSound > @@ -170,13 +170,13 @@ cMusicManager::DisplayRadioStationName() case CHATTERBOX: string = TheText.Get("FEA_FM8"); break; case USERTRACK: string = TheText.Get("FEA_FM9"); break; #ifdef RADIO_OFF_TEXT - case RADIO_OFF: string = TheText.Get("FEM_OFF"); break; + case RADIO_OFF: case POLICE_RADIO: string = TheText.Get("FEM_OFF"); break; #endif default: return; }; #ifdef RADIO_OFF_TEXT - if(pRetune == USERTRACK && !SampleManager.IsMP3RadioChannelAvailable()) { return; } + if(pRetune == USERTRACK && !SampleManager.IsMP3RadioChannelAvailable()) { string = TheText.Get("FEM_OFF"); } #else if(pRetune > CHATTERBOX && !SampleManager.IsMP3RadioChannelAvailable()) { return; } #endif From 4c46d2498315475aafd517db81ef8beeb6e0c322 Mon Sep 17 00:00:00 2001 From: erorcun Date: Sat, 19 Dec 2020 20:39:42 +0300 Subject: [PATCH 06/46] style change --- src/audio/MusicManager.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp index 26f6d15c..cde1c8f5 100644 --- a/src/audio/MusicManager.cpp +++ b/src/audio/MusicManager.cpp @@ -90,12 +90,9 @@ cMusicManager::DisplayRadioStationName() if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT || gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { gStreamedSound = POLICE_RADIO; // which means OFF - } else { - - if(gStreamedSound > - STREAMED_SOUND_RADIO_MP3_PLAYER) - return; - } + + } else if(gStreamedSound > STREAMED_SOUND_RADIO_MP3_PLAYER) + return; gRetuneCounter = gNumRetunePresses; pRetune = gStreamedSound; @@ -118,12 +115,8 @@ cMusicManager::DisplayRadioStationName() if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT || gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { gStreamedSound = POLICE_RADIO; // which means OFF - } else { - - if(gStreamedSound > - STREAMED_SOUND_RADIO_MP3_PLAYER) - return; - } + } else if(gStreamedSound > STREAMED_SOUND_RADIO_MP3_PLAYER) + return; pRetune = gNumRetunePresses + gStreamedSound; From fc72ff24d0ca7c8dd011977930b90f7f4afed51f Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 20 Dec 2020 17:07:58 +0300 Subject: [PATCH 07/46] implemented collectives in script --- src/control/Script.cpp | 6 +- src/control/Script.h | 38 ++- src/control/Script3.cpp | 288 +++++++++++++++++- src/control/Script4.cpp | 14 +- src/control/Script5.cpp | 647 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 980 insertions(+), 13 deletions(-) diff --git a/src/control/Script.cpp b/src/control/Script.cpp index 67d2e618..6aa48d81 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -58,7 +58,7 @@ int32 CTheScripts::StoreVehicleIndex; bool CTheScripts::StoreVehicleWasRandom; CRunningScript *CTheScripts::pIdleScripts; CRunningScript *CTheScripts::pActiveScripts; -uint32 CTheScripts::NextFreeCollectiveIndex; +int32 CTheScripts::NextFreeCollectiveIndex; int32 CTheScripts::LastRandomPedId; uint16 CTheScripts::NumberOfUsedObjects; bool CTheScripts::bAlreadyRunningAMissionScript; @@ -1810,8 +1810,8 @@ void CTheScripts::Init() OnAMissionForContactFlag[i] = 0; } for (int i = 0; i < MAX_NUM_COLLECTIVES; i++){ - CollectiveArray[i].index = -1; - CollectiveArray[i].unk_data = 0; + CollectiveArray[i].colIndex = -1; + CollectiveArray[i].pedIndex = 0; } NextFreeCollectiveIndex = 0; LastRandomPedId = -1; diff --git a/src/control/Script.h b/src/control/Script.h index 7fc18727..91eef6d2 100644 --- a/src/control/Script.h +++ b/src/control/Script.h @@ -10,6 +10,7 @@ class CVehicle; class CPed; class CObject; class CPlayerInfo; +enum eObjective; class CRunningScript; @@ -38,6 +39,10 @@ void FlushLog(); #define KEY_LENGTH_IN_SCRIPT 8 +#if GTA_VERSION <= GTA_PS2_160 +#define GTA_SCRIPT_COLLECTIVE +#endif + struct intro_script_rectangle { bool m_bIsUsed; @@ -213,8 +218,8 @@ enum { struct tCollectiveData { - int32 index; - uint32 unk_data; + int32 colIndex; + int32 pedIndex; }; enum { @@ -286,7 +291,7 @@ class CTheScripts static bool StoreVehicleWasRandom; static CRunningScript *pIdleScripts; static CRunningScript *pActiveScripts; - static uint32 NextFreeCollectiveIndex; + static int32 NextFreeCollectiveIndex; static int32 LastRandomPedId; static uint16 NumberOfUsedObjects; static bool bAlreadyRunningAMissionScript; @@ -393,6 +398,25 @@ private: static int32 GetNewUniqueScriptSphereIndex(int32 index); static void RemoveScriptSphere(int32 index); +#ifdef GTA_SCRIPT_COLLECTIVE + static void AdvanceCollectiveIndex() + { + if (NextFreeCollectiveIndex == INT32_MAX) + NextFreeCollectiveIndex = 0; + else + NextFreeCollectiveIndex++; + } + + static int AddPedsInVehicleToCollective(int); + static int AddPedsInAreaToCollective(float, float, float, float); + static int FindFreeSlotInCollectiveArray(); + static void SetObjectiveForAllPedsInCollective(int, eObjective, int16, int16); + static void SetObjectiveForAllPedsInCollective(int, eObjective, CVector, float); + static void SetObjectiveForAllPedsInCollective(int, eObjective, CVector); + static void SetObjectiveForAllPedsInCollective(int, eObjective, void*); + static void SetObjectiveForAllPedsInCollective(int, eObjective); +#endif + friend class CRunningScript; friend class CHud; friend void CMissionCleanup::Process(); @@ -511,6 +535,14 @@ private: void CharInAreaCheckCommand(int32, uint32*); void CarInAreaCheckCommand(int32, uint32*); +#ifdef GTA_SCRIPT_COLLECTIVE + void LocateCollectiveCommand(int32, uint32*); + void LocateCollectiveCharCommand(int32, uint32*); + void LocateCollectiveCarCommand(int32, uint32*); + void LocateCollectivePlayerCommand(int32, uint32*); + void CollectiveInAreaCheckCommand(int32, uint32*); +#endif + #ifdef MISSION_REPLAY bool CanAllowMissionReplay(); #endif diff --git a/src/control/Script3.cpp b/src/control/Script3.cpp index 1f1ed537..9a37cb6c 100644 --- a/src/control/Script3.cpp +++ b/src/control/Script3.cpp @@ -853,7 +853,12 @@ int8 CRunningScript::ProcessCommands500To599(int32 command) UpdateCompareFlag(CWorld::Players[ScriptParams[0]].m_WBState == WBSTATE_PLAYING); return 0; } - //case COMMAND_SET_COLL_OBJ_NO_OBJ: +#ifdef GTA_SCRIPT_COLLECTIVE + case COMMAND_SET_COLL_OBJ_NO_OBJ: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_NONE); + return 0; +#endif default: script_assert(0); } @@ -863,65 +868,314 @@ int8 CRunningScript::ProcessCommands500To599(int32 command) int8 CRunningScript::ProcessCommands600To699(int32 command) { switch (command){ - /* Collective commands are not implemented until LCS. +#ifdef GTA_SCRIPT_COLLECTIVE case COMMAND_SET_COLL_OBJ_WAIT_ON_FOOT: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_WAIT_ON_FOOT); + return 0; case COMMAND_SET_COLL_OBJ_FLEE_ON_FOOT_TILL_SAFE: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_FLEE_ON_FOOT_TILL_SAFE); + return 0; case COMMAND_SET_COLL_OBJ_GUARD_SPOT: + { + CollectParameters(&m_nIp, 4); + CVector pos = *(CVector*)&ScriptParams[1]; + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_GUARD_AREA, pos); + return 0; + } case COMMAND_SET_COLL_OBJ_GUARD_AREA: + { + CollectParameters(&m_nIp, 5); + float infX = *(float*)&ScriptParams[1]; + float supX = *(float*)&ScriptParams[3]; + if (infX > supX) { + infX = *(float*)&ScriptParams[3]; + supX = *(float*)&ScriptParams[1]; + } + float infY = *(float*)&ScriptParams[2]; + float supY = *(float*)&ScriptParams[4]; + if (infY > supY) { + infY = *(float*)&ScriptParams[4]; + supY = *(float*)&ScriptParams[2]; + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_GUARD_AREA, pos, radius); + return 0; + } case COMMAND_SET_COLL_OBJ_WAIT_IN_CAR: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_WAIT_IN_CAR); + return 0; case COMMAND_SET_COLL_OBJ_KILL_CHAR_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_KILL_CHAR_ON_FOOT, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_KILL_PLAYER_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CWorld::Players[ScriptParams[1]].m_pPed; + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_KILL_CHAR_ON_FOOT, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_KILL_CHAR_ANY_MEANS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_KILL_CHAR_ANY_MEANS, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_KILL_PLAYER_ANY_MEANS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CWorld::Players[ScriptParams[1]].m_pPed; + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_KILL_CHAR_ANY_MEANS, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_FLEE_CHAR_ON_FOOT_TILL_SAFE: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_FLEE_PLAYER_ON_FOOT_TILL_SAFE: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CWorld::Players[ScriptParams[1]].m_pPed; + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_FLEE_PLAYER_ON_FOOT_ALWAYS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CWorld::Players[ScriptParams[1]].m_pPed; + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_GOTO_CHAR_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_GOTO_CHAR_ON_FOOT, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_GOTO_PLAYER_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CWorld::Players[ScriptParams[1]].m_pPed; + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_GOTO_CHAR_ON_FOOT, pPed); + return 0; + } case COMMAND_SET_COLL_OBJ_LEAVE_CAR: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_LEAVE_CAR); + return 0; case COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_PASSENGER: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_ENTER_CAR_AS_PASSENGER, pVehicle); + return 0; + } case COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_DRIVER: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); + return 0; + } + /* case COMMAND_SET_COLL_OBJ_FOLLOW_CAR_IN_CAR: case COMMAND_SET_COLL_OBJ_FIRE_AT_OBJECT_FROM_VEHICLE: case COMMAND_SET_COLL_OBJ_DESTROY_OBJECT: + */ case COMMAND_SET_COLL_OBJ_DESTROY_CAR: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[1]); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_DESTROY_CAR, pVehicle); + return 0; + } case COMMAND_SET_COLL_OBJ_GOTO_AREA_ON_FOOT: + { + CollectParameters(&m_nIp, 5); + float infX = *(float*)&ScriptParams[1]; + float supX = *(float*)&ScriptParams[3]; + if (infX > supX) { + infX = *(float*)&ScriptParams[3]; + supX = *(float*)&ScriptParams[1]; + } + float infY = *(float*)&ScriptParams[2]; + float supY = *(float*)&ScriptParams[4]; + if (infY > supY) { + infY = *(float*)&ScriptParams[4]; + supY = *(float*)&ScriptParams[2]; + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_GOTO_AREA_ON_FOOT, pos, radius); + return 0; + } + /* case COMMAND_SET_COLL_OBJ_GOTO_AREA_IN_CAR: case COMMAND_SET_COLL_OBJ_FOLLOW_CAR_ON_FOOT_WITH_OFFSET: case COMMAND_SET_COLL_OBJ_GUARD_ATTACK: + */ case COMMAND_SET_COLL_OBJ_FOLLOW_ROUTE: + CollectParameters(&m_nIp, 3); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_FOLLOW_ROUTE, ScriptParams[1], ScriptParams[2]); + return 0; case COMMAND_SET_COLL_OBJ_GOTO_COORD_ON_FOOT: - case COMMAND_SET_COLL_OBJ_GOTO_COORD_IN_CAR: + { + CollectParameters(&m_nIp, 3); + CVector pos(*(float*)&ScriptParams[1], *(float*)&ScriptParams[2], CWorld::FindGroundZForCoord(*(float*)&ScriptParams[1], *(float*)&ScriptParams[2])); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_GOTO_AREA_ON_FOOT, pos); + return 0; + } + //case COMMAND_SET_COLL_OBJ_GOTO_COORD_IN_CAR: case COMMAND_SET_COLL_OBJ_RUN_TO_AREA: + { + CollectParameters(&m_nIp, 5); + float infX = *(float*)&ScriptParams[1]; + float supX = *(float*)&ScriptParams[3]; + if (infX > supX) { + infX = *(float*)&ScriptParams[3]; + supX = *(float*)&ScriptParams[1]; + } + float infY = *(float*)&ScriptParams[2]; + float supY = *(float*)&ScriptParams[4]; + if (infY > supY) { + infY = *(float*)&ScriptParams[4]; + supY = *(float*)&ScriptParams[2]; + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_RUN_TO_AREA, pos, radius); + return 0; + } case COMMAND_SET_COLL_OBJ_RUN_TO_COORD: + { + CollectParameters(&m_nIp, 3); + CVector pos(*(float*)&ScriptParams[1], *(float*)&ScriptParams[2], CWorld::FindGroundZForCoord(*(float*)&ScriptParams[1], *(float*)&ScriptParams[2])); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_RUN_TO_AREA, pos); + return 0; + } case COMMAND_ADD_PEDS_IN_AREA_TO_COLL: + { + CollectParameters(&m_nIp, 3); + float X = *(float*)&ScriptParams[0]; + float Y = *(float*)&ScriptParams[1]; + float Z = CWorld::FindGroundZForCoord(X, Y); + float radius = *(float*)&ScriptParams[2]; + ScriptParams[0] = CTheScripts::AddPedsInAreaToCollective(X, Y, Z, radius); + StoreParameters(&m_nIp, 1); + return 0; + } case COMMAND_ADD_PEDS_IN_VEHICLE_TO_COLL: + CollectParameters(&m_nIp, 1); + ScriptParams[0] = CTheScripts::AddPedsInVehicleToCollective(ScriptParams[0]); + StoreParameters(&m_nIp, 1); + return 0; case COMMAND_CLEAR_COLL: + CollectParameters(&m_nIp, 1); + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + if (CTheScripts::CollectiveArray[i].colIndex == ScriptParams[0]) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + } + } + return 0; case COMMAND_IS_COLL_IN_CARS: + { + CollectParameters(&m_nIp, 1); + bool result = true; + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); + if (!pPed) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + } + else { + result = false; + break; + } + } + UpdateCompareFlag(result); + return 0; + } case COMMAND_LOCATE_COLL_ANY_MEANS_2D: case COMMAND_LOCATE_COLL_ON_FOOT_2D: case COMMAND_LOCATE_COLL_IN_CAR_2D: case COMMAND_LOCATE_STOPPED_COLL_ANY_MEANS_2D: case COMMAND_LOCATE_STOPPED_COLL_ON_FOOT_2D: case COMMAND_LOCATE_STOPPED_COLL_IN_CAR_2D: + LocateCollectiveCommand(command, &m_nIp); + return 0; case COMMAND_LOCATE_COLL_ANY_MEANS_CHAR_2D: case COMMAND_LOCATE_COLL_ON_FOOT_CHAR_2D: case COMMAND_LOCATE_COLL_IN_CAR_CHAR_2D: + LocateCollectiveCharCommand(command, &m_nIp); + return 0; case COMMAND_LOCATE_COLL_ANY_MEANS_CAR_2D: case COMMAND_LOCATE_COLL_ON_FOOT_CAR_2D: case COMMAND_LOCATE_COLL_IN_CAR_CAR_2D: + LocateCollectiveCarCommand(command, &m_nIp); + return 0; case COMMAND_LOCATE_COLL_ANY_MEANS_PLAYER_2D: case COMMAND_LOCATE_COLL_ON_FOOT_PLAYER_2D: case COMMAND_LOCATE_COLL_IN_CAR_PLAYER_2D: + LocateCollectivePlayerCommand(command, &m_nIp); + return 0; case COMMAND_IS_COLL_IN_AREA_2D: case COMMAND_IS_COLL_IN_AREA_ON_FOOT_2D: case COMMAND_IS_COLL_IN_AREA_IN_CAR_2D: case COMMAND_IS_COLL_STOPPED_IN_AREA_2D: case COMMAND_IS_COLL_STOPPED_IN_AREA_ON_FOOT_2D: case COMMAND_IS_COLL_STOPPED_IN_AREA_IN_CAR_2D: + CollectiveInAreaCheckCommand(command, &m_nIp); + return 0; case COMMAND_GET_NUMBER_OF_PEDS_IN_COLL: - */ + { + CollectParameters(&m_nIp, 1); + int total = 0; + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); + if (!pPed) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + } + else { + total++; + } + } + ScriptParams[0] = total; + StoreParameters(&m_nIp, 1); + return 0; + } +#endif case COMMAND_SET_CHAR_HEED_THREATS: { CollectParameters(&m_nIp, 2); @@ -1046,7 +1300,31 @@ int8 CRunningScript::ProcessCommands600To699(int32 command) pPed->SetObjective(OBJECTIVE_GOTO_AREA_ANY_MEANS, pos, radius); return 0; } - //case COMMAND_SET_COLL_OBJ_GOTO_AREA_ANY_MEANS: +#ifdef GTA_SCRIPT_COLLECTIVE + case COMMAND_SET_COLL_OBJ_GOTO_AREA_ANY_MEANS: + { + CollectParameters(&m_nIp, 5); + float infX = *(float*)&ScriptParams[1]; + float supX = *(float*)&ScriptParams[3]; + if (infX > supX) { + infX = *(float*)&ScriptParams[3]; + supX = *(float*)&ScriptParams[1]; + } + float infY = *(float*)&ScriptParams[2]; + float supY = *(float*)&ScriptParams[4]; + if (infY > supY) { + infY = *(float*)&ScriptParams[4]; + supY = *(float*)&ScriptParams[2]; + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_GOTO_AREA_ANY_MEANS, pos, radius); + return 0; + } +#endif case COMMAND_IS_PLAYER_STOPPED: { CollectParameters(&m_nIp, 1); diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp index afd6eba4..986e82f8 100644 --- a/src/control/Script4.cpp +++ b/src/control/Script4.cpp @@ -244,7 +244,12 @@ int8 CRunningScript::ProcessCommands800To899(int32 command) pPed->SetObjective(OBJECTIVE_CATCH_TRAIN); return 0; } - //case COMMAND_SET_COLL_OBJ_CATCH_TRAIN: +#ifdef GTA_SCRIPT_COLLECTIVE + case COMMAND_SET_COLL_OBJ_CATCH_TRAIN: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_CATCH_TRAIN); + return 0; +#endif case COMMAND_SET_PLAYER_NEVER_GETS_TIRED: { CollectParameters(&m_nIp, 2); @@ -1090,7 +1095,12 @@ int8 CRunningScript::ProcessCommands800To899(int32 command) case COMMAND_GIVE_PLAYER_DETONATOR: CGarages::GivePlayerDetonator(); return 0; - //case COMMAND_SET_COLL_OBJ_STEAL_ANY_CAR: +#ifdef GTA_SCRIPT_COLLECTIVE + case COMMAND_SET_COLL_OBJ_STEAL_ANY_CAR: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(ScriptParams[0], OBJECTIVE_STEAL_ANY_CAR); + return 0; +#endif case COMMAND_SET_OBJECT_VELOCITY: { CollectParameters(&m_nIp, 4); diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp index 153f2393..c7e190ac 100644 --- a/src/control/Script5.cpp +++ b/src/control/Script5.cpp @@ -1304,6 +1304,487 @@ int16 CRunningScript::GetPadState(uint16 pad, uint16 button) return 0; } +#ifdef GTA_SCRIPT_COLLECTIVE +void CRunningScript::LocateCollectiveCommand(int32 command, uint32* pIp) +{ + bool b3D, result, debug, decided = false; + float X, Y, Z, dX, dY, dZ; + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_2D: + case COMMAND_LOCATE_COLL_ON_FOOT_2D: + case COMMAND_LOCATE_COLL_IN_CAR_2D: + case COMMAND_LOCATE_STOPPED_COLL_ANY_MEANS_2D: + case COMMAND_LOCATE_STOPPED_COLL_ON_FOOT_2D: + case COMMAND_LOCATE_STOPPED_COLL_IN_CAR_2D: + b3D = false; + break; + default: + b3D = true; + break; + } + CollectParameters(pIp, b3D ? 8 : 6); + X = *(float*)&ScriptParams[1]; + Y = *(float*)&ScriptParams[2]; + if (b3D) { + Z = *(float*)&ScriptParams[3]; + dX = *(float*)&ScriptParams[4]; + dY = *(float*)&ScriptParams[5]; + dZ = *(float*)&ScriptParams[6]; + debug = ScriptParams[7]; + } + else { + dX = *(float*)&ScriptParams[3]; + dY = *(float*)&ScriptParams[4]; + debug = ScriptParams[5]; + } + result = true; + for (int i = 0; i < MAX_NUM_COLLECTIVES && result; i++) { + if (ScriptParams[0] != CTheScripts::CollectiveArray[i].colIndex) + continue; + CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); + if (!pPed) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + continue; + } + CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition(); + switch (command) { + case COMMAND_LOCATE_STOPPED_COLL_ANY_MEANS_2D: + case COMMAND_LOCATE_STOPPED_COLL_ON_FOOT_2D: + case COMMAND_LOCATE_STOPPED_COLL_IN_CAR_2D: + if (!CTheScripts::IsPedStopped(pPed)) { + result = false; + decided = true; + } + break; + default: + break; + } + if (!decided) { + bool in_area; + if (b3D) { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y && + Z - dZ <= pos.z && + Z + dZ >= pos.z; + } + else { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y; + } + result = false; + if (in_area) { + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_2D: + case COMMAND_LOCATE_STOPPED_COLL_ANY_MEANS_2D: + result = true; + break; + case COMMAND_LOCATE_COLL_ON_FOOT_2D: + case COMMAND_LOCATE_STOPPED_COLL_ON_FOOT_2D: + result = !pPed->bInVehicle; + break; + case COMMAND_LOCATE_COLL_IN_CAR_2D: + case COMMAND_LOCATE_STOPPED_COLL_IN_CAR_2D: + result = pPed->bInVehicle; + break; + default: + script_assert(false); + break; + } + } + } + } + UpdateCompareFlag(result); + if (debug) + CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); + if (CTheScripts::DbgFlag) { + if (b3D) + CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + else + CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + } +} + +void CRunningScript::LocateCollectiveCharCommand(int32 command, uint32* pIp) +{ + bool b3D, result, debug; + float X, Y, Z, dX, dY, dZ; + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_CHAR_2D: + case COMMAND_LOCATE_COLL_ON_FOOT_CHAR_2D: + case COMMAND_LOCATE_COLL_IN_CAR_CHAR_2D: + b3D = false; + break; + default: + b3D = true; + break; + } + CollectParameters(pIp, b3D ? 6 : 5); + CPed* pTarget = CPools::GetPedPool()->GetAt(ScriptParams[1]); + script_assert(pTarget); + if (pTarget->bInVehicle) { + X = pTarget->m_pMyVehicle->GetPosition().x; + Y = pTarget->m_pMyVehicle->GetPosition().y; + Z = pTarget->m_pMyVehicle->GetPosition().z; + } + else { + X = pTarget->GetPosition().x; + Y = pTarget->GetPosition().y; + Z = pTarget->GetPosition().z; + } + dX = *(float*)&ScriptParams[2]; + dY = *(float*)&ScriptParams[3]; + if (b3D) { + dZ = *(float*)&ScriptParams[4]; + debug = ScriptParams[5]; + } + else { + debug = ScriptParams[4]; + } + result = true; + for (int i = 0; i < MAX_NUM_COLLECTIVES && result; i++) { + if (ScriptParams[0] != CTheScripts::CollectiveArray[i].colIndex) + continue; + CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); + if (!pPed) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + continue; + } + CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition(); + bool in_area; + if (b3D) { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y && + Z - dZ <= pos.z && + Z + dZ >= pos.z; + } + else { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y; + } + result = false; + if (in_area) { + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_CHAR_2D: + result = true; + break; + case COMMAND_LOCATE_COLL_ON_FOOT_CHAR_2D: + result = !pPed->bInVehicle; + break; + case COMMAND_LOCATE_COLL_IN_CAR_CHAR_2D: + result = pPed->bInVehicle; + break; + default: + script_assert(false); + break; + } + } + } + UpdateCompareFlag(result); + if (debug) + CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); + if (CTheScripts::DbgFlag) { + if (b3D) + CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + else + CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + } +} + +void CRunningScript::LocateCollectiveCarCommand(int32 command, uint32* pIp) +{ + bool b3D, result, debug; + float X, Y, Z, dX, dY, dZ; + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_CAR_2D: + case COMMAND_LOCATE_COLL_ON_FOOT_CAR_2D: + case COMMAND_LOCATE_COLL_IN_CAR_CAR_2D: + b3D = false; + break; + default: + b3D = true; + break; + } + CollectParameters(pIp, b3D ? 6 : 5); + CVehicle* pTarget = CPools::GetVehiclePool()->GetAt(ScriptParams[1]); + script_assert(pTarget); + X = pTarget->GetPosition().x; + Y = pTarget->GetPosition().y; + Z = pTarget->GetPosition().z; + dX = *(float*)&ScriptParams[2]; + dY = *(float*)&ScriptParams[3]; + if (b3D) { + dZ = *(float*)&ScriptParams[4]; + debug = ScriptParams[5]; + } + else { + debug = ScriptParams[4]; + } + result = true; + for (int i = 0; i < MAX_NUM_COLLECTIVES && result; i++) { + if (ScriptParams[0] != CTheScripts::CollectiveArray[i].colIndex) + continue; + CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); + if (!pPed) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + continue; + } + CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition(); + bool in_area; + if (b3D) { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y && + Z - dZ <= pos.z && + Z + dZ >= pos.z; + } + else { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y; + } + result = false; + if (in_area) { + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_CAR_2D: + result = true; + break; + case COMMAND_LOCATE_COLL_ON_FOOT_CAR_2D: + result = !pPed->bInVehicle; + break; + case COMMAND_LOCATE_COLL_IN_CAR_CAR_2D: + result = pPed->bInVehicle; + break; + default: + script_assert(false); + break; + } + } + } + UpdateCompareFlag(result); + if (debug) + CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); + if (CTheScripts::DbgFlag) { + if (b3D) + CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + else + CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + } +} + +void CRunningScript::LocateCollectivePlayerCommand(int32 command, uint32* pIp) +{ + bool b3D, result, debug; + float X, Y, Z, dX, dY, dZ; + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_PLAYER_2D: + case COMMAND_LOCATE_COLL_ON_FOOT_PLAYER_2D: + case COMMAND_LOCATE_COLL_IN_CAR_PLAYER_2D: + b3D = false; + break; + default: + b3D = true; + break; + } + CollectParameters(pIp, b3D ? 6 : 5); + CVector pos = CWorld::Players[ScriptParams[1]].GetPos(); + X = pos.x; + Y = pos.y; + Z = pos.z; + dX = *(float*)&ScriptParams[2]; + dY = *(float*)&ScriptParams[3]; + if (b3D) { + dZ = *(float*)&ScriptParams[4]; + debug = ScriptParams[5]; + } + else { + debug = ScriptParams[4]; + } + result = true; + for (int i = 0; i < MAX_NUM_COLLECTIVES && result; i++) { + if (ScriptParams[0] != CTheScripts::CollectiveArray[i].colIndex) + continue; + CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); + if (!pPed) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + continue; + } + CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition(); + bool in_area; + if (b3D) { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y && + Z - dZ <= pos.z && + Z + dZ >= pos.z; + } + else { + in_area = X - dX <= pos.x && + X + dX >= pos.x && + Y - dY <= pos.y && + Y + dY >= pos.y; + } + result = false; + if (in_area) { + switch (command) { + case COMMAND_LOCATE_COLL_ANY_MEANS_PLAYER_2D: + result = true; + break; + case COMMAND_LOCATE_COLL_ON_FOOT_PLAYER_2D: + result = !pPed->bInVehicle; + break; + case COMMAND_LOCATE_COLL_IN_CAR_PLAYER_2D: + result = pPed->bInVehicle; + break; + default: + script_assert(false); + break; + } + } + } + UpdateCompareFlag(result); + if (debug) + CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); + if (CTheScripts::DbgFlag) { + if (b3D) + CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + else + CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + } +} + +void CRunningScript::CollectiveInAreaCheckCommand(int32 command, uint32* pIp) +{ + bool b3D, result, debug, decided = false; + float infX, infY, infZ, supX, supY, supZ; + switch (command) { + case COMMAND_IS_COLL_IN_AREA_2D: + case COMMAND_IS_COLL_IN_AREA_ON_FOOT_2D: + case COMMAND_IS_COLL_IN_AREA_IN_CAR_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_ON_FOOT_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_IN_CAR_2D: + b3D = false; + break; + default: + b3D = true; + break; + } + CollectParameters(pIp, b3D ? 8 : 6); + infX = *(float*)&ScriptParams[1]; + infY = *(float*)&ScriptParams[2]; + if (b3D) { + infZ = *(float*)&ScriptParams[3]; + supX = *(float*)&ScriptParams[4]; + supY = *(float*)&ScriptParams[5]; + supZ = *(float*)&ScriptParams[6]; + if (infZ > supZ) { + infZ = *(float*)&ScriptParams[6]; + supZ = *(float*)&ScriptParams[3]; + } + debug = ScriptParams[7]; + } + else { + supX = *(float*)&ScriptParams[3]; + supY = *(float*)&ScriptParams[4]; + debug = ScriptParams[5]; + } + if (infX > supX) { + float tmp = infX; + infX = supX; + supX = tmp; + } + if (infY > supY) { + float tmp = infY; + infY = supY; + supY = tmp; + } + result = true; + for (int i = 0; i < MAX_NUM_COLLECTIVES && result; i++) { + if (ScriptParams[0] != CTheScripts::CollectiveArray[i].colIndex) + continue; + CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); + if (!pPed) { + CTheScripts::CollectiveArray[i].colIndex = -1; + CTheScripts::CollectiveArray[i].pedIndex = 0; + continue; + } + CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition(); + switch (command) { + case COMMAND_IS_COLL_STOPPED_IN_AREA_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_ON_FOOT_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_IN_CAR_2D: + if (!CTheScripts::IsPedStopped(pPed)) { + result = false; + decided = true; + } + break; + default: + break; + } + if (!decided) { + bool in_area; + if (b3D) { + in_area = infX <= pos.x && + supX >= pos.x && + infY <= pos.y && + supY >= pos.y && + infZ <= pos.z && + supZ >= pos.z; + } + else { + in_area = infX <= pos.x && + supX >= pos.x && + infY <= pos.y && + supY >= pos.y; + } + result = false; + if (in_area) { + switch (command) { + case COMMAND_IS_COLL_IN_AREA_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_2D: + result = true; + break; + case COMMAND_IS_COLL_IN_AREA_ON_FOOT_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_ON_FOOT_2D: + result = !pPed->bInVehicle; + break; + case COMMAND_IS_COLL_IN_AREA_IN_CAR_2D: + case COMMAND_IS_COLL_STOPPED_IN_AREA_IN_CAR_2D: + result = pPed->bInVehicle; + break; + default: + script_assert(false); + break; + } + } + } + } + UpdateCompareFlag(result); + if (debug) + CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, infX, infY, supX, supY, b3D ? (infZ + supZ) / 2 : MAP_Z_LOW_LIMIT); + if (CTheScripts::DbgFlag) { + if (b3D) + CTheScripts::DrawDebugCube(infX, infY, infZ, supX, supY, supZ); + else + CTheScripts::DrawDebugSquare(infX, infY, supX, supY); + } +} +#endif void CTheScripts::PrintListSizes() { @@ -1717,6 +2198,172 @@ void CTheScripts::HighlightImportantAngledArea(uint32 id, float x1, float y1, fl CShadows::RenderIndicatorShadow(id, 2, gpGoalTex, ¢er, supX - center.x, 0.0f, 0.0f, center.y - supY, 0); } +#ifdef GTA_SCRIPT_COLLECTIVE +int CTheScripts::AddPedsInVehicleToCollective(int index) +{ + int colIndex = NextFreeCollectiveIndex; + AdvanceCollectiveIndex(); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(index); + script_assert(pVehicle); + CPed* pDriver = pVehicle->pDriver; + if (pDriver && !pDriver->IsPlayer() && pDriver->CharCreatedBy != MISSION_CHAR && pDriver->m_nPedType != PEDTYPE_COP) { + int index = FindFreeSlotInCollectiveArray(); + if (index > -1) { + CollectiveArray[index].colIndex = colIndex; + CollectiveArray[index].pedIndex = CPools::GetPedPool()->GetIndex(pDriver); + } + } + for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) { + CPed* pPassenger = pVehicle->pPassengers[i]; + if (pPassenger && !pPassenger->IsPlayer() && pPassenger->CharCreatedBy != MISSION_CHAR && pPassenger->m_nPedType != PEDTYPE_COP) { + int index = FindFreeSlotInCollectiveArray(); + if (index > -1) { + CollectiveArray[index].colIndex = colIndex; + CollectiveArray[index].pedIndex = CPools::GetPedPool()->GetIndex(pPassenger); + } + } + } + return colIndex; +} + +int CTheScripts::AddPedsInAreaToCollective(float x, float y, float z, float radius) +{ + int16 numFound; + CEntity* pEntities[64]; + int colIndex = NextFreeCollectiveIndex; + AdvanceCollectiveIndex(); + CWorld::FindObjectsInRange(CVector(x, y, z), radius, true, &numFound, 64, pEntities, false, true, true, false, false); + for (int16 i = 0; i < numFound; i++) { + if (pEntities[i]->GetType() == ENTITY_TYPE_PED) { + CPed* pPed = (CPed*)pEntities[i]; + if (pPed && !pPed->IsPlayer() && pPed->CharCreatedBy != MISSION_CHAR && pPed->m_nPedType != PEDTYPE_COP) { + int index = FindFreeSlotInCollectiveArray(); + if (index > -1) { + CollectiveArray[index].colIndex = colIndex; + CollectiveArray[index].pedIndex = CPools::GetPedPool()->GetIndex(pPed); + } + } + } + else if (pEntities[i]->GetType() == ENTITY_TYPE_VEHICLE) { + CVehicle* pVehicle = (CVehicle*)pEntities[i]; + CPed* pDriver = pVehicle->pDriver; + if (pDriver && !pDriver->IsPlayer() && pDriver->CharCreatedBy != MISSION_CHAR && pDriver->m_nPedType != PEDTYPE_COP) { + int index = FindFreeSlotInCollectiveArray(); + if (index > -1) { + CollectiveArray[index].colIndex = colIndex; + CollectiveArray[index].pedIndex = CPools::GetPedPool()->GetIndex(pDriver); + } + } + for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) { + CPed* pPassenger = pVehicle->pPassengers[i]; + if (pPassenger && !pPassenger->IsPlayer() && pPassenger->CharCreatedBy != MISSION_CHAR && pPassenger->m_nPedType != PEDTYPE_COP) { + int index = FindFreeSlotInCollectiveArray(); + if (index > -1) { + CollectiveArray[index].colIndex = colIndex; + CollectiveArray[index].pedIndex = CPools::GetPedPool()->GetIndex(pPassenger); + } + } + } + } + } + return colIndex; +} + +int CTheScripts::FindFreeSlotInCollectiveArray() +{ + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + if (CollectiveArray[i].colIndex == -1) + return i; + } + return -1; +} + +void CTheScripts::SetObjectiveForAllPedsInCollective(int colIndex, eObjective objective, int16 p1, int16 p2) +{ + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + if (CollectiveArray[i].colIndex = colIndex) { + CPed* pPed = CPools::GetPedPool()->GetAt(CollectiveArray[i].pedIndex); + if (pPed == nil) { + CollectiveArray[i].colIndex = -1; + CollectiveArray[i].pedIndex = 0; + } + else { + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(objective, p1, p2); + } + } + } +} + +void CTheScripts::SetObjectiveForAllPedsInCollective(int colIndex, eObjective objective, CVector p1, float p2) +{ + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + if (CollectiveArray[i].colIndex = colIndex) { + CPed* pPed = CPools::GetPedPool()->GetAt(CollectiveArray[i].pedIndex); + if (pPed == nil) { + CollectiveArray[i].colIndex = -1; + CollectiveArray[i].pedIndex = 0; + } + else { + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(objective, p1, p2); + } + } + } +} + +void CTheScripts::SetObjectiveForAllPedsInCollective(int colIndex, eObjective objective, CVector p1) +{ + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + if (CollectiveArray[i].colIndex = colIndex) { + CPed* pPed = CPools::GetPedPool()->GetAt(CollectiveArray[i].pedIndex); + if (pPed == nil) { + CollectiveArray[i].colIndex = -1; + CollectiveArray[i].pedIndex = 0; + } + else { + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(objective, p1); + } + } + } +} + +void CTheScripts::SetObjectiveForAllPedsInCollective(int colIndex, eObjective objective, void* p1) +{ + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + if (CollectiveArray[i].colIndex = colIndex) { + CPed* pPed = CPools::GetPedPool()->GetAt(CollectiveArray[i].pedIndex); + if (pPed == nil) { + CollectiveArray[i].colIndex = -1; + CollectiveArray[i].pedIndex = 0; + } + else { + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(objective, p1); + } + } + } +} + +void CTheScripts::SetObjectiveForAllPedsInCollective(int colIndex, eObjective objective) +{ + for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { + if (CollectiveArray[i].colIndex = colIndex) { + CPed* pPed = CPools::GetPedPool()->GetAt(CollectiveArray[i].pedIndex); + if (pPed == nil) { + CollectiveArray[i].colIndex = -1; + CollectiveArray[i].pedIndex = 0; + } + else { + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(objective); + } + } + } +} +#endif //GTA_SCRIPT_COLLECTIVE + bool CTheScripts::IsPedStopped(CPed* pPed) { if (pPed->bInVehicle) From dcb28bfd53bf3512ee59c1124c8ac57e619193cb Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 20 Dec 2020 17:12:34 +0300 Subject: [PATCH 08/46] fix --- src/control/Script.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/control/Script.h b/src/control/Script.h index 91eef6d2..1c4663ce 100644 --- a/src/control/Script.h +++ b/src/control/Script.h @@ -1,5 +1,6 @@ #pragma once #include "common.h" +#include "Ped.h" #include "PedType.h" #include "Text.h" #include "Sprite2d.h" @@ -10,7 +11,6 @@ class CVehicle; class CPed; class CObject; class CPlayerInfo; -enum eObjective; class CRunningScript; From cede32cb9e4675e25905f071ded47edda6d4f04e Mon Sep 17 00:00:00 2001 From: hazelnot Date: Wed, 23 Dec 2020 19:00:15 +0200 Subject: [PATCH 09/46] Changed outline to black --- logo.png | Bin 24957 -> 24295 bytes logo.svg | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/logo.png b/logo.png index c64fb1de752251c489d642ca635013d5fa4c5b31..50ae869051b2b808a05f999863c722cfff527a9c 100644 GIT binary patch literal 24295 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 Oa=fRjpUXO@geCw&zfW%f literal 24957 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 diff --git a/logo.svg b/logo.svg index ff01d499..9db8447c 100644 --- a/logo.svg +++ b/logo.svg @@ -7,7 +7,7 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - sodipodi:docname="re3_red.svg" + sodipodi:docname="re3_final.svg" inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" id="svg8" version="1.1" @@ -32,8 +32,8 @@ inkscape:document-rotation="0" inkscape:current-layer="g837" inkscape:document-units="mm" - inkscape:cy="492.8848" - inkscape:cx="549.85584" + inkscape:cy="544.84615" + inkscape:cx="415.73725" inkscape:zoom="0.7" inkscape:pageshadow="2" inkscape:pageopacity="0" @@ -64,7 +64,7 @@ transform="matrix(2.1130708,0,0,2.1130708,14.956432,63.50059)"> Date: Thu, 24 Dec 2020 09:41:35 +0100 Subject: [PATCH 10/46] make screen droplets not crash without neo.txd --- src/extras/screendroplets.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp index 3f91a754..54866bea 100644 --- a/src/extras/screendroplets.cpp +++ b/src/extras/screendroplets.cpp @@ -79,8 +79,10 @@ ScreenDroplets::Initialise(void) void ScreenDroplets::InitDraw(void) { - if(CustomPipes::neoTxd) - ms_maskTex = CustomPipes::neoTxd->find("dropmask"); + if(CustomPipes::neoTxd == nil) + return; + + ms_maskTex = CustomPipes::neoTxd->find("dropmask"); ms_screenTex = RwTextureCreate(nil); RwTextureSetFilterMode(ms_screenTex, rwFILTERLINEAR); @@ -136,6 +138,10 @@ ScreenDroplets::Shutdown(void) void ScreenDroplets::Process(void) { + // no need to do anything if we can't render + if(CustomPipes::neoTxd == nil) + return; + ProcessCameraMovement(); SprayDrops(); ProcessMoving(); @@ -173,6 +179,9 @@ ScreenDroplets::Render(void) { ScreenDrop *drop; + if(CustomPipes::neoTxd == nil) + return; + DefinedState(); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(ms_maskTex)); RwRenderStateSet(rwRENDERSTATEFOGENABLE, FALSE); From 8cc3f867a6446c2275d985599b639bb9c665f16b Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Thu, 24 Dec 2020 17:44:59 +0300 Subject: [PATCH 11/46] fixed double explosion --- src/peds/Ped.cpp | 2 ++ src/vehicles/Vehicle.cpp | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index ec56861e..b5ab2f21 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -4246,7 +4246,9 @@ CPed::PedSetOutCarCB(CAnimBlendAssociation *animAssoc, void *arg) veh->m_nGettingOutFlags &= ~GetCarDoorFlag(ped->m_vehEnterType); if (veh->pDriver == ped) { veh->RemoveDriver(); +#ifndef FIX_BUGS // RemoveDriver does it anyway veh->SetStatus(STATUS_ABANDONED); +#endif if (veh->m_nDoorLock == CARLOCK_LOCKED_INITIALLY) veh->m_nDoorLock = CARLOCK_UNLOCKED; if (ped->m_nPedType == PEDTYPE_COP && veh->IsLawEnforcementVehicle()) diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp index 9adcf148..ba9348f0 100644 --- a/src/vehicles/Vehicle.cpp +++ b/src/vehicles/Vehicle.cpp @@ -1171,7 +1171,10 @@ CVehicle::AddPassenger(CPed *passenger, uint8 n) void CVehicle::RemoveDriver(void) { - SetStatus(STATUS_ABANDONED); +#ifdef FIX_BUGS + if (GetStatus() != STATUS_WRECKED) +#endif + SetStatus(STATUS_ABANDONED); pDriver = nil; } From de31bdc89fe2b2d191bee7a0c224b35bc0c9612e Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 08:59:32 +0200 Subject: [PATCH 12/46] Small type use fixes --- src/audio/AudioLogic.cpp | 18 +++++++++--------- src/audio/AudioManager.cpp | 4 ++-- src/audio/AudioManager.h | 2 +- src/audio/PoliceRadio.cpp | 2 +- src/control/Garages.cpp | 2 +- src/peds/Ped.cpp | 2 +- src/render/Weather.cpp | 2 +- src/vehicles/Cranes.cpp | 4 ++-- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index ca395136..b41c63fe 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -128,31 +128,31 @@ cAudioManager::PostInitialiseGameSpecificSetup() { m_nFireAudioEntity = CreateEntity(AUDIOTYPE_FIRE, &gFireManager); if (m_nFireAudioEntity >= 0) - SetEntityStatus(m_nFireAudioEntity, 1); + SetEntityStatus(m_nFireAudioEntity, true); m_nCollisionEntity = CreateEntity(AUDIOTYPE_COLLISION, (void *)1); if (m_nCollisionEntity >= 0) - SetEntityStatus(m_nCollisionEntity, 1); + SetEntityStatus(m_nCollisionEntity, true); m_nFrontEndEntity = CreateEntity(AUDIOTYPE_FRONTEND, (void *)1); if (m_nFrontEndEntity >= 0) - SetEntityStatus(m_nFrontEndEntity, 1); + SetEntityStatus(m_nFrontEndEntity, true); m_nProjectileEntity = CreateEntity(AUDIOTYPE_PROJECTILE, (void *)1); if (m_nProjectileEntity >= 0) - SetEntityStatus(m_nProjectileEntity, 1); + SetEntityStatus(m_nProjectileEntity, true); m_nWaterCannonEntity = CreateEntity(AUDIOTYPE_WATERCANNON, (void *)1); if (m_nWaterCannonEntity >= 0) - SetEntityStatus(m_nWaterCannonEntity, 1); + SetEntityStatus(m_nWaterCannonEntity, true); m_nPoliceChannelEntity = CreateEntity(AUDIOTYPE_POLICERADIO, (void *)1); if (m_nPoliceChannelEntity >= 0) - SetEntityStatus(m_nPoliceChannelEntity, 1); + SetEntityStatus(m_nPoliceChannelEntity, true); m_nBridgeEntity = CreateEntity(AUDIOTYPE_BRIDGE, (void *)1); if (m_nBridgeEntity >= 0) - SetEntityStatus(m_nBridgeEntity, 1); + SetEntityStatus(m_nBridgeEntity, true); m_sMissionAudio.m_nSampleIndex = NO_SAMPLE; m_sMissionAudio.m_nLoadingStatus = LOADING_STATUS_NOT_LOADED; @@ -240,7 +240,7 @@ cAudioManager::ProcessReverb() const ; i++) { if (m_asActiveSamples[i].m_bReverbFlag) - SampleManager.SetChannelReverbFlag(i, 1); + SampleManager.SetChannelReverbFlag(i, true); } } } @@ -287,7 +287,7 @@ cAudioManager::ProcessSpecial() void cAudioManager::ProcessEntity(int32 id) { - if (m_asAudioEntities[id].m_nStatus) { + if (m_asAudioEntities[id].m_bStatus) { m_sQueueSample.m_nEntityIndex = id; switch (m_asAudioEntities[id].m_nType) { case AUDIOTYPE_PHYSICAL: diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 947bda40..868f1b65 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -128,7 +128,7 @@ cAudioManager::CreateEntity(eAudioType type, void *entity) for (uint32 i = 0; i < ARRAY_SIZE(m_asAudioEntities); i++) { if (!m_asAudioEntities[i].m_bIsUsed) { m_asAudioEntities[i].m_bIsUsed = true; - m_asAudioEntities[i].m_nStatus = 0; + m_asAudioEntities[i].m_bStatus = false; m_asAudioEntities[i].m_nType = type; m_asAudioEntities[i].m_pEntity = entity; m_asAudioEntities[i].m_awAudioEvent[0] = SOUND_NO_SOUND; @@ -163,7 +163,7 @@ void cAudioManager::SetEntityStatus(int32 id, uint8 status) { if (m_bIsInitialised && id >= 0 && id < NUM_AUDIOENTITIES && m_asAudioEntities[id].m_bIsUsed) - m_asAudioEntities[id].m_nStatus = status; + m_asAudioEntities[id].m_bStatus = status; } void diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index d781ad71..fbabde05 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -46,7 +46,7 @@ public: eAudioType m_nType; void *m_pEntity; bool m_bIsUsed; - uint8 m_nStatus; + uint8 m_bStatus; int16 m_awAudioEvent[NUM_AUDIOENTITY_EVENTS]; float m_afVolume[NUM_AUDIOENTITY_EVENTS]; uint8 m_AudioEvents; diff --git a/src/audio/PoliceRadio.cpp b/src/audio/PoliceRadio.cpp index 665494a3..37421904 100644 --- a/src/audio/PoliceRadio.cpp +++ b/src/audio/PoliceRadio.cpp @@ -93,7 +93,7 @@ cAudioManager::InitialisePoliceRadio() for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE; - SampleManager.SetChannelReverbFlag(policeChannel, 0); + SampleManager.SetChannelReverbFlag(policeChannel, false); gSpecialSuspectLastSeenReport = false; for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++) gMinTimeToNextReport[i] = m_FrameCounter; diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp index 418195c7..2b79b338 100644 --- a/src/control/Garages.cpp +++ b/src/control/Garages.cpp @@ -158,7 +158,7 @@ void CGarages::Init(void) aCarsInSafeHouse3[i].Init(); hGarages = DMAudio.CreateEntity(AUDIOTYPE_GARAGE, (void*)1); if (hGarages >= 0) - DMAudio.SetEntityStatus(hGarages, 1); + DMAudio.SetEntityStatus(hGarages, true); AddOne( CVector(CRUSHER_GARAGE_X1, CRUSHER_GARAGE_Y1, CRUSHER_GARAGE_Z1), CVector(CRUSHER_GARAGE_X2, CRUSHER_GARAGE_Y2, CRUSHER_GARAGE_Z2), diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index b5ab2f21..b8b3e92c 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -243,7 +243,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) bHasACamera = true; m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, this); - DMAudio.SetEntityStatus(m_audioEntityId, 1); + DMAudio.SetEntityStatus(m_audioEntityId, true); m_fearFlags = CPedType::GetThreats(m_nPedType); m_threatEntity = nil; m_eventOrThreat = CVector2D(0.0f, 0.0f); diff --git a/src/render/Weather.cpp b/src/render/Weather.cpp index e765f306..bf3e51b4 100644 --- a/src/render/Weather.cpp +++ b/src/render/Weather.cpp @@ -114,7 +114,7 @@ void CWeather::Init(void) ForcedWeatherType = WEATHER_RANDOM; SoundHandle = DMAudio.CreateEntity(AUDIOTYPE_WEATHER, (void*)1); if (SoundHandle >= 0) - DMAudio.SetEntityStatus(SoundHandle, 1); + DMAudio.SetEntityStatus(SoundHandle, true); } void CWeather::Update(void) diff --git a/src/vehicles/Cranes.cpp b/src/vehicles/Cranes.cpp index 564f493d..1191465a 100644 --- a/src/vehicles/Cranes.cpp +++ b/src/vehicles/Cranes.cpp @@ -85,7 +85,7 @@ void CCranes::AddThisOneCrane(CEntity* pEntity) pCrane->m_bWasMilitaryCrane = false; pCrane->m_nAudioEntity = DMAudio.CreateEntity(AUDIOTYPE_CRANE, &aCranes[NumCranes]); if (pCrane->m_nAudioEntity >= 0) - DMAudio.SetEntityStatus(pCrane->m_nAudioEntity, 1); + DMAudio.SetEntityStatus(pCrane->m_nAudioEntity, true); pCrane->m_bIsTop = (MODELID_CRANE_1 != pEntity->GetModelIndex()); // Is this used to avoid military crane? if (pCrane->m_bIsTop || pEntity->GetPosition().y > 0.0f) { @@ -669,7 +669,7 @@ void CCranes::Load(uint8* buf, uint32 size) for (int i = 0; i < NUM_CRANES; i++) { aCranes[i].m_nAudioEntity = DMAudio.CreateEntity(AUDIOTYPE_CRANE, &aCranes[i]); if (aCranes[i].m_nAudioEntity != 0) - DMAudio.SetEntityStatus(aCranes[i].m_nAudioEntity, 1); + DMAudio.SetEntityStatus(aCranes[i].m_nAudioEntity, true); } VALIDATESAVEBUF(size); From 6d75374c414e266503a980c664038357cc3ed574 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 09:06:49 +0200 Subject: [PATCH 13/46] Fix cAudioManager::ProcessSpecial --- src/audio/AudioLogic.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index b41c63fe..81ff1276 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -277,8 +277,7 @@ cAudioManager::ProcessSpecial() } CPlayerPed *playerPed = FindPlayerPed(); if (playerPed) { - const PedState &state = playerPed->m_nPedState; - if (state != PED_ENTER_CAR && state != PED_STEAL_CAR && !playerPed->bInVehicle) + if(playerPed->EnteringCar() && !playerPed->bInVehicle) SampleManager.StopChannel(m_nActiveSamples); } } From 687ff4bdbb422bfb6364b25df91203b98481e6fa Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 10:57:19 +0200 Subject: [PATCH 14/46] Fix debug menu memory leak --- src/extras/debugmenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extras/debugmenu.h b/src/extras/debugmenu.h index eb56c8f9..c2198aca 100644 --- a/src/extras/debugmenu.h +++ b/src/extras/debugmenu.h @@ -15,7 +15,7 @@ struct MenuEntry Menu *menu; MenuEntry(const char *name); - virtual ~MenuEntry(void) {} + virtual ~MenuEntry(void) { free((void*)name); } }; typedef MenuEntry DebugMenuEntry; From b12eef1d56575206538abed426a296fefe22e90e Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 15:18:13 +0200 Subject: [PATCH 15/46] Fix use of strncmp --- src/animation/AnimManager.cpp | 10 +-- src/control/Script4.cpp | 8 +-- src/core/FileLoader.cpp | 100 ++++++++++++++++------------- src/core/Frontend.cpp | 14 ++-- src/core/General.h | 9 +++ src/modelinfo/ClumpModelInfo.cpp | 4 +- src/modelinfo/PedModelInfo.cpp | 6 +- src/modelinfo/TimeModelInfo.cpp | 3 +- src/modelinfo/VehicleModelInfo.cpp | 12 ++-- src/peds/PedFight.cpp | 2 +- src/peds/PedType.cpp | 4 +- src/vehicles/HandlingMgr.cpp | 2 +- src/weapons/WeaponInfo.cpp | 2 +- 13 files changed, 99 insertions(+), 77 deletions(-) diff --git a/src/animation/AnimManager.cpp b/src/animation/AnimManager.cpp index 8d442b72..557bd842 100644 --- a/src/animation/AnimManager.cpp +++ b/src/animation/AnimManager.cpp @@ -810,11 +810,11 @@ CAnimManager::LoadAnimFile(int fd, bool compress) float *fbuf = (float*)buf; CFileMgr::Read(fd, (char*)&anpk, sizeof(IfpHeader)); - if(strncmp(anpk.ident, "ANLF", 4) == 0){ + if(!CGeneral::faststrncmp(anpk.ident, "ANLF", 4)) { ROUNDSIZE(anpk.size); CFileMgr::Read(fd, buf, anpk.size); numANPK = *(int*)buf; - }else if(strncmp(anpk.ident, "ANPK", 4) == 0){ + } else if(!CGeneral::faststrncmp(anpk.ident, "ANPK", 4)) { CFileMgr::Seek(fd, -8, 1); numANPK = 1; } @@ -870,13 +870,13 @@ CAnimManager::LoadAnimFile(int fd, bool compress) bool hasScale = false; bool hasTranslation = false; CFileMgr::Read(fd, (char*)&info, sizeof(info)); - if(strncmp(info.ident, "KRTS", 4) == 0){ + if(!CGeneral::faststrncmp(info.ident, "KRTS", 4)) { hasScale = true; seq->SetNumFrames(numFrames, true); - }else if(strncmp(info.ident, "KRT0", 4) == 0){ + }else if(!CGeneral::faststrncmp(info.ident, "KRT0", 4)) { hasTranslation = true; seq->SetNumFrames(numFrames, true); - }else if(strncmp(info.ident, "KR00", 4) == 0){ + }else if(!CGeneral::faststrncmp(info.ident, "KR00", 4)){ seq->SetNumFrames(numFrames, false); } diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp index 986e82f8..3c794859 100644 --- a/src/control/Script4.cpp +++ b/src/control/Script4.cpp @@ -2012,10 +2012,10 @@ int8 CRunningScript::ProcessCommands900To999(int32 command) case COMMAND_PRINT_HELP: { if (CCamera::m_bUseMouse3rdPerson && ( - strncmp((char*)&CTheScripts::ScriptSpace[m_nIp], "HELP15", 7) == 0 || - strncmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2A", 7) == 0 || - strncmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_3A", 7) == 0 || - strncmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_4A", 7) == 0)) { + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "HELP15") == 0 || + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2A") == 0 || + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_3A") == 0 || + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_4A") == 0)) { m_nIp += KEY_LENGTH_IN_SCRIPT; return 0; } diff --git a/src/core/FileLoader.cpp b/src/core/FileLoader.cpp index ac488dc9..926512b9 100644 --- a/src/core/FileLoader.cpp +++ b/src/core/FileLoader.cpp @@ -72,7 +72,11 @@ CFileLoader::LoadLevel(const char *filename) if(*line == '#') continue; - if(strncmp(line, "EXIT", 9) == 0) // BUG: 9? +#ifdef FIX_BUGS + if(strncmp(line, "EXIT", 4) == 0) +#else + if(strncmp(line, "EXIT", 9) == 0) +#endif break; if(strncmp(line, "IMAGEPATH", 9) == 0){ @@ -191,7 +195,7 @@ CFileLoader::LoadTexDictionary(const char *filename) struct ColHeader { - char ident[4]; + uint32 ident; uint32 size; }; @@ -209,7 +213,7 @@ CFileLoader::LoadCollisionFile(const char *filename) fd = CFileMgr::OpenFile(filename, "rb"); while(CFileMgr::Read(fd, (char*)&header, sizeof(header))){ - assert(strncmp(header.ident, "COLL", 4) == 0); + assert(header.ident == 'LLOC'); CFileMgr::Read(fd, (char*)work_buff, header.size); memcpy(modelname, work_buff, 24); @@ -863,6 +867,9 @@ CFileLoader::AddTexDictionaries(RwTexDictionary *dst, RwTexDictionary *src) RwTexDictionaryForAllTextures(src, MoveTexturesCB, dst); } +#define isLine3(l, a, b, c) ((l[0] == a) && (l[1] == b) && (l[2] == c)) +#define isLine4(l, a, b, c, d) ((l[0] == a) && (l[1] == b) && (l[2] == c) && (l[3] == d)) + void CFileLoader::LoadObjectTypes(const char *filename) { @@ -896,18 +903,18 @@ CFileLoader::LoadObjectTypes(const char *filename) continue; if(section == NONE){ - if(strncmp(line, "objs", 4) == 0) section = OBJS; - else if(strncmp(line, "tobj", 4) == 0) section = TOBJ; - else if(strncmp(line, "hier", 4) == 0) section = HIER; - else if(strncmp(line, "cars", 4) == 0) section = CARS; - else if(strncmp(line, "peds", 4) == 0) section = PEDS; - else if(strncmp(line, "path", 4) == 0) section = PATH; - else if(strncmp(line, "2dfx", 4) == 0) section = TWODFX; - }else if(strncmp(line, "end", 3) == 0){ + if(isLine4(line, 'o','b','j','s')) section = OBJS; + else if(isLine4(line, 't','o','b','j')) section = TOBJ; + else if(isLine4(line, 'h','i','e','r')) section = HIER; + else if(isLine4(line, 'c','a','r','s')) section = CARS; + else if(isLine4(line, 'p','e','d','s')) section = PEDS; + else if(isLine4(line, 'p','a','t','h')) section = PATH; + else if(isLine4(line, '2','d','f','x')) section = TWODFX; + }else if(isLine3(line, 'e','n','d')){ section = section == MLO ? OBJS : NONE; }else switch(section){ case OBJS: - if(strncmp(line, "sta", 3) == 0) + if(isLine3(line, 's','t','a')) mlo = LoadMLO(line); else LoadObject(line); @@ -930,9 +937,9 @@ CFileLoader::LoadObjectTypes(const char *filename) case PATH: if(pathIndex == -1){ id = LoadPathHeader(line, pathTypeStr); - if(strncmp(pathTypeStr, "ped", 4) == 0) + if(strcmp(pathTypeStr, "ped") == 0) pathType = 1; - else if(strncmp(pathTypeStr, "car", 4) == 0) + else if(strcmp(pathTypeStr, "car") == 0) pathType = 0; pathIndex = 0; }else{ @@ -1173,21 +1180,21 @@ CFileLoader::LoadVehicleObject(const char *line) mi->m_level = level; mi->m_compRules = comprules; - if(strncmp(type, "car", 4) == 0){ + if(strcmp(type, "car") == 0){ mi->m_wheelId = misc; mi->m_wheelScale = wheelScale; mi->m_vehicleType = VEHICLE_TYPE_CAR; - }else if(strncmp(type, "boat", 5) == 0){ + }else if(strcmp(type, "boat") == 0){ mi->m_vehicleType = VEHICLE_TYPE_BOAT; - }else if(strncmp(type, "train", 6) == 0){ + }else if(strcmp(type, "train") == 0){ mi->m_vehicleType = VEHICLE_TYPE_TRAIN; - }else if(strncmp(type, "heli", 5) == 0){ + }else if(strcmp(type, "heli") == 0){ mi->m_vehicleType = VEHICLE_TYPE_HELI; - }else if(strncmp(type, "plane", 6) == 0){ + }else if(strcmp(type, "plane") == 0){ mi->m_planeLodId = misc; mi->m_wheelScale = 1.0f; mi->m_vehicleType = VEHICLE_TYPE_PLANE; - }else if(strncmp(type, "bike", 5) == 0){ + }else if(strcmp(type, "bike") == 0){ mi->m_bikeSteerAngle = misc; mi->m_wheelScale = wheelScale; mi->m_vehicleType = VEHICLE_TYPE_BIKE; @@ -1197,31 +1204,31 @@ CFileLoader::LoadVehicleObject(const char *line) mi->m_handlingId = mod_HandlingManager.GetHandlingId(handlingId); // Well this is kinda dumb.... - if(strncmp(vehclass, "poorfamily", 11) == 0){ + if(strcmp(vehclass, "poorfamily") == 0){ mi->m_vehicleClass = CCarCtrl::POOR; while(frequency-- > 0) CCarCtrl::AddToCarArray(id, CCarCtrl::POOR); - }else if(strncmp(vehclass, "richfamily", 11) == 0){ + }else if(strcmp(vehclass, "richfamily") == 0){ mi->m_vehicleClass = CCarCtrl::RICH; while(frequency-- > 0) CCarCtrl::AddToCarArray(id, CCarCtrl::RICH); - }else if(strncmp(vehclass, "executive", 10) == 0){ + }else if(strcmp(vehclass, "executive") == 0){ mi->m_vehicleClass = CCarCtrl::EXEC; while(frequency-- > 0) CCarCtrl::AddToCarArray(id, CCarCtrl::EXEC); - }else if(strncmp(vehclass, "worker", 7) == 0){ + }else if(strcmp(vehclass, "worker") == 0){ mi->m_vehicleClass = CCarCtrl::WORKER; while(frequency-- > 0) CCarCtrl::AddToCarArray(id, CCarCtrl::WORKER); - }else if(strncmp(vehclass, "special", 8) == 0){ + }else if(strcmp(vehclass, "special") == 0){ mi->m_vehicleClass = CCarCtrl::SPECIAL; while(frequency-- > 0) CCarCtrl::AddToCarArray(id, CCarCtrl::SPECIAL); - }else if(strncmp(vehclass, "big", 4) == 0){ + }else if(strcmp(vehclass, "big") == 0){ mi->m_vehicleClass = CCarCtrl::BIG; while(frequency-- > 0) CCarCtrl::AddToCarArray(id, CCarCtrl::BIG); - }else if(strncmp(vehclass, "taxi", 5) == 0){ + }else if(strcmp(vehclass, "taxi") == 0){ mi->m_vehicleClass = CCarCtrl::TAXI; while(frequency-- > 0) CCarCtrl::AddToCarArray(id, CCarCtrl::TAXI); @@ -1402,12 +1409,12 @@ CFileLoader::LoadScene(const char *filename) continue; if(section == NONE){ - if(strncmp(line, "inst", 4) == 0) section = INST; - else if(strncmp(line, "zone", 4) == 0) section = ZONE; - else if(strncmp(line, "cull", 4) == 0) section = CULL; - else if(strncmp(line, "pick", 4) == 0) section = PICK; - else if(strncmp(line, "path", 4) == 0) section = PATH; - }else if(strncmp(line, "end", 3) == 0){ + if(isLine4(line, 'i','n','s','t')) section = INST; + else if(isLine4(line, 'z','o','n','e')) section = ZONE; + else if(isLine4(line, 'c','u','l','l')) section = CULL; + else if(isLine4(line, 'p','i','c','k')) section = PICK; + else if(isLine4(line, 'p','a','t','h')) section = PATH; + }else if(isLine3(line, 'e','n','d')){ section = NONE; }else switch(section){ case INST: @@ -1427,6 +1434,7 @@ CFileLoader::LoadScene(const char *filename) // unfinished in the game if(pathIndex == -1){ LoadPathHeader(line, pathTypeStr); + strcmp(pathTypeStr, "ped"); // type not set pathIndex = 0; }else{ @@ -1564,8 +1572,8 @@ CFileLoader::LoadMapZones(const char *filename) continue; if(section == NONE){ - if(strncmp(line, "zone", 4) == 0) section = ZONE; - }else if(strncmp(line, "end", 3) == 0){ + if(isLine4(line, 'z','o','n','e')) section = ZONE; + }else if(isLine3(line, 'e','n','d')){ section = NONE; }else switch(section){ case ZONE: { @@ -1607,20 +1615,20 @@ CFileLoader::ReloadPaths(const char *filename) continue; if (section == NONE) { - if (strncmp(line, "path", 4) == 0) { + if (isLine4(line, 'p','a','t','h')) { section = PATH; ThePaths.AllocatePathFindInfoMem(4500); } - } else if (strncmp(line, "end", 3) == 0) { + } else if (isLine3(line, 'e','n','d')) { section = NONE; } else { switch (section) { case PATH: if (pathIndex == -1) { id = LoadPathHeader(line, pathTypeStr); - if (strncmp(pathTypeStr, "ped", 4) == 0) + if (strcmp(pathTypeStr, "ped") == 0) pathType = 1; - else if (strncmp(pathTypeStr, "car", 4) == 0) + else if (strcmp(pathTypeStr, "car") == 0) pathType = 0; pathIndex = 0; } else { @@ -1663,10 +1671,10 @@ CFileLoader::ReloadObjectTypes(const char *filename) continue; if (section == NONE) { - if (strncmp(line, "objs", 4) == 0) section = OBJS; - else if (strncmp(line, "tobj", 4) == 0) section = TOBJ; - else if (strncmp(line, "2dfx", 4) == 0) section = TWODFX; - } else if (strncmp(line, "end", 3) == 0) { + if (isLine4(line, 'o','b','j','s')) section = OBJS; + else if (isLine4(line, 't','o','b','j')) section = TOBJ; + else if (isLine4(line, '2','d','f','x')) section = TWODFX; + } else if (isLine3(line, 'e','n','d')) { section = NONE; } else { switch (section) { @@ -1738,7 +1746,11 @@ CFileLoader::ReLoadScene(const char *filename) if (*line == '#') continue; - if (strncmp(line, "EXIT", 9) == 0) // BUG: 9? +#ifdef FIX_BUGS + if (strncmp(line, "EXIT", 4) == 0) +#else + if (strncmp(line, "EXIT", 9) == 0) +#endif break; if (strncmp(line, "IDE", 3) == 0) { diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 9c33c397..89edc04b 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -1314,7 +1314,7 @@ CMenuManager::Draw() #endif // Hide back button #ifdef PS2_LIKE_MENU - if ((i == NUM_MENUROWS - 1 || aScreens[m_nCurrScreen].m_aEntries[i+1].m_EntryName[0] == '\0') && strncmp(aScreens[m_nCurrScreen].m_aEntries[i].m_EntryName, "FEDS_TB", 8) == 0) + if ((i == NUM_MENUROWS - 1 || aScreens[m_nCurrScreen].m_aEntries[i+1].m_EntryName[0] == '\0') && strcmp(aScreens[m_nCurrScreen].m_aEntries[i].m_EntryName, "FEDS_TB") == 0) break; #endif if (aScreens[m_nCurrScreen].m_aEntries[i].m_Action != MENUACTION_LABEL && aScreens[m_nCurrScreen].m_aEntries[i].m_EntryName[0] != '\0') { @@ -1611,7 +1611,7 @@ CMenuManager::Draw() // Hide back button #ifdef PS2_LIKE_MENU if ((rowToCheck == NUM_MENUROWS - 1 || aScreens[m_nCurrScreen].m_aEntries[rowToCheck+1].m_EntryName[0] == '\0') && - strncmp(aScreens[m_nCurrScreen].m_aEntries[rowToCheck].m_EntryName, "FEDS_TB", 8) == 0) + strcmp(aScreens[m_nCurrScreen].m_aEntries[rowToCheck].m_EntryName, "FEDS_TB") == 0) break; #endif @@ -3061,7 +3061,7 @@ CMenuManager::DrawPlayerSetupScreen() SYSTEMTIME SystemTime; HANDLE handle = FindFirstFile("skins\\*.bmp", &FindFileData); for (int i = 1; handle != INVALID_HANDLE_VALUE && i; i = FindNextFile(handle, &FindFileData)) { - if (strncmp(FindFileData.cFileName, DEFAULT_SKIN_NAME, 5) != 0) { + if (strcmp(FindFileData.cFileName, DEFAULT_SKIN_NAME) != 0) { m_pSelectedSkin->nextSkin = new tSkinInfo; m_pSelectedSkin = m_pSelectedSkin->nextSkin; m_pSelectedSkin->skinId = nextSkinId; @@ -4645,15 +4645,15 @@ CMenuManager::ProcessButtonPresses(void) // Hide back button #ifdef PS2_LIKE_MENU - if ((goUp || goDown) && m_nCurrScreen != MENUPAGE_MULTIPLAYER_FIND_GAME && strncmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FEDS_TB", 8) == 0) + if ((goUp || goDown) && m_nCurrScreen != MENUPAGE_MULTIPLAYER_FIND_GAME && strcmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FEDS_TB") == 0) m_nCurrOption = goUp ? m_nCurrOption - 1 : (aScreens[m_nCurrScreen].m_aEntries[0].m_Action == MENUACTION_LABEL); #endif if (optionSelected) { int option = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action; if ((option == MENUACTION_CHANGEMENU) || (option == MENUACTION_POPULATESLOTS_CHANGEMENU)) { - if (strncmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FEDS_TB", 8) != 0 && - strncmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FESZ_CA", 8) != 0) { + if (strcmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FEDS_TB") != 0 && + strcmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FESZ_CA") != 0) { if (m_nCurrScreen == MENUPAGE_CHOOSE_DELETE_SLOT) { if (Slots[aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot - 1] == SLOT_EMPTY) @@ -4810,7 +4810,7 @@ CMenuManager::ProcessButtonPresses(void) } } if (changeMenu) { - if (strncmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FEDS_TB", 8) == 0) { + if (strcmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FEDS_TB") == 0) { #ifndef TIDY_UP_PBP ResetHelperText(); ChangeScreen(!m_bGameNotLoaded ? aScreens[m_nCurrScreen].m_PreviousPage[1] : aScreens[m_nCurrScreen].m_PreviousPage[0], diff --git a/src/core/General.h b/src/core/General.h index dde43c0f..de803558 100644 --- a/src/core/General.h +++ b/src/core/General.h @@ -121,6 +121,15 @@ public: return *str2 != '\0'; } + static bool faststrncmp(const char *str1, const char *str2, uint32 count) + { + for(uint32 i = 0; *str1 && i < count; str1++, str2++, i++) { + if (*str1 != *str2) + return true; + } + return false; + } + static bool faststricmp(const char *str1, const char *str2) { for (; *str1; str1++, str2++) { diff --git a/src/modelinfo/ClumpModelInfo.cpp b/src/modelinfo/ClumpModelInfo.cpp index 1ae936a7..64bb5ed5 100644 --- a/src/modelinfo/ClumpModelInfo.cpp +++ b/src/modelinfo/ClumpModelInfo.cpp @@ -112,7 +112,7 @@ CClumpModelInfo::SetClump(RpClump *clump) } RpHAnimHierarchySetFlags(hier, (RpHAnimHierarchyFlag)(rpHANIMHIERARCHYUPDATEMODELLINGMATRICES|rpHANIMHIERARCHYUPDATELTMS)); } - if(strncmp(GetName(), "playerh", 8) == 0){ + if(strcmp(GetName(), "playerh") == 0){ // playerh is incompatible with the xbox player skin // so check if player model is skinned and only apply skin to head if it isn't CPedModelInfo *body = (CPedModelInfo*)CModelInfo::GetModelInfo(MI_PLAYER); @@ -120,7 +120,7 @@ CClumpModelInfo::SetClump(RpClump *clump) RpClumpForAllAtomics(clump, SetAtomicRendererCB, (void*)CVisibilityPlugins::RenderPlayerCB); } #else - if(strncmp(GetName(), "playerh", 8) == 0){ + if(strcmp(GetName(), "playerh") == 0){ RpClumpForAllAtomics(clump, SetAtomicRendererCB, (void*)CVisibilityPlugins::RenderPlayerCB); #endif } diff --git a/src/modelinfo/PedModelInfo.cpp b/src/modelinfo/PedModelInfo.cpp index b77cccda..38ce6d38 100644 --- a/src/modelinfo/PedModelInfo.cpp +++ b/src/modelinfo/PedModelInfo.cpp @@ -97,7 +97,7 @@ CPedModelInfo::SetClump(RpClump *clump) #endif #ifdef PED_SKIN // CB has to be set here before atomics are detached from clump - if(strncmp(GetName(), "player", 7) == 0) + if(strcmp(GetName(), "player") == 0) RpClumpForAllAtomics(clump, SetAtomicRendererCB, (void*)CVisibilityPlugins::RenderPlayerCB); if(IsClumpSkinned(clump)){ LimbCBarg limbs = { this, clump, { 0, 0, 0 } }; @@ -108,7 +108,7 @@ CPedModelInfo::SetClump(RpClump *clump) if(m_hitColModel == nil && !IsClumpSkinned(clump)) CreateHitColModel(); // And again because CClumpModelInfo resets it - if(strncmp(GetName(), "player", 7) == 0) + if(strcmp(GetName(), "player") == 0) RpClumpForAllAtomics(m_clump, SetAtomicRendererCB, (void*)CVisibilityPlugins::RenderPlayerCB); else if(IsClumpSkinned(clump)) // skinned peds have no low detail version, so they don't have the right render Cb @@ -118,7 +118,7 @@ CPedModelInfo::SetClump(RpClump *clump) SetFrameIds(m_pPedIds); if(m_hitColModel == nil) CreateHitColModel(); - if(strncmp(GetName(), "player", 7) == 0) + if(strcmp(GetName(), "player") == 0) RpClumpForAllAtomics(m_clump, SetAtomicRendererCB, (void*)CVisibilityPlugins::RenderPlayerCB); #endif } diff --git a/src/modelinfo/TimeModelInfo.cpp b/src/modelinfo/TimeModelInfo.cpp index d4f92293..c1c18dac 100644 --- a/src/modelinfo/TimeModelInfo.cpp +++ b/src/modelinfo/TimeModelInfo.cpp @@ -2,6 +2,7 @@ #include "Camera.h" #include "ModelInfo.h" +#include "General.h" CTimeModelInfo* CTimeModelInfo::FindOtherTimeModel(void) @@ -23,7 +24,7 @@ CTimeModelInfo::FindOtherTimeModel(void) for(i = 0; i < MODELINFOSIZE; i++){ CBaseModelInfo *mi = CModelInfo::GetModelInfo(i); if (mi && mi->GetModelType() == MITYPE_TIME && - strncmp(name, mi->GetName(), 24) == 0){ + !CGeneral::faststrncmp(name, mi->GetName(), MAX_MODEL_NAME)){ m_otherTimeModelID = i; return (CTimeModelInfo*)mi; } diff --git a/src/modelinfo/VehicleModelInfo.cpp b/src/modelinfo/VehicleModelInfo.cpp index cc2a7e34..c0daaead 100644 --- a/src/modelinfo/VehicleModelInfo.cpp +++ b/src/modelinfo/VehicleModelInfo.cpp @@ -293,7 +293,7 @@ CVehicleModelInfo::SetAtomicRendererCB(RpAtomic *atomic, void *data) name = GetFrameNodeName(RpAtomicGetFrame(atomic)); alpha = false; RpGeometryForAllMaterials(RpAtomicGetGeometry(atomic), HasAlphaMaterialCB, &alpha); - if(strstr(name, "_hi") || strncmp(name, "extra", 5) == 0){ + if(strstr(name, "_hi") || !CGeneral::faststrncmp(name, "extra", 5)) { if(alpha || strncmp(name, "windscreen", 10) == 0) CVisibilityPlugins::SetAtomicRenderCallback(atomic, CVisibilityPlugins::RenderVehicleHiDetailAlphaCB); else @@ -319,7 +319,7 @@ CVehicleModelInfo::SetAtomicRendererCB_BigVehicle(RpAtomic *atomic, void *data) name = GetFrameNodeName(RpAtomicGetFrame(atomic)); alpha = false; RpGeometryForAllMaterials(RpAtomicGetGeometry(atomic), HasAlphaMaterialCB, &alpha); - if(strstr(name, "_hi") || strncmp(name, "extra", 5) == 0){ + if(strstr(name, "_hi") || !CGeneral::faststrncmp(name, "extra", 5)) { if(alpha) CVisibilityPlugins::SetAtomicRenderCallback(atomic, CVisibilityPlugins::RenderVehicleHiDetailAlphaCB_BigVehicle); else @@ -367,7 +367,7 @@ CVehicleModelInfo::SetAtomicRendererCB_Boat(RpAtomic *atomic, void *data) clump = (RpClump*)data; name = GetFrameNodeName(RpAtomicGetFrame(atomic)); - if(strcmp(name, "boat_hi") == 0 || strncmp(name, "extra", 5) == 0) + if(strcmp(name, "boat_hi") == 0 || !CGeneral::faststrncmp(name, "extra", 5)) CVisibilityPlugins::SetAtomicRenderCallback(atomic, CVisibilityPlugins::RenderVehicleHiDetailCB_Boat); else if(strstr(name, "_hi")) CVisibilityPlugins::SetAtomicRenderCallback(atomic, CVisibilityPlugins::RenderVehicleHiDetailCB); @@ -914,11 +914,11 @@ CVehicleModelInfo::LoadVehicleColours(void) continue; if(section == NONE){ - if(strncmp(&line[start], "col", 3) == 0) + if(line[start] == 'c' && line[start + 1] == 'o' && line[start + 2] == 'l') section = COLOURS; - else if(strncmp(&line[start], "car", 3) == 0) + else if(line[start] == 'c' && line[start + 1] == 'a' && line[start + 2] == 'r') section = CARS; - }else if(strncmp(&line[start], "end", 3) == 0){ + }else if(line[start] == 'e' && line[start + 1] == 'n' && line[start + 2] == 'd'){ section = NONE; }else if(section == COLOURS){ sscanf(&line[start], // BUG: games doesn't add start diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp index b57364d8..6188f019 100644 --- a/src/peds/PedFight.cpp +++ b/src/peds/PedFight.cpp @@ -1778,7 +1778,7 @@ CPed::LoadFightData(void) break; } - if (strncmp(animName, "null", 4) != 0) { + if (strcmp(animName, "null") != 0) { animAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, animName); tFightMoves[moveId].animId = (AnimationId)animAssoc->animId; } else { diff --git a/src/peds/PedType.cpp b/src/peds/PedType.cpp index 6e745bd7..598c379d 100644 --- a/src/peds/PedType.cpp +++ b/src/peds/PedType.cpp @@ -79,7 +79,7 @@ CPedType::LoadPedData(void) // Game uses just "line" here since sscanf already trims whitespace, but this is safer sscanf(&line[lp], "%s", word); - if(strncmp(word, "Threat", 7) == 0){ + if(strcmp(word, "Threat") == 0){ flags = 0; lp += 7; while(sscanf(&line[lp], "%s", word) == 1 && lp <= linelen){ @@ -92,7 +92,7 @@ CPedType::LoadPedData(void) lp++; } ms_apPedType[type]->m_threats = flags; - }else if(strncmp(word, "Avoid", 6) == 0){ + }else if(strcmp(word, "Avoid") == 0){ flags = 0; lp += 6; while(sscanf(&line[lp], "%s", word) == 1 && lp <= linelen){ diff --git a/src/vehicles/HandlingMgr.cpp b/src/vehicles/HandlingMgr.cpp index 18a2481e..7b74b590 100644 --- a/src/vehicles/HandlingMgr.cpp +++ b/src/vehicles/HandlingMgr.cpp @@ -115,7 +115,7 @@ cHandlingDataMgr::LoadHandlingData(void) end = start+1; // yeah, this is kinda crappy - if(strncmp(line, ";the end", 9) == 0) + if(strcmp(line, ";the end") == 0) keepGoing = 0; else if(line[0] != ';'){ field = 0; diff --git a/src/weapons/WeaponInfo.cpp b/src/weapons/WeaponInfo.cpp index 284a0c20..69d2faed 100644 --- a/src/weapons/WeaponInfo.cpp +++ b/src/weapons/WeaponInfo.cpp @@ -136,7 +136,7 @@ CWeaponInfo::LoadWeaponData(void) animAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, animToPlay); animId = static_cast(animAssoc->animId); - if (strncmp(anim2ToPlay, "null", 4) != 0) { + if (strcmp(anim2ToPlay, "null") != 0) { animAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, anim2ToPlay); ms_apWeaponInfos[weaponType].m_Anim2ToPlay = (AnimationId) animAssoc->animId; } From b8bf3cb790a4c57d2f103e7f26131fc2455fcb13 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 17:39:49 +0200 Subject: [PATCH 16/46] cPedParams fixes --- src/audio/AudioLogic.cpp | 75 ++++++++++++++-------------------------- src/audio/AudioManager.h | 7 ++++ 2 files changed, 33 insertions(+), 49 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 81ff1276..349da2b4 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -1903,7 +1903,6 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) float vol; bool noReflections; float maxDist; - cPedParams pedParams; static uint8 WaveIndex = 41; static uint8 GunIndex = 53; @@ -2242,21 +2241,21 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) break; } case SOUND_PED_HELI_PLAYER_FOUND: - pedParams.m_pPed = nil; - pedParams.m_bDistanceCalculated = false; - pedParams.m_fDistance = 0.0f; + { + cPedParams pedParams; pedParams.m_bDistanceCalculated = params.m_bDistanceCalculated; pedParams.m_fDistance = params.m_fDistance; SetupPedComments(pedParams, SOUND_PED_HELI_PLAYER_FOUND); continue; + } case SOUND_PED_BODYCAST_HIT: - pedParams.m_pPed = nil; - pedParams.m_bDistanceCalculated = false; - pedParams.m_fDistance = 0.0f; + { + cPedParams pedParams; pedParams.m_bDistanceCalculated = params.m_bDistanceCalculated; pedParams.m_fDistance = params.m_fDistance; SetupPedComments(pedParams, SOUND_PED_BODYCAST_HIT); continue; + } case SOUND_WATER_FALL: { const float SOUND_INTENSITY = 40.0f; m_sQueueSample.m_nSampleIndex = SFX_SPLASH_1; @@ -2954,13 +2953,9 @@ cAudioManager::ProcessPed(CPhysical *ped) { cPedParams params; - params.m_pPed = nil; - params.m_bDistanceCalculated = false; - params.m_fDistance = 0.0f; - m_sQueueSample.m_vecPos = ped->GetPosition(); - // params.m_bDistanceCalculated = false; + params.m_bDistanceCalculated = false; params.m_pPed = (CPed *)ped; params.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); if (ped->GetModelIndex() == MI_FATMALE02) @@ -6362,26 +6357,25 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) uint8 emittingVolume; float distSquared; - cPedParams male; - cPedParams female; - static uint8 iSound = 0; switch (sound) { case SCRIPT_SOUND_INJURED_PED_MALE_OUCH_S: case SCRIPT_SOUND_INJURED_PED_MALE_OUCH_L: - male.m_pPed = nil; - male.m_bDistanceCalculated = false; - male.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); - SetupPedComments(male, SOUND_INJURED_PED_MALE_OUCH); + { + cPedParams pedParams; + pedParams.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); + SetupPedComments(pedParams, SOUND_INJURED_PED_MALE_OUCH); return; + } case SCRIPT_SOUND_INJURED_PED_FEMALE_OUCH_S: case SCRIPT_SOUND_INJURED_PED_FEMALE_OUCH_L: - female.m_pPed = nil; - female.m_bDistanceCalculated = false; - female.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); - SetupPedComments(female, SOUND_INJURED_PED_FEMALE); + { + cPedParams pedParams; + pedParams.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); + SetupPedComments(pedParams, SOUND_INJURED_PED_FEMALE); return; + } case SCRIPT_SOUND_GATE_START_CLUNK: case SCRIPT_SOUND_GATE_STOP_CLUNK: m_sQueueSample.m_fSoundIntensity = 40.0f; @@ -6536,36 +6530,20 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex = SFX_BULLET_SHELL_HIT_GROUND_2; m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 11000; m_sQueueSample.m_nReleasingVolumeModificator = 18; - m_sQueueSample.m_fSoundIntensity = 20.0f; - m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - emittingVolume = m_anRandomTable[2] % 20 + 30; - distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); - if (distSquared < SQR(m_sQueueSample.m_fSoundIntensity)) { - m_sQueueSample.m_fDistance = Sqrt(distSquared); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); - if (m_sQueueSample.m_nVolume != 0) { - m_sQueueSample.m_nCounter = iSound++; - m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_nEmittingVolume = emittingVolume; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; - m_sQueueSample.m_bReverbFlag = true; - AddSampleToRequestedQueue(); - } - } - return; + break; case SURFACE_WATER: return; default: + m_sQueueSample.m_nSampleIndex = SFX_BULLET_SHELL_HIT_GROUND_1; + m_sQueueSample.m_nFrequency = RandomDisplacement(750) + 18000; + m_sQueueSample.m_nReleasingVolumeModificator = 15; break; } + } else { + m_sQueueSample.m_nSampleIndex = SFX_BULLET_SHELL_HIT_GROUND_1; + m_sQueueSample.m_nFrequency = RandomDisplacement(750) + 18000; + m_sQueueSample.m_nReleasingVolumeModificator = 15; } - m_sQueueSample.m_nSampleIndex = SFX_BULLET_SHELL_HIT_GROUND_1; - m_sQueueSample.m_nFrequency = RandomDisplacement(750) + 18000; - m_sQueueSample.m_nReleasingVolumeModificator = 15; m_sQueueSample.m_fSoundIntensity = 20.0f; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_fSpeedMultiplier = 0.0f; @@ -7714,7 +7692,6 @@ cAudioManager::ProcessPoliceCellBeatingScriptObject(uint8 sound) int32 sampleIndex; uint8 emittingVol; float distSquared; - cPedParams params; static uint8 iSound = 0; @@ -7755,9 +7732,9 @@ cAudioManager::ProcessPoliceCellBeatingScriptObject(uint8 sound) m_sQueueSample.m_bReverbFlag = true; m_sQueueSample.m_bRequireReflection = false; AddSampleToRequestedQueue(); + cPedParams params; params.m_bDistanceCalculated = true; params.m_fDistance = distSquared; - params.m_pPed = nil; SetupPedComments(params, SOUND_INJURED_PED_MALE_PRISON); } gCellNextTime = time + 500 + m_anRandomTable[3] % 1500; diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index fbabde05..7fdfecc2 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -132,6 +132,13 @@ public: bool m_bDistanceCalculated; float m_fDistance; CPed *m_pPed; + + cPedParams() + { + m_pPed = nil; + m_bDistanceCalculated = false; + m_fDistance = 0.0f; + } }; class cVehicleParams From 03c3eeb937ca69d337b333d6dbd36f5251753e0e Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 19:57:09 +0200 Subject: [PATCH 17/46] cAudioManager::ProcessBoatEngine fixes --- src/audio/AudioLogic.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 349da2b4..54466813 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -2400,7 +2400,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) CBoat *boat; float padRelativeAccerate; float gasPedal; - int32 padAccelerate; + float padAccelerate; uint8 emittingVol; float oneShotVol; @@ -2436,10 +2436,10 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) } if (FindPlayerVehicle() == params.m_pVehicle) { padAccelerate = Max(Pads[0].GetAccelerate(), Pads[0].GetBrake()); - padRelativeAccerate = padAccelerate / 255; + padRelativeAccerate = padAccelerate / 255.0f; emittingVol = (100.f * padRelativeAccerate) + 15; m_sQueueSample.m_nFrequency = (3000.f * padRelativeAccerate) + 6000; - if (!boat->m_bIsAnchored) + if (!boat->bPropellerInWater) m_sQueueSample.m_nFrequency = 11 * m_sQueueSample.m_nFrequency / 10; } else { gasPedal = Abs(boat->m_fGasPedal); @@ -2449,7 +2449,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) } else { emittingVol = (100.f * gasPedal) + 15; m_sQueueSample.m_nFrequency = (3000.f * gasPedal) + 6000; - if (!boat->m_bIsAnchored) + if (!boat->bPropellerInWater) m_sQueueSample.m_nFrequency = 11 * m_sQueueSample.m_nFrequency / 10; } } From 7a7061ea92b63f17eb9f9c5d2551b8957c9fb7ed Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 20:00:12 +0200 Subject: [PATCH 18/46] Use intensity in ProcessBoatEngine --- src/audio/AudioLogic.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 54466813..78174f33 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -2407,13 +2407,13 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) static uint16 LastAccel = 0; static uint8 LastVol = 0; - static const int intensity = 50; + static const float intensity = 50.0f; if (params.m_fDistance < SQR(intensity)) { boat = (CBoat *)params.m_pVehicle; if (params.m_nIndex == REEFER) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); - m_sQueueSample.m_nVolume = ComputeVolume(80, 50.f, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(80, intensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = 39; m_sQueueSample.m_nSampleIndex = SFX_FISHING_BOAT_IDLE; @@ -2453,7 +2453,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) m_sQueueSample.m_nFrequency = 11 * m_sQueueSample.m_nFrequency / 10; } } - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, 50.f, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, intensity, m_sQueueSample.m_fDistance); if (!m_sQueueSample.m_nVolume) return true; m_sQueueSample.m_nCounter = 40; @@ -2511,7 +2511,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) } } CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, 50.f, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, intensity, m_sQueueSample.m_fDistance); if (!m_sQueueSample.m_nVolume) return true; m_sQueueSample.m_nFrequency += (m_sQueueSample.m_nEntityIndex * 65536) % 1000; From 2b96be0418ba60fd2a17d3e03b2cb8b1c906ed24 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Dec 2020 20:22:43 +0200 Subject: [PATCH 19/46] cVehicleParams ctor --- src/audio/AudioLogic.cpp | 7 +++---- src/audio/AudioManager.h | 10 ++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 78174f33..94ca67de 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -579,14 +579,13 @@ cAudioManager::ProcessVehicle(CVehicle *veh) m_sQueueSample.m_vecPos = veh->GetPosition(); params.m_bDistanceCalculated = false; - params.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); params.m_pVehicle = veh; - params.m_pTransmission = nil; - params.m_nIndex = 0; - params.m_fVelocityChange = 0.0f; + params.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); if (handling != nil) params.m_pTransmission = &handling->Transmission; + else + params.m_pTransmission = nil; params.m_nIndex = veh->GetModelIndex() - MI_FIRST_VEHICLE; if (params.m_pVehicle->GetStatus() == STATUS_SIMPLE) diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 7fdfecc2..e3d91876 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -150,6 +150,16 @@ public: cTransmission *m_pTransmission; int32 m_nIndex; float m_fVelocityChange; + + cVehicleParams() + { + m_bDistanceCalculated = false; + m_fDistance = 0.0f; + m_pVehicle = 0; + m_pTransmission = nil; + m_nIndex = 0; + m_fVelocityChange = 0.0f; + } }; VALIDATE_SIZE(cVehicleParams, 0x18); From 47b620396facf41ea9fe4dcb44765bc7adb27e9f Mon Sep 17 00:00:00 2001 From: erorcun Date: Sat, 26 Dec 2020 12:06:22 +0300 Subject: [PATCH 20/46] insert logo to README --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 27b8d8e9..5dff7b91 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# re3 +re3 logo + [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmaster&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=master) From 612470cb3f88c0bf59be8684f9c251e7c93497ef Mon Sep 17 00:00:00 2001 From: aap Date: Sat, 26 Dec 2020 11:43:43 +0100 Subject: [PATCH 21/46] unfix particle bug --- src/render/Particle.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/render/Particle.cpp b/src/render/Particle.cpp index f175c264..844b6acd 100644 --- a/src/render/Particle.cpp +++ b/src/render/Particle.cpp @@ -388,9 +388,11 @@ void CParticle::Initialise() gpFlame5Tex = RwTextureRead("flame5", nil); -#ifdef FIX_BUGS +//#ifdef FIX_BUGS +#if 0 gpFlame5Raster = RwTextureGetRaster(gpFlame5Tex); #else + // this seems to have become more of a design choice gpFlame5Raster = RwTextureGetRaster(gpFlame1Tex); // copy-paste bug ? #endif From d459ef882082f41a94b9ae9c298d361b15374cfd Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sat, 26 Dec 2020 14:21:45 +0200 Subject: [PATCH 22/46] Weapon flags changed from bit fields to bit mask (R* vision) --- src/audio/AudioManager.h | 4 ++-- src/peds/Ped.cpp | 2 +- src/peds/PedFight.cpp | 12 ++++++------ src/peds/PlayerPed.cpp | 24 ++++++++++++------------ src/weapons/ShotInfo.cpp | 6 +++--- src/weapons/WeaponInfo.cpp | 18 ++---------------- src/weapons/WeaponInfo.h | 30 +++++++++++++++++------------- 7 files changed, 43 insertions(+), 53 deletions(-) diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index e3d91876..9fe2f4ef 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -135,9 +135,9 @@ public: cPedParams() { - m_pPed = nil; m_bDistanceCalculated = false; m_fDistance = 0.0f; + m_pPed = nil; } }; @@ -155,7 +155,7 @@ public: { m_bDistanceCalculated = false; m_fDistance = 0.0f; - m_pVehicle = 0; + m_pVehicle = nil; m_pTransmission = nil; m_nIndex = 0; m_fVelocityChange = 0.0f; diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index b8b3e92c..3d2278bd 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -1046,7 +1046,7 @@ CPed::SetAimFlag(float angle) m_lookTimer = 0; m_pLookTarget = nil; m_pSeekTarget = nil; - if (CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_bCanAimWithArm) + if (CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) m_pedIK.m_flags |= CPedIK::AIMS_WITH_ARM; else m_pedIK.m_flags &= ~CPedIK::AIMS_WITH_ARM; diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp index 6188f019..ca720479 100644 --- a/src/peds/PedFight.cpp +++ b/src/peds/PedFight.cpp @@ -201,7 +201,7 @@ CPed::PointGunAt(void) weaponAssoc->SetCurrentTime(weaponInfo->m_fAnimLoopStart); weaponAssoc->flags &= ~ASSOC_RUNNING; - if (weaponInfo->m_bCanAimWithArm) + if (weaponInfo->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) m_pedIK.m_flags |= CPedIK::AIMS_WITH_ARM; else m_pedIK.m_flags &= ~CPedIK::AIMS_WITH_ARM; @@ -300,7 +300,7 @@ CPed::SetAttack(CEntity *victim) if (m_pSeekTarget) m_pSeekTarget->RegisterReference((CEntity **) &m_pSeekTarget); - if (curWeapon->m_bCanAim) { + if (curWeapon->IsFlagSet(WEAPONFLAG_CANAIM)) { CVector aimPos = GetRight() * 0.1f + GetForward() * 0.2f + GetPosition(); CEntity *obstacle = CWorld::TestSphereAgainstWorld(aimPos, 0.2f, nil, true, false, false, true, false, false); if (obstacle) @@ -342,7 +342,7 @@ CPed::SetAttack(CEntity *victim) if (pointBlankStatus == POINT_BLANK_FOR_WANTED_PED || !victimPed) StartFightAttack(200); } else { - if (!curWeapon->m_bCanAim) + if (!curWeapon->IsFlagSet(WEAPONFLAG_CANAIM)) m_pSeekTarget = nil; if (m_nPedState != PED_AIM_GUN) @@ -417,7 +417,7 @@ CPed::ClearAttackByRemovingAnim(void) if (!weaponAssoc) { weaponAssoc = RpAnimBlendClumpGetAssociation(GetClump(), weapon->m_Anim2ToPlay); - if (!weaponAssoc && weapon->m_bThrow) + if (!weaponAssoc && weapon->IsFlagSet(WEAPONFLAG_THROW)) weaponAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_THROWU); if (!weaponAssoc) { @@ -569,7 +569,7 @@ CPed::Attack(void) delayBetweenAnimAndFire = ourWeapon->m_fAnim2FrameFire; // Long throw granade, molotov - if (!weaponAnimAssoc && ourWeapon->m_bThrow) { + if (!weaponAnimAssoc && ourWeapon->IsFlagSet(WEAPONFLAG_THROW)) { weaponAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_THROWU); delayBetweenAnimAndFire = 0.2f; } @@ -605,7 +605,7 @@ CPed::Attack(void) animStart = ourWeapon->m_fAnimLoopStart; weaponAnimTime = weaponAnimAssoc->currentTime; if (weaponAnimTime > animStart && weaponAnimTime - weaponAnimAssoc->timeStep <= animStart) { - if (ourWeapon->m_bCanAimWithArm) + if (ourWeapon->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) m_pedIK.m_flags |= CPedIK::AIMS_WITH_ARM; else m_pedIK.m_flags &= ~CPedIK::AIMS_WITH_ARM; diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp index 330d209b..ef5815ed 100644 --- a/src/peds/PlayerPed.cpp +++ b/src/peds/PlayerPed.cpp @@ -192,7 +192,7 @@ CPlayerPed::MakeChangesForNewWeapon(int8 weapon) GetWeapon()->m_nAmmoInClip = Min(GetWeapon()->m_nAmmoTotal, CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_nAmountofAmmunition); - if (!(CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_bCanAim)) + if (!CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->IsFlagSet(WEAPONFLAG_CANAIM)) ClearWeaponTarget(); CAnimBlendAssociation *weaponAnim = RpAnimBlendClumpGetAssociation(GetClump(), CWeaponInfo::GetWeaponInfo(WEAPONTYPE_SNIPERRIFLE)->m_AnimToPlay); @@ -685,7 +685,7 @@ CPlayerPed::PlayerControlFighter(CPad *padUsed) bIsAttacking = false; } - if (!CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_bHeavy && padUsed->JumpJustDown()) { + if (!CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->IsFlagSet(WEAPONFLAG_HEAVY) && padUsed->JumpJustDown()) { if (m_nEvadeAmount != 0 && m_pEvadingFrom) { SetEvasiveDive((CPhysical*)m_pEvadingFrom, 1); m_nEvadeAmount = 0; @@ -723,13 +723,13 @@ CPlayerPed::PlayerControl1stPersonRunAround(CPad *padUsed) m_fMoveSpeed = 0.0f; } } - if (!(CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_bHeavy) && padUsed->GetSprint()) { + if (!CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->IsFlagSet(WEAPONFLAG_HEAVY) && padUsed->GetSprint()) { m_nMoveState = PEDMOVE_SPRINT; } if (m_nPedState != PED_FIGHT) SetRealMoveAnim(); - if (!bIsInTheAir && !(CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_bHeavy) + if (!bIsInTheAir && !(CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->IsFlagSet(WEAPONFLAG_HEAVY)) && padUsed->JumpJustDown() && m_nPedState != PED_JUMP) { ClearAttack(); ClearWeaponTarget(); @@ -1061,12 +1061,12 @@ CPlayerPed::ProcessPlayerWeapon(CPad *padUsed) m_nSelectedWepSlot == m_currentWeapon && m_nMoveState != PEDMOVE_SPRINT) { // Weapons except throwable and melee ones - if (weaponInfo->m_bCanAim || weaponInfo->m_b1stPerson || weaponInfo->m_bExpands) { - if ((padUsed->GetTarget() && weaponInfo->m_bCanAimWithArm) || padUsed->GetWeapon()) { + if (weaponInfo->IsFlagSet(WEAPONFLAG_CANAIM) || weaponInfo->IsFlagSet(WEAPONFLAG_1ST_PERSON) || weaponInfo->IsFlagSet(WEAPONFLAG_EXPANDS)) { + if ((padUsed->GetTarget() && weaponInfo->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) || padUsed->GetWeapon()) { float limitedCam = CGeneral::LimitRadianAngle(-TheCamera.Orientation); // On this one we can rotate arm. - if (weaponInfo->m_bCanAimWithArm) { + if (weaponInfo->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) { if (!padUsed->GetWeapon()) { // making this State != ATTACK still stops it after attack. Re-start it immediately! SetPointGunAt(nil); bIsPointingGunAt = false; // to not stop after attack @@ -1083,7 +1083,7 @@ CPlayerPed::ProcessPlayerWeapon(CPad *padUsed) m_headingRate = 50.0f; // Anim. fix for shotgun, ak47 and m16 (we must finish rot. it quickly) - if (weaponInfo->m_bCanAim && padUsed->WeaponJustDown()) { + if (weaponInfo->IsFlagSet(WEAPONFLAG_CANAIM) && padUsed->WeaponJustDown()) { m_fRotationCur = CGeneral::LimitRadianAngle(m_fRotationCur); float limitedRotDest = m_fRotationDest; @@ -1096,7 +1096,7 @@ CPlayerPed::ProcessPlayerWeapon(CPad *padUsed) m_fRotationCur += (limitedRotDest - m_fRotationCur) / 2; } } - } else if (weaponInfo->m_bCanAimWithArm && m_nPedState != PED_ATTACK) + } else if (weaponInfo->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM) && m_nPedState != PED_ATTACK) ClearPointGunAt(); } } @@ -1133,7 +1133,7 @@ CPlayerPed::ProcessPlayerWeapon(CPad *padUsed) TheCamera.UpdateAimingCoors(m_pPointGunAt->GetPosition()); } #ifdef FREE_CAM - else if ((CCamera::bFreeCam && weaponInfo->m_eWeaponFire == WEAPON_FIRE_MELEE) || (weaponInfo->m_bCanAim && !CCamera::m_bUseMouse3rdPerson)) { + else if ((CCamera::bFreeCam && weaponInfo->m_eWeaponFire == WEAPON_FIRE_MELEE) || (weaponInfo->IsFlagSet(WEAPONFLAG_CANAIM) && !CCamera::m_bUseMouse3rdPerson)) { #else else if (weaponInfo->m_bCanAim && !CCamera::m_bUseMouse3rdPerson) { #endif @@ -1215,13 +1215,13 @@ CPlayerPed::PlayerControlZelda(CPad *padUsed) } } - if (!(CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_bHeavy) && padUsed->GetSprint()) { + if (!CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->IsFlagSet(WEAPONFLAG_HEAVY) && padUsed->GetSprint()) { m_nMoveState = PEDMOVE_SPRINT; } if (m_nPedState != PED_FIGHT) SetRealMoveAnim(); - if (!bIsInTheAir && !(CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_bHeavy) + if (!bIsInTheAir && !(CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->IsFlagSet(WEAPONFLAG_HEAVY)) && padUsed->JumpJustDown() && m_nPedState != PED_JUMP) { ClearAttack(); ClearWeaponTarget(); diff --git a/src/weapons/ShotInfo.cpp b/src/weapons/ShotInfo.cpp index c0ab9ac1..e604093c 100644 --- a/src/weapons/ShotInfo.cpp +++ b/src/weapons/ShotInfo.cpp @@ -76,7 +76,7 @@ CShotInfo::AddShot(CEntity *sourceEntity, eWeaponType weapon, CVector startPos, gaShotInfo[slot].m_areaAffected.z += CShotInfo::ms_afRandTable[CGeneral::GetRandomNumber() % ARRAY_SIZE(ms_afRandTable)]; } gaShotInfo[slot].m_areaAffected.Normalise(); - if (weaponInfo->m_bRandSpeed) + if (weaponInfo->IsFlagSet(WEAPONFLAG_RAND_SPEED)) gaShotInfo[slot].m_areaAffected *= CShotInfo::ms_afRandTable[CGeneral::GetRandomNumber() % ARRAY_SIZE(ms_afRandTable)] + weaponInfo->m_fSpeed; else gaShotInfo[slot].m_areaAffected *= weaponInfo->m_fSpeed; @@ -117,10 +117,10 @@ CShotInfo::Update() shot.m_inUse = false; } - if (weaponInfo->m_bSlowsDown) + if (weaponInfo->IsFlagSet(WEAPONFLAG_SLOWS_DOWN)) shot.m_areaAffected *= pow(0.96, CTimer::GetTimeStep()); // FRAMERATE - if (weaponInfo->m_bExpands) + if (weaponInfo->IsFlagSet(WEAPONFLAG_EXPANDS)) shot.m_radius += 0.075f * CTimer::GetTimeStep(); shot.m_startPos += CTimer::GetTimeStep() * shot.m_areaAffected; diff --git a/src/weapons/WeaponInfo.cpp b/src/weapons/WeaponInfo.cpp index 69d2faed..546aa6ba 100644 --- a/src/weapons/WeaponInfo.cpp +++ b/src/weapons/WeaponInfo.cpp @@ -39,11 +39,7 @@ CWeaponInfo::Initialise(void) ms_apWeaponInfos[i].m_eWeaponFire = WEAPON_FIRE_INSTANT_HIT; ms_apWeaponInfos[i].m_AnimToPlay = ANIM_PUNCH_R; ms_apWeaponInfos[i].m_Anim2ToPlay = NUM_ANIMS; - ms_apWeaponInfos[i].m_bUseGravity = 1; - ms_apWeaponInfos[i].m_bSlowsDown = 1; - ms_apWeaponInfos[i].m_bRandSpeed = 1; - ms_apWeaponInfos[i].m_bExpands = 1; - ms_apWeaponInfos[i].m_bExplodes = 1; + ms_apWeaponInfos[i].m_Flags = WEAPONFLAG_USE_GRAVITY | WEAPONFLAG_SLOWS_DOWN | WEAPONFLAG_RAND_SPEED | WEAPONFLAG_EXPANDS | WEAPONFLAG_EXPLODES; } debug("Loading weapon data...\n"); LoadWeaponData(); @@ -160,17 +156,7 @@ CWeaponInfo::LoadWeaponData(void) ms_apWeaponInfos[weaponType].m_fAnimFrameFire = delayBetweenAnimAndFire / 30.0f; ms_apWeaponInfos[weaponType].m_fAnim2FrameFire = delayBetweenAnim2AndFire / 30.0f; ms_apWeaponInfos[weaponType].m_nModelId = modelId; - ms_apWeaponInfos[weaponType].m_bUseGravity = flags & 1; - ms_apWeaponInfos[weaponType].m_bSlowsDown = (flags >> 1) & 1; - ms_apWeaponInfos[weaponType].m_bDissipates = (flags >> 2) & 1; - ms_apWeaponInfos[weaponType].m_bRandSpeed = (flags >> 3) & 1; - ms_apWeaponInfos[weaponType].m_bExpands = (flags >> 4) & 1; - ms_apWeaponInfos[weaponType].m_bExplodes = (flags >> 5) & 1; - ms_apWeaponInfos[weaponType].m_bCanAim = (flags >> 6) & 1; - ms_apWeaponInfos[weaponType].m_bCanAimWithArm = (flags >> 7) & 1; - ms_apWeaponInfos[weaponType].m_b1stPerson = (flags >> 8) & 1; - ms_apWeaponInfos[weaponType].m_bHeavy = (flags >> 9) & 1; - ms_apWeaponInfos[weaponType].m_bThrow = (flags >> 10) & 1; + ms_apWeaponInfos[weaponType].m_Flags = flags; } } diff --git a/src/weapons/WeaponInfo.h b/src/weapons/WeaponInfo.h index c89dd482..69ad1f39 100644 --- a/src/weapons/WeaponInfo.h +++ b/src/weapons/WeaponInfo.h @@ -3,8 +3,22 @@ #include "AnimationId.h" #include "WeaponType.h" +enum +{ + WEAPONFLAG_USE_GRAVITY = 1, + WEAPONFLAG_SLOWS_DOWN = 1 << 1, + WEAPONFLAG_DISSIPATES = 1 << 2, + WEAPONFLAG_RAND_SPEED = 1 << 3, + WEAPONFLAG_EXPANDS = 1 << 4, + WEAPONFLAG_EXPLODES = 1 << 5, + WEAPONFLAG_CANAIM = 1 << 6, + WEAPONFLAG_CANAIM_WITHARM = 1 << 7, + WEAPONFLAG_1ST_PERSON = 1 << 8, + WEAPONFLAG_HEAVY = 1 << 9, + WEAPONFLAG_THROW = 1 << 10, +}; + class CWeaponInfo { -// static CWeaponInfo(&ms_apWeaponInfos)[14]; static CWeaponInfo ms_apWeaponInfos[WEAPONTYPE_LAST_WEAPONTYPE]; public: eWeaponFire m_eWeaponFire; @@ -25,18 +39,7 @@ public: float m_fAnimFrameFire; float m_fAnim2FrameFire; int32 m_nModelId; - // flags - uint8 m_bUseGravity : 1; - uint8 m_bSlowsDown : 1; - uint8 m_bDissipates : 1; - uint8 m_bRandSpeed : 1; - uint8 m_bExpands : 1; - uint8 m_bExplodes : 1; - uint8 m_bCanAim : 1; - uint8 m_bCanAimWithArm : 1; - uint8 m_b1stPerson : 1; - uint8 m_bHeavy : 1; - uint8 m_bThrow : 1; + uint32 m_Flags; static void Initialise(void); static void LoadWeaponData(void); @@ -44,6 +47,7 @@ public: static eWeaponFire FindWeaponFireType(char *name); static eWeaponType FindWeaponType(char *name); static void Shutdown(void); + bool IsFlagSet(uint32 flag) const { return (m_Flags & flag) != 0; } }; VALIDATE_SIZE(CWeaponInfo, 0x54); \ No newline at end of file From b21ca72c8b8ef02a9af8b60a9aaea67b08c0a5b1 Mon Sep 17 00:00:00 2001 From: aap Date: Sat, 26 Dec 2020 14:48:47 +0100 Subject: [PATCH 23/46] make screendrops independent of neo.txd; enable new rendering by default --- src/core/config.h | 9 +++------ src/extras/screendroplets.cpp | 38 +++++++++++++++++++++++++---------- src/fakerw/fake.cpp | 12 +++++------ 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/core/config.h b/src/core/config.h index e5a97049..d3196f9b 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -249,17 +249,14 @@ enum Config { #define DISABLE_VSYNC_ON_TEXTURE_CONVERSION // make texture conversion work faster by disabling vsync //#define USE_TEXTURE_POOL #ifdef LIBRW -//#define EXTENDED_COLOURFILTER // more options for colour filter (replaces mblur) -//#define EXTENDED_PIPELINES // custom render pipelines (includes Neo) -//#define SCREEN_DROPLETS // neo water droplets +#define EXTENDED_COLOURFILTER // more options for colour filter (replaces mblur) +#define EXTENDED_PIPELINES // custom render pipelines (includes Neo) +#define SCREEN_DROPLETS // neo water droplets #endif #ifndef EXTENDED_COLOURFILTER #undef SCREEN_DROPLETS // we need the backbuffer for this effect #endif -#ifndef EXTENDED_PIPELINES -#undef SCREEN_DROPLETS // we need neo.txd -#endif // Particle //#define PC_PARTICLE diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp index 54866bea..59c597f7 100644 --- a/src/extras/screendroplets.cpp +++ b/src/extras/screendroplets.cpp @@ -76,13 +76,36 @@ ScreenDroplets::Initialise(void) ms_splashObject = nil; } +// Create white circle mask for rain drops +static RwTexture* +CreateDropMask(int32 size) +{ + RwImage *img = RwImageCreate(size, size, 32); + RwImageAllocatePixels(img); + + uint8 *pixels = RwImageGetPixels(img); + int32 stride = RwImageGetStride(img); + + for(int y = 0; y < size; y++){ + float yf = ((y + 0.5f)/size - 0.5f)*2.0f; + for(int x = 0; x < size; x++){ + float xf = ((x + 0.5f)/size - 0.5f)*2.0f; + memset(&pixels[y*stride + x*4], xf*xf + yf*yf < 1.0f ? 0xFF : 0x00, 4); + } + } + + int32 width, height, depth, format; + RwImageFindRasterFormat(img, rwRASTERTYPETEXTURE, &width, &height, &depth, &format); + RwRaster *ras = RwRasterCreate(width, height, depth, format); + RwRasterSetFromImage(ras, img); + RwImageDestroy(img); + return RwTextureCreate(ras); +} + void ScreenDroplets::InitDraw(void) { - if(CustomPipes::neoTxd == nil) - return; - - ms_maskTex = CustomPipes::neoTxd->find("dropmask"); + ms_maskTex = CreateDropMask(64); ms_screenTex = RwTextureCreate(nil); RwTextureSetFilterMode(ms_screenTex, rwFILTERLINEAR); @@ -138,10 +161,6 @@ ScreenDroplets::Shutdown(void) void ScreenDroplets::Process(void) { - // no need to do anything if we can't render - if(CustomPipes::neoTxd == nil) - return; - ProcessCameraMovement(); SprayDrops(); ProcessMoving(); @@ -179,9 +198,6 @@ ScreenDroplets::Render(void) { ScreenDrop *drop; - if(CustomPipes::neoTxd == nil) - return; - DefinedState(); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(ms_maskTex)); RwRenderStateSet(rwRENDERSTATEFOGENABLE, FALSE); diff --git a/src/fakerw/fake.cpp b/src/fakerw/fake.cpp index 2e04aed2..a3b9258b 100644 --- a/src/fakerw/fake.cpp +++ b/src/fakerw/fake.cpp @@ -171,8 +171,8 @@ RwFrame *RwCameraGetFrame(const RwCamera *camera) { return camera->getFrame( RwImage *RwImageCreate(RwInt32 width, RwInt32 height, RwInt32 depth) { return Image::create(width, height, depth); } RwBool RwImageDestroy(RwImage * image) { image->destroy(); return true; } -RwImage *RwImageAllocatePixels(RwImage * image); -RwImage *RwImageFreePixels(RwImage * image); +RwImage *RwImageAllocatePixels(RwImage * image) { image->allocate(); return image; } +RwImage *RwImageFreePixels(RwImage * image) { image->free(); return image; } RwImage *RwImageCopy(RwImage * destImage, const RwImage * sourceImage); RwImage *RwImageResize(RwImage * image, RwInt32 width, RwInt32 height); RwImage *RwImageApplyMask(RwImage * image, const RwImage * mask); @@ -187,10 +187,10 @@ RwImage *RwImageSetPixels(RwImage * image, RwUInt8 * pixels) { image->pixels RwImage *RwImageSetPalette(RwImage * image, RwRGBA * palette) { image->palette = (uint8*)palette; return image; } RwInt32 RwImageGetWidth(const RwImage * image) { return image->width; } RwInt32 RwImageGetHeight(const RwImage * image) { return image->height; } -RwInt32 RwImageGetDepth(const RwImage * image); -RwInt32 RwImageGetStride(const RwImage * image); -RwUInt8 *RwImageGetPixels(const RwImage * image); -RwRGBA *RwImageGetPalette(const RwImage * image); +RwInt32 RwImageGetDepth(const RwImage * image) { return image->depth; } +RwInt32 RwImageGetStride(const RwImage * image) { return image->stride; } +RwUInt8 *RwImageGetPixels(const RwImage * image) { return image->pixels; } +RwRGBA *RwImageGetPalette(const RwImage * image) { return (RwRGBA*)image->palette; } RwUInt32 RwRGBAToPixel(RwRGBA * rgbIn, RwInt32 rasterFormat); RwRGBA *RwRGBASetFromPixel(RwRGBA * rgbOut, RwUInt32 pixelValue, RwInt32 rasterFormat); RwBool RwImageSetGamma(RwReal gammaValue); From 7cdec23ef23486542b4c164d0aab4a9e7afb116c Mon Sep 17 00:00:00 2001 From: aap Date: Sat, 26 Dec 2020 15:19:27 +0100 Subject: [PATCH 24/46] include case --- src/extras/screendroplets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp index 59c597f7..f2b978eb 100644 --- a/src/extras/screendroplets.cpp +++ b/src/extras/screendroplets.cpp @@ -10,7 +10,7 @@ #include "General.h" #include "Main.h" #include "RwHelper.h" -#include "Main.h" +#include "main.h" #include "Timer.h" #include "Camera.h" #include "ZoneCull.h" From 075650b9f3477b074ccef25258daa017b71e8873 Mon Sep 17 00:00:00 2001 From: aap Date: Sat, 26 Dec 2020 15:22:23 +0100 Subject: [PATCH 25/46] ffs --- src/extras/screendroplets.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp index f2b978eb..9ac60d4f 100644 --- a/src/extras/screendroplets.cpp +++ b/src/extras/screendroplets.cpp @@ -8,9 +8,8 @@ #endif #include "General.h" -#include "Main.h" -#include "RwHelper.h" #include "main.h" +#include "RwHelper.h" #include "Timer.h" #include "Camera.h" #include "ZoneCull.h" From c5010d443c4e7a12a70927e33bb52c7fe50fdddc Mon Sep 17 00:00:00 2001 From: aap Date: Sat, 26 Dec 2020 15:41:57 +0100 Subject: [PATCH 26/46] fix a struct init --- src/extras/custompipes.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/extras/custompipes.cpp b/src/extras/custompipes.cpp index bb3ebd2e..e6dff12a 100644 --- a/src/extras/custompipes.cpp +++ b/src/extras/custompipes.cpp @@ -133,7 +133,11 @@ EnvMapRender(void) EnvMapCam->getFrame()->matrix.pos = camPos; EnvMapCam->getFrame()->transform(&EnvMapCam->getFrame()->matrix, rw::COMBINEREPLACE); - rw::RGBA skycol = { CTimeCycle::GetSkyBottomRed(), CTimeCycle::GetSkyBottomGreen(), CTimeCycle::GetSkyBottomBlue(), 255 }; + rw::RGBA skycol; + skycol.red = CTimeCycle::GetSkyBottomRed(); + skycol.green = CTimeCycle::GetSkyBottomGreen(); + skycol.blue = CTimeCycle::GetSkyBottomBlue(); + skycol.alpha = 255; EnvMapCam->clear(&skycol, rwCAMERACLEARZ|rwCAMERACLEARIMAGE); RwCameraBeginUpdate(EnvMapCam); bRenderingEnvMap = true; From 36e64dbd22a7e5ec6fc33a5087ed9788f1874f84 Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 27 Dec 2020 05:23:37 +0300 Subject: [PATCH 27/46] signed/unsigned fixes, and some other fixes --- src/core/Camera.cpp | 4 ++-- src/core/EventList.cpp | 4 ++-- src/core/EventList.h | 2 +- src/core/FileMgr.cpp | 14 ++++++++------ src/core/FileMgr.h | 6 +++--- src/core/Fire.cpp | 9 ++++----- src/core/Streaming.h | 8 ++++---- src/core/common.h | 5 +++++ src/peds/PedType.cpp | 17 ++++++++--------- src/rw/VisibilityPlugins.cpp | 6 +++--- src/rw/VisibilityPlugins.h | 6 +++--- src/text/Text.cpp | 6 +++--- src/text/Text.h | 4 ++-- 13 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index 1f498102..b46bd2da 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -2986,12 +2986,12 @@ CCamera::LoadTrainCamNodes(char const *name) char token[16] = { 0 }; char filename[16] = { 0 }; uint8 *buf; - size_t bufpos = 0; + ssize_t bufpos = 0; int field = 0; int tokpos = 0; char c; int i; - size_t len; + ssize_t len; strcpy(filename, name); len = (int)strlen(filename); diff --git a/src/core/EventList.cpp b/src/core/EventList.cpp index 8d69ba78..93f72d4e 100644 --- a/src/core/EventList.cpp +++ b/src/core/EventList.cpp @@ -120,7 +120,7 @@ CEventList::RegisterEvent(eEventType type, eEventEntity entityType, CEntity *ent } if(criminal == FindPlayerPed()) - ReportCrimeForEvent(type, (uintptr)ent, copsDontCare); + ReportCrimeForEvent(type, (intptr)ent, copsDontCare); } void @@ -198,7 +198,7 @@ CEventList::FindClosestEvent(eEventType type, CVector posn, int32 *event) } void -CEventList::ReportCrimeForEvent(eEventType type, int32 crimeId, bool copsDontCare) +CEventList::ReportCrimeForEvent(eEventType type, intptr crimeId, bool copsDontCare) { eCrimeType crime; switch(type){ diff --git a/src/core/EventList.h b/src/core/EventList.h index 8840afc4..4ced3a83 100644 --- a/src/core/EventList.h +++ b/src/core/EventList.h @@ -59,7 +59,7 @@ public: static bool GetEvent(eEventType type, int32 *event); static void ClearEvent(int32 event); static bool FindClosestEvent(eEventType type, CVector posn, int32 *event); - static void ReportCrimeForEvent(eEventType type, int32, bool); + static void ReportCrimeForEvent(eEventType type, intptr, bool); }; extern CEvent gaEvent[NUMEVENTS]; \ No newline at end of file diff --git a/src/core/FileMgr.cpp b/src/core/FileMgr.cpp index 6e6a8efc..99923ddf 100644 --- a/src/core/FileMgr.cpp +++ b/src/core/FileMgr.cpp @@ -240,20 +240,22 @@ CFileMgr::SetDirMyDocuments(void) mychdir(_psGetUserFilesFolder()); } -size_t +ssize_t CFileMgr::LoadFile(const char *file, uint8 *buf, int unused, const char *mode) { int fd; - size_t n, len; + ssize_t n, len; fd = myfopen(file, mode); if(fd == 0) - return 0; + return -1; len = 0; do{ n = myfread(buf + len, 1, 0x4000, fd); - if(n < 0) +#ifndef FIX_BUGS + if (n < 0) return -1; +#endif len += n; }while(n == 0x4000); buf[len] = 0; @@ -274,13 +276,13 @@ CFileMgr::OpenFileForWriting(const char *file) } size_t -CFileMgr::Read(int fd, const char *buf, int len) +CFileMgr::Read(int fd, const char *buf, ssize_t len) { return myfread((void*)buf, 1, len, fd); } size_t -CFileMgr::Write(int fd, const char *buf, int len) +CFileMgr::Write(int fd, const char *buf, ssize_t len) { return myfwrite((void*)buf, 1, len, fd); } diff --git a/src/core/FileMgr.h b/src/core/FileMgr.h index 4734720e..98a78360 100644 --- a/src/core/FileMgr.h +++ b/src/core/FileMgr.h @@ -9,12 +9,12 @@ public: static void ChangeDir(const char *dir); static void SetDir(const char *dir); static void SetDirMyDocuments(void); - static size_t LoadFile(const char *file, uint8 *buf, int unused, const char *mode); + static ssize_t LoadFile(const char *file, uint8 *buf, int unused, const char *mode); static int OpenFile(const char *file, const char *mode); static int OpenFile(const char *file) { return OpenFile(file, "rb"); } static int OpenFileForWriting(const char *file); - static size_t Read(int fd, const char *buf, int len); - static size_t Write(int fd, const char *buf, int len); + static size_t Read(int fd, const char *buf, ssize_t len); + static size_t Write(int fd, const char *buf, ssize_t len); static bool Seek(int fd, int offset, int whence); static bool ReadLine(int fd, char *buf, int len); static int CloseFile(int fd); diff --git a/src/core/Fire.cpp b/src/core/Fire.cpp index 2c57c066..984b21bb 100644 --- a/src/core/Fire.cpp +++ b/src/core/Fire.cpp @@ -43,7 +43,7 @@ CFire::ProcessFire(void) float fDamagePlayer; float fDamagePeds; float fDamageVehicle; - int8 nRandNumber; + int16 nRandNumber; float fGreen; float fRed; CVector lightpos; @@ -135,11 +135,10 @@ CFire::ProcessFire(void) CShadows::StoreStaticShadow((uintptr)this, SHADOWTYPE_ADDITIVE, gpShadowExplosionTex, &lightpos, 7.0f, 0.0f, 0.0f, -7.0f, 0, nRandNumber / 2, nRandNumber / 2, 0, 10.0f, 1.0f, 40.0f, 0, 0.0f); } - fGreen = nRandNumber / 128; - fRed = nRandNumber / 128; + fGreen = nRandNumber / 128.f; + fRed = nRandNumber / 128.f; - CPointLights::AddLight(0, m_vecPos, CVector(0.0f, 0.0f, 0.0f), - 12.0f, fRed, fGreen, 0, 0, 0); + CPointLights::AddLight(CPointLights::LIGHT_POINT, m_vecPos, CVector(0.0f, 0.0f, 0.0f), 12.0f, fRed, fGreen, 0, 0, 0); } else { Extinguish(); } diff --git a/src/core/Streaming.h b/src/core/Streaming.h index ee9183a5..0e2e89be 100644 --- a/src/core/Streaming.h +++ b/src/core/Streaming.h @@ -140,7 +140,7 @@ public: static bool RemoveLeastUsedModel(void); static void RemoveAllUnusedModels(void); static void RemoveUnusedModelsInLoadedList(void); - static bool RemoveReferencedTxds(size_t mem); + static bool RemoveReferencedTxds(size_t mem); // originally signed static int32 GetAvailableVehicleSlot(void); static bool IsTxdUsedByRequestedModels(int32 txdId); static bool AddToLoadedVehiclesList(int32 modelId); @@ -176,11 +176,11 @@ public: static void DeleteFarAwayRwObjects(const CVector &pos); static void DeleteAllRwObjects(void); static void DeleteRwObjectsAfterDeath(const CVector &pos); - static void DeleteRwObjectsBehindCamera(size_t mem); + static void DeleteRwObjectsBehindCamera(size_t mem); // originally signed static void DeleteRwObjectsInSectorList(CPtrList &list); static void DeleteRwObjectsInOverlapSectorList(CPtrList &list, int32 x, int32 y); - static bool DeleteRwObjectsBehindCameraInSectorList(CPtrList &list, size_t mem); - static bool DeleteRwObjectsNotInFrustumInSectorList(CPtrList &list, size_t mem); + static bool DeleteRwObjectsBehindCameraInSectorList(CPtrList &list, size_t mem); // originally signed + static bool DeleteRwObjectsNotInFrustumInSectorList(CPtrList &list, size_t mem); // originally signed static void LoadScene(const CVector &pos); diff --git a/src/core/common.h b/src/core/common.h index ffae30bf..50002ab5 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -73,11 +73,16 @@ typedef int16_t int16; typedef uint32_t uint32; typedef int32_t int32; typedef uintptr_t uintptr; +typedef intptr_t intptr; typedef uint64_t uint64; typedef int64_t int64; // hardcode ucs-2 typedef uint16_t wchar; +#if defined(_MSC_VER) +typedef ptrdiff_t ssize_t; +#endif + #ifndef nil #define nil NULL #endif diff --git a/src/peds/PedType.cpp b/src/peds/PedType.cpp index 598c379d..bacb1a78 100644 --- a/src/peds/PedType.cpp +++ b/src/peds/PedType.cpp @@ -45,7 +45,7 @@ CPedType::LoadPedData(void) char *buf; char line[256]; char word[32]; - size_t bp, buflen; + ssize_t bp, buflen; int lp, linelen; int type; uint32 flags; @@ -54,9 +54,9 @@ CPedType::LoadPedData(void) type = NUM_PEDTYPES; buf = new char[16 * 1024]; - CFileMgr::SetDir("DATA"); - buflen = CFileMgr::LoadFile("PED.DAT", (uint8*)buf, 16 * 1024, "r"); - CFileMgr::SetDir(""); + CFileMgr::SetDir("DATA"); + buflen = CFileMgr::LoadFile("PED.DAT", (uint8*)buf, 16 * 1024, "r"); + CFileMgr::SetDir(""); for(bp = 0; bp < buflen; ){ // read file line by line @@ -246,19 +246,18 @@ CPedStats::LoadPedStats(void) char *buf; char line[256]; char name[32]; - size_t bp, buflen; + ssize_t bp, buflen; int lp, linelen; int type; float fleeDist, headingChangeRate, attackStrength, defendWeakness; int fear, temper, lawfullness, sexiness, flags; - type = 0; buf = new char[16 * 1024]; - CFileMgr::SetDir("DATA"); - buflen = CFileMgr::LoadFile("PEDSTATS.DAT", (uint8*)buf, 16 * 1024, "r"); - CFileMgr::SetDir(""); + CFileMgr::SetDir("DATA"); + buflen = CFileMgr::LoadFile("PEDSTATS.DAT", (uint8*)buf, 16 * 1024, "r"); + CFileMgr::SetDir(""); for(bp = 0; bp < buflen; ){ // read file line by line diff --git a/src/rw/VisibilityPlugins.cpp b/src/rw/VisibilityPlugins.cpp index 21e00725..916696de 100644 --- a/src/rw/VisibilityPlugins.cpp +++ b/src/rw/VisibilityPlugins.cpp @@ -936,12 +936,12 @@ CVisibilityPlugins::FrameCopyConstructor(void *dst, const void *src, int32, int3 } void -CVisibilityPlugins::SetFrameHierarchyId(RwFrame *frame, uintptr id) +CVisibilityPlugins::SetFrameHierarchyId(RwFrame *frame, intptr id) { FRAMEEXT(frame)->id = id; } -uintptr +intptr CVisibilityPlugins::GetFrameHierarchyId(RwFrame *frame) { return FRAMEEXT(frame)->id; @@ -978,7 +978,7 @@ void CVisibilityPlugins::SetClumpModelInfo(RpClump *clump, CClumpModelInfo *modelInfo) { CVehicleModelInfo *vmi; - SetFrameHierarchyId(RpClumpGetFrame(clump), (uintptr)modelInfo); + SetFrameHierarchyId(RpClumpGetFrame(clump), (intptr)modelInfo); // Unused switch (modelInfo->GetModelType()) { diff --git a/src/rw/VisibilityPlugins.h b/src/rw/VisibilityPlugins.h index dd02f2e1..0721dfcc 100644 --- a/src/rw/VisibilityPlugins.h +++ b/src/rw/VisibilityPlugins.h @@ -103,10 +103,10 @@ public: struct FrameExt { // BUG: this is abused to hold a pointer by SetClumpModelInfo - uintptr id; + intptr id; }; - static void SetFrameHierarchyId(RwFrame *frame, uintptr id); - static uintptr GetFrameHierarchyId(RwFrame *frame); + static void SetFrameHierarchyId(RwFrame *frame, intptr id); + static intptr GetFrameHierarchyId(RwFrame *frame); static void *FrameConstructor(void *object, int32 offset, int32 len); static void *FrameDestructor(void *object, int32 offset, int32 len); diff --git a/src/text/Text.cpp b/src/text/Text.cpp index f3324fd7..0c63ced7 100644 --- a/src/text/Text.cpp +++ b/src/text/Text.cpp @@ -23,7 +23,7 @@ CText::Load(void) { uint8 *filedata; char filename[32], type[4]; - intptr_t offset, length; + ssize_t offset, length; size_t sectlen; Unload(); @@ -176,7 +176,7 @@ CText::UpperCase(wchar *s) void -CKeyArray::Load(size_t length, uint8 *data, intptr_t *offset) +CKeyArray::Load(size_t length, uint8 *data, ssize_t *offset) { size_t i; uint8 *rawbytes; @@ -256,7 +256,7 @@ CKeyArray::Search(const char *key) void -CData::Load(size_t length, uint8 *data, intptr_t *offset) +CData::Load(size_t length, uint8 *data, ssize_t *offset) { size_t i; uint8 *rawbytes; diff --git a/src/text/Text.h b/src/text/Text.h index 52c17e27..ed978a8b 100644 --- a/src/text/Text.h +++ b/src/text/Text.h @@ -26,7 +26,7 @@ public: CKeyArray(void) : entries(nil), numEntries(0) {} ~CKeyArray(void) { Unload(); } - void Load(size_t length, uint8 *data, intptr_t *offset); + void Load(size_t length, uint8 *data, ssize_t *offset); void Unload(void); void Update(wchar *chars); CKeyEntry *BinarySearch(const char *key, CKeyEntry *entries, int16 low, int16 high); @@ -45,7 +45,7 @@ public: CData(void) : chars(nil), numChars(0) {} ~CData(void) { Unload(); } - void Load(size_t length, uint8 *data, intptr_t *offset); + void Load(size_t length, uint8 *data, ssize_t *offset); void Unload(void); }; From 0b59eeb2bf7e7079147e5e3e9063e556cd93e97b Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 27 Dec 2020 05:59:51 +0300 Subject: [PATCH 28/46] Fix default mouse invert setting, vert. mouse sensitivity, set aspect ratio auto as default --- src/core/Frontend.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 89edc04b..9e2efd73 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -170,7 +170,12 @@ bool CMenuManager::m_PrefsAllowNastyGame = true; bool CMenuManager::m_bStartUpFrontEndRequested; bool CMenuManager::m_bShutDownFrontEndRequested; +#ifdef ASPECT_RATIO_SCALE +int8 CMenuManager::m_PrefsUseWideScreen = AR_AUTO; +#else int8 CMenuManager::m_PrefsUseWideScreen; +#endif + int8 CMenuManager::m_PrefsRadioStation; int32 CMenuManager::m_PrefsBrightness = 256; float CMenuManager::m_PrefsLOD = CRenderer::ms_lodDistScale; @@ -917,7 +922,11 @@ CMenuManager::CheckSliderMovement(int value) case MENUACTION_MOUSESENS: TheCamera.m_fMouseAccelHorzntl += value * 1.0f/200.0f/15.0f; // ??? TheCamera.m_fMouseAccelHorzntl = clamp(TheCamera.m_fMouseAccelHorzntl, 1.0f/3200.0f, 1.0f/200.0f); +#ifdef FIX_BUGS + TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl + 0.0005f; +#else TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl; +#endif break; default: return; @@ -4466,13 +4475,21 @@ CMenuManager::ProcessButtonPresses(void) case HOVEROPTION_INCREASE_MOUSESENS: TheCamera.m_fMouseAccelHorzntl += (1.0f / 3000); TheCamera.m_fMouseAccelHorzntl = clamp(TheCamera.m_fMouseAccelHorzntl, 1.0f / 3200, 1.0f / 200); +#ifdef FIX_BUGS + TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl + 0.0005f; +#else TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl; +#endif SaveSettings(); break; case HOVEROPTION_DECREASE_MOUSESENS: TheCamera.m_fMouseAccelHorzntl -= (1.0f / 3000); TheCamera.m_fMouseAccelHorzntl = clamp(TheCamera.m_fMouseAccelHorzntl, 1.0f / 3200, 1.0f / 200); +#ifdef FIX_BUGS + TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl + 0.0005f; +#else TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl; +#endif SaveSettings(); break; } @@ -4969,7 +4986,11 @@ CMenuManager::ProcessButtonPresses(void) m_PrefsLOD = 1.2f; m_PrefsVsync = true; CRenderer::ms_lodDistScale = 1.2f; +#ifdef ASPECT_RATIO_SCALE + m_PrefsUseWideScreen = AR_AUTO; +#else m_PrefsUseWideScreen = false; +#endif m_PrefsShowSubtitles = true; m_nDisplayVideoMode = m_nPrefsVideoMode; #if GTA_VERSION >= GTA3_PC_11 @@ -5010,7 +5031,12 @@ CMenuManager::ProcessButtonPresses(void) } #endif m_ControlMethod = CONTROL_STANDARD; +#ifdef FIX_BUGS + MousePointerStateHelper.bInvertVertically = true; + TheCamera.m_fMouseAccelVertical = 0.003f; +#else MousePointerStateHelper.bInvertVertically = false; +#endif TheCamera.m_fMouseAccelHorzntl = 0.0025f; CVehicle::m_bDisableMouseSteering = true; TheCamera.m_bHeadBob = false; From 22f12596fd4529582acb4e4a9116a4fad2402219 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 27 Dec 2020 07:38:52 +0200 Subject: [PATCH 29/46] Update readme --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5dff7b91..29f2529e 100644 --- a/README.md +++ b/README.md @@ -41,15 +41,16 @@ Please read the [Coding Style](https://github.com/GTAmodding/re3/blob/master/COD ### Unreversed / incomplete classes (at least the ones we know) The following classes have only unused or practically unused code left: ``` -CMemoryHeap - only on PS2 NameGrid.cpp - only on mobile (a player name grid, either a very early player name code ala GTA1 or a multiplayer leftover) PedDebug.cpp - only on mobile (debug code) HandlingMgr.cpp - debug functions from mobile +CFormationInfo - unused PedAI class that could be found on mobile CVehicle::ProcessBikeWheel - early bike code (only on mobile) CAutomobile::DebugCode - debug function from mobile CBoat::DebugCode - debug function from mobile CBoat::ModifyHandlingValue - debug function from mobile CBoat::DisplayHandlingData - debug function from mobile -TexturePools - only on PC (slight RW modification that we don't actually need) +CStreaming::PrintRequestList - debug function from mobile +d3d8raster.c - only on PC (slight RW modification that we don't actually need) ``` From 0b21fd02d388188e32d25980abab14ce26d47aed Mon Sep 17 00:00:00 2001 From: IlDucci Date: Sun, 27 Dec 2020 12:44:06 +0100 Subject: [PATCH 30/46] Minor changes on the Spanish translation - Replaced a few strings to unify them with reVC. - Fixed some translations on debug and re-exclusive strings. - Fixed the translation of "IMAGING" in the credits. --- gamefiles/TEXT/spanish.gxt | Bin 234866 -> 234854 bytes utils/gxt/spanish.txt | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gamefiles/TEXT/spanish.gxt b/gamefiles/TEXT/spanish.gxt index 384c79a0c8a281463e150fe39eb2eb201cb3fad4..6b188fc606253a4f2edfb8c03e3d48c6101cee98 100644 GIT binary patch delta 23436 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 QSz4L>c( Date: Sun, 27 Dec 2020 17:05:37 +0300 Subject: [PATCH 31/46] Fix peds running to see dead peds in water --- src/peds/Ped.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 3d2278bd..4b55e5ce 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -707,14 +707,18 @@ CPed::ScanForThreats(void) } } - CPed *deadPed = nil; + CPed *deadPed; if (fearFlags & PED_FLAG_DEADPEDS && CharCreatedBy != MISSION_CHAR - && (deadPed = CheckForDeadPeds()) != nil && (deadPed->GetPosition() - ourPos).MagnitudeSqr() < sq(20.0f)) { + && (deadPed = CheckForDeadPeds()) != nil && (deadPed->GetPosition() - ourPos).MagnitudeSqr() < sq(20.0f) +#ifdef FIX_BUGS + && !deadPed->bIsInWater +#endif + ) { m_pEventEntity = deadPed; m_pEventEntity->RegisterReference((CEntity **) &m_pEventEntity); return PED_FLAG_DEADPEDS; } else { - uint32 flagsOfSomePed = 0; + uint32 flagsOfNearPed = 0; CPed *pedToFearFrom = nil; #ifndef VC_PED_PORTS @@ -724,9 +728,9 @@ CPed::ScanForThreats(void) // BUG: WTF Rockstar?! Putting this here will result in returning the flags of farthest ped to us, since m_nearPeds is sorted by distance. // Fixed at the bottom of the function. - flagsOfSomePed = CPedType::GetFlag(nearPed->m_nPedType); + flagsOfNearPed = CPedType::GetFlag(nearPed->m_nPedType); - if (CPedType::GetFlag(nearPed->m_nPedType) & fearFlags) { + if (flagsOfNearPed & fearFlags) { if (nearPed->m_fHealth > 0.0f && OurPedCanSeeThisOne(m_nearPeds[i])) { // FIX: Taken from VC #ifdef FIX_BUGS @@ -754,9 +758,9 @@ CPed::ScanForThreats(void) } // BUG: Explained at the same occurence of this bug above. Fixed at the bottom of the function. - flagsOfSomePed = CPedType::GetFlag(m_nearPeds[i]->m_nPedType); + flagsOfNearPed = CPedType::GetFlag(m_nearPeds[i]->m_nPedType); - if (flagsOfSomePed & fearFlags) { + if (flagsOfNearPed & fearFlags) { if (m_nearPeds[i]->m_fHealth > 0.0f) { // VC also has ability to include objects to line of sight check here (via last bit of flagsL) @@ -827,8 +831,8 @@ CPed::ScanForThreats(void) if (driver) { // BUG: Same bug as above. Fixed at the bottom of function. - flagsOfSomePed = CPedType::GetFlag(driver->m_nPedType); - if (CPedType::GetFlag(driver->m_nPedType) & fearFlags) { + flagsOfNearPed = CPedType::GetFlag(driver->m_nPedType); + if (flagsOfNearPed & fearFlags) { if (driver->m_fHealth > 0.0f && OurPedCanSeeThisOne(nearVeh->pDriver)) { // FIX: Taken from VC #ifdef FIX_BUGS @@ -850,12 +854,12 @@ CPed::ScanForThreats(void) #ifdef FIX_BUGS if (pedToFearFrom) - flagsOfSomePed = CPedType::GetFlag(((CPed*)m_threatEntity)->m_nPedType); + flagsOfNearPed = CPedType::GetFlag(((CPed*)m_threatEntity)->m_nPedType); else - flagsOfSomePed = 0; + flagsOfNearPed = 0; #endif - return flagsOfSomePed; + return flagsOfNearPed; } } From 4d095a7943ef8220bd28809a52e18dce5c92826d Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 27 Dec 2020 18:29:08 +0200 Subject: [PATCH 32/46] Add Toggle Waypoint text --- gamefiles/TEXT/american.gxt | Bin 220080 -> 220124 bytes utils/gxt/american.txt | 3 +++ 2 files changed, 3 insertions(+) diff --git a/gamefiles/TEXT/american.gxt b/gamefiles/TEXT/american.gxt index 1054ca126d8d797e0405afb6ecd0cb36126fdbbe..aba89f11b98c317a3648916fcd1d237a76807b23 100644 GIT binary patch delta 82 zcmdn6o%hamUbYZ#*GPuCjci?}+-vSKF}S(<#)pIlZ0#}bcP&;R0aixaE3&NN`?Z4e1=ShJcbem1_l6ke;3;T delta 37 tcmcb!op-}_UbYZ#*T^rm8`-){H_tIG@L*ii%v;yaTgSMaw~lH3T>vOT4;cUe diff --git a/utils/gxt/american.txt b/utils/gxt/american.txt index cdee16f9..6410d0d9 100644 --- a/utils/gxt/american.txt +++ b/utils/gxt/american.txt @@ -8064,6 +8064,9 @@ XBOX [FEC_IVP] INVERT PAD VERTICALLY +[FEM_TWP] +Toggle Waypoint + { end of file } [DUMMY] From bea561d44d3f2a767b08c56899b026a369686caf Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 27 Dec 2020 18:15:13 +0100 Subject: [PATCH 33/46] add neo files --- gamefiles/neo/carTweakingTable.dat | 104 +++++++++++++++++++++ gamefiles/neo/neo.txd | Bin 0 -> 118696 bytes gamefiles/neo/rimTweakingTable.dat | 130 +++++++++++++++++++++++++++ gamefiles/neo/worldTweakingTable.dat | 26 ++++++ 4 files changed, 260 insertions(+) create mode 100644 gamefiles/neo/carTweakingTable.dat create mode 100644 gamefiles/neo/neo.txd create mode 100644 gamefiles/neo/rimTweakingTable.dat create mode 100644 gamefiles/neo/worldTweakingTable.dat diff --git a/gamefiles/neo/carTweakingTable.dat b/gamefiles/neo/carTweakingTable.dat new file mode 100644 index 00000000..5e707ae2 --- /dev/null +++ b/gamefiles/neo/carTweakingTable.dat @@ -0,0 +1,104 @@ +# Fresnal RO Table +# SUNNY CLOUDY RAINY, FOGGY +0.400000 0.400000 0.400000 0.150000 # Midnight +0.400000 0.400000 0.400000 0.150000 # 1am +0.400000 0.400000 0.400000 0.150000 # 2am +0.400000 0.400000 0.400000 0.150000 # 3am +0.400000 0.400000 0.400000 0.150000 # 4am +0.400000 0.400000 0.400000 0.150000 # 5am +0.400000 0.400000 0.400000 0.150000 # 6am +0.400000 0.400000 0.400000 0.150000 # 7am +0.400000 0.400000 0.400000 0.150000 # 8am +0.400000 0.400000 0.400000 0.150000 # 9am +0.400000 0.400000 0.400000 0.150000 # 10am +0.400000 0.400000 0.400000 0.150000 # 11am +0.400000 0.400000 0.400000 0.150000 # Midday +0.400000 0.400000 0.400000 0.150000 # 1pm +0.400000 0.400000 0.400000 0.150000 # 2pm +0.400000 0.400000 0.400000 0.150000 # 3pm +0.400000 0.400000 0.400000 0.150000 # 4pm +0.400000 0.400000 0.400000 0.150000 # 5pm +0.400000 0.400000 0.400000 0.150000 # 6pm +0.400000 0.400000 0.400000 0.150000 # 7pm +0.400000 0.400000 0.400000 0.150000 # 8pm +0.400000 0.400000 0.400000 0.150000 # 9pm +0.400000 0.400000 0.400000 0.150000 # 10pm +0.400000 0.400000 0.400000 0.150000 # 11pm +# Specular Power Table +# SUNNY CLOUDY RAINY, FOGGY +128.000000 80.000000 30.000000 128.000000 # Midnight +128.000000 80.000000 30.000000 128.000000 # 1am +128.000000 80.000000 30.000000 128.000000 # 2am +128.000000 80.000000 30.000000 128.000000 # 3am +128.000000 80.000000 30.000000 128.000000 # 4am +80.000000 60.000000 30.000000 128.000000 # 5am +80.000000 60.000000 30.000000 128.000000 # 6am +80.000000 60.000000 30.000000 128.000000 # 7am +80.000000 60.000000 30.000000 128.000000 # 8am +80.000000 60.000000 30.000000 128.000000 # 9am +80.000000 60.000000 30.000000 128.000000 # 10am +80.000000 60.000000 30.000000 128.000000 # 11am +80.000000 60.000000 30.000000 128.000000 # Midday +80.000000 60.000000 30.000000 128.000000 # 1pm +80.000000 60.000000 30.000000 128.000000 # 2pm +80.000000 60.000000 30.000000 128.000000 # 3pm +80.000000 60.000000 30.000000 128.000000 # 4pm +128.000000 80.000000 30.000000 128.000000 # 5pm +128.000000 80.000000 30.000000 128.000000 # 6pm +128.000000 80.000000 30.000000 128.000000 # 7pm +128.000000 80.000000 30.000000 128.000000 # 8pm +128.000000 80.000000 30.000000 128.000000 # 9pm +128.000000 80.000000 30.000000 128.000000 # 10pm +128.000000 80.000000 30.000000 128.000000 # 11pm +# Diffuse Colour Modifier Table (Red,Green,Blue,Amount) +# SUNNY CLOUDY RAINY, FOGGY +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # Midnight +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 1am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 2am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 3am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 4am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 5am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 6am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 7am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 8am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 9am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 10am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 11am +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # Midday +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 1pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 2pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 3pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 4pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 5pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 6pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 7pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 8pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 9pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 10pm +0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 11pm +# Specular Colour Table (Red,Green,Blue,Amount) +# SUNNY CLOUDY RAINY, FOGGY + 81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # Midnight + 81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 1am + 81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 2am + 81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 3am + 81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 4am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 5am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 6am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 7am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 8am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 9am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 10am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 11am +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # Midday +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 1pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 2pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 3pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 4pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 5pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 6pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 7pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 8pm +178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 9pm + 81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 10pm + 81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 11pm diff --git a/gamefiles/neo/neo.txd b/gamefiles/neo/neo.txd new file mode 100644 index 0000000000000000000000000000000000000000..d20215e0b73c1f883288b629e31c1d76a460b6a3 GIT binary patch literal 118696 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 literal 0 HcmV?d00001 diff --git a/gamefiles/neo/rimTweakingTable.dat b/gamefiles/neo/rimTweakingTable.dat new file mode 100644 index 00000000..058d55eb --- /dev/null +++ b/gamefiles/neo/rimTweakingTable.dat @@ -0,0 +1,130 @@ +# Ramp Start Table +# SUNNY CLOUDY RAINY, FOGGY +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # Midnight +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 1am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 2am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 3am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 4am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 5am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 6am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 7am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 8am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 9am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 10am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 11am +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # Midday +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 1pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 2pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 3pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 4pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 5pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 6pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 7pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 8pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 9pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 10pm +60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 11pm +# Ramp End Table +# SUNNY CLOUDY RAINY, FOGGY +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # Midnight +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 1am +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 2am +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 3am +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 4am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 5am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 6am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 7am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 8am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 9am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 10am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 11am +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # Midday +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 1pm +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 2pm +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 3pm +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 4pm +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 5pm +255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 6pm +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 7pm +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 8pm +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 9pm +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 10pm +190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 11pm +# Offset Table +# SUNNY CLOUDY RAINY, FOGGY +0 0 0 0 # Midnight +0 0 0 0 # 1am +0 0 0 0 # 2am +0 0 0 0 # 3am +0 0 0 0 # 4am +0 0 0 0 # 5am +0 0 0 0 # 6am +0 0 0 0 # 7am +0 0 0 0 # 8am +0 0 0 0 # 9am +0 0 0 0 # 10am +0 0 0 0 # 11am +0 0 0 0 # Midday +0 0 0 0 # 1pm +0 0 0 0 # 2pm +0 0 0 0 # 3pm +0 0 0 0 # 4pm +0 0 0 0 # 5pm +0 0 0 0 # 6pm +0 0 0 0 # 7pm +0 0 0 0 # 8pm +0 0 0 0 # 9pm +0 0 0 0 # 10pm +0 0 0 0 # 11pm +# Scale Table +# SUNNY CLOUDY RAINY, FOGGY +1.5 1.5 1.0 1.0 # Midnight +1.5 1.5 1.0 1.0 # 1am +1.5 1.5 1.0 1.0 # 2am +1.5 1.5 1.5 1.5 # 3am +2.0 2.0 2.0 2.0 # 4am +2.0 2.0 2.0 2.0 # 5am +2.0 2.0 2.0 2.0 # 6am +2.5 2.5 2.0 2.0 # 7am +2.5 2.5 2.0 2.0 # 8am +2.5 2.5 2.0 2.0 # 9am +2.5 2.5 2.0 2.0 # 10am +2.5 2.5 2.0 2.0 # 11am +2.5 2.5 2.0 2.0 # Midday +2.5 2.5 2.0 2.0 # 1pm +2.5 2.5 2.0 2.0 # 2pm +2.5 2.5 2.0 2.0 # 3pm +2.5 2.5 2.0 2.0 # 4pm +2.0 2.0 2.0 2.0 # 5pm +2.0 2.0 2.0 2.0 # 6pm +2.0 2.0 2.0 2.0 # 7pm +1.5 1.5 1.5 1.5 # 8pm +1.5 1.5 1.0 1.0 # 9pm +1.5 1.5 1.0 1.0 # 10pm +1.5 1.5 1.0 1.0 # 11pm +# Scaling Table +# SUNNY CLOUDY RAINY, FOGGY +0.2 0.2 0.1 0.1 # Midnight +0.2 0.2 0.1 0.1 # 1am +0.7 0.7 0.2 0.2 # 6am +0.7 0.7 0.2 0.2 # 3am +0.7 0.7 0.2 0.2 # 4am +2.0 2.0 0.3 0.3 # 5am +3.0 3.0 0.3 0.3 # 6am +4.0 4.0 0.3 0.3 # 7am +5.0 5.0 0.3 0.3 # 8am +6.0 6.0 1.3 1.3 # 9am +6.0 6.0 2.0 2.0 # 10am +6.0 6.0 2.0 2.0 # 11am +6.0 6.0 2.0 2.0 # Midday +6.0 6.0 2.0 2.0 # 1pm +6.0 6.0 1.3 1.3 # 6pm +5.0 5.0 0.3 0.3 # 3pm +4.0 4.0 0.3 0.3 # 4pm +3.0 3.0 0.3 0.3 # 5pm +2.0 2.0 0.3 0.3 # 6pm +0.7 0.7 0.2 0.2 # 7pm +0.7 0.7 0.2 0.2 # 8pm +0.7 0.7 0.2 0.2 # 9pm +0.2 0.2 0.1 0.1 # 10pm +0.2 0.2 0.1 0.1 # 11pm diff --git a/gamefiles/neo/worldTweakingTable.dat b/gamefiles/neo/worldTweakingTable.dat new file mode 100644 index 00000000..b054fa38 --- /dev/null +++ b/gamefiles/neo/worldTweakingTable.dat @@ -0,0 +1,26 @@ +# LM blend Table +# SUNNY CLOUDY RAINY FOGGY +0.700000 0.700000 0.700000 0.550000 # Midnight +0.700000 0.700000 0.700000 0.550000 # 1am +0.700000 0.700000 0.700000 0.550000 # 2am +0.700000 0.700000 0.700000 0.550000 # 3am +0.700000 0.700000 0.700000 0.550000 # 4am +0.750000 0.750000 0.700000 0.600000 # 5am +0.800000 0.800000 0.750000 0.600000 # 6am +0.850000 0.850000 0.800000 0.650000 # 7am +0.900000 0.900000 0.800000 0.700000 # 8am +0.950000 0.900000 0.800000 0.700000 # 9am +1.000000 0.900000 0.800000 0.700000 # 10am +1.000000 0.900000 0.800000 0.700000 # 11am +1.000000 0.900000 0.800000 0.700000 # Midday +1.000000 0.900000 0.800000 0.700000 # 1pm +1.000000 0.900000 0.800000 0.700000 # 2pm +0.950000 0.900000 0.800000 0.700000 # 3pm +0.900000 0.900000 0.800000 0.700000 # 4pm +0.850000 0.850000 0.800000 0.650000 # 5pm +0.800000 0.800000 0.750000 0.600000 # 6pm +0.750000 0.750000 0.700000 0.600000 # 7pm +0.700000 0.700000 0.700000 0.550000 # 8pm +0.700000 0.700000 0.700000 0.550000 # 9pm +0.700000 0.700000 0.700000 0.550000 # 10pm +0.700000 0.700000 0.700000 0.550000 # 11pm From 4d2105bf55944ef80a9232bdeb94f77fc6fe94c2 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 27 Dec 2020 18:22:04 +0100 Subject: [PATCH 34/46] tiny rendering fix --- src/extras/custompipes_d3d9.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/extras/custompipes_d3d9.cpp b/src/extras/custompipes_d3d9.cpp index b39efd47..27006c6a 100644 --- a/src/extras/custompipes_d3d9.cpp +++ b/src/extras/custompipes_d3d9.cpp @@ -245,6 +245,7 @@ worldRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header) drawInst(header, inst); inst++; } + d3d::setTexture(1, nil); } void From ab80ff71323a057caf66b3d2595f9d5f8786cf3b Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 27 Dec 2020 20:34:12 +0100 Subject: [PATCH 35/46] handling unit conversion --- src/vehicles/HandlingMgr.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vehicles/HandlingMgr.cpp b/src/vehicles/HandlingMgr.cpp index 7b74b590..3ac6f057 100644 --- a/src/vehicles/HandlingMgr.cpp +++ b/src/vehicles/HandlingMgr.cpp @@ -2,6 +2,7 @@ #include "main.h" #include "FileMgr.h" +#include "Physical.h" #include "HandlingMgr.h" cHandlingDataMgr mod_HandlingManager; @@ -189,17 +190,17 @@ cHandlingDataMgr::FindExactWord(const char *word, const char *words, int wordLen void cHandlingDataMgr::ConvertDataToGameUnits(tHandlingData *handling) { - // TODO: figure out what exactly is being converted here + // acceleration is in ms^-2, but we need mf^-2 where f is one frame time (50fps) float velocity, a, b, specificVolume; - handling->Transmission.fEngineAcceleration /= 2500.0f; - handling->Transmission.fMaxVelocity /= 180.0f; - handling->fBrakeDeceleration /= 2500.0f; + handling->Transmission.fEngineAcceleration *= 1.0f/(50.0f*50.0f); + handling->Transmission.fMaxVelocity *= 1000.0f/(60.0f*60.0f * 50.0f); + handling->fBrakeDeceleration *= 1.0f/(50.0f*50.0f); handling->fTurnMass = (sq(handling->Dimension.x) + sq(handling->Dimension.y)) * handling->fMass / 12.0f; if(handling->fTurnMass < 10.0f) handling->fTurnMass *= 5.0f; handling->fInvMass = 1.0f/handling->fMass; - handling->fBuoyancy = 100.0f/handling->nPercentSubmerged * 0.008f*handling->fMass; + handling->fBuoyancy = 100.0f/handling->nPercentSubmerged * GRAVITY*handling->fMass; // What the hell is going on here? specificVolume = handling->Dimension.x*handling->Dimension.z*0.5f / handling->fMass; // ? From beb0ec673c6c84d0216f97890afdf4fdc3747b26 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 27 Dec 2020 20:38:05 +0100 Subject: [PATCH 36/46] rename unused field --- src/vehicles/HandlingMgr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vehicles/HandlingMgr.h b/src/vehicles/HandlingMgr.h index 23bd9681..05876201 100644 --- a/src/vehicles/HandlingMgr.h +++ b/src/vehicles/HandlingMgr.h @@ -108,7 +108,7 @@ struct tHandlingData float fSteeringLock; float fTractionLoss; float fTractionBias; - float fABS; // should be VC leftover + float fUnused; float fSuspensionForceLevel; float fSuspensionDampingLevel; float fSuspensionUpperLimit; From cd24936ca9d4558974858c682e22ec556d0d0228 Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 27 Dec 2020 23:55:13 +0300 Subject: [PATCH 37/46] Dynamically add pipelines options, only if neo.txd exists --- src/core/Frontend.cpp | 7 +++++++ src/core/MenuScreensCustom.cpp | 19 ++++--------------- src/core/main.cpp | 8 -------- src/core/re3.cpp | 26 +++++++++++++++++++++++++- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 9e2efd73..72739f7b 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -3744,6 +3744,13 @@ CMenuManager::LoadSettings() strcpy(m_PrefsSkinFile, DEFAULT_SKIN_NAME); strcpy(m_aSkinName, DEFAULT_SKIN_NAME); } + +#ifdef CUSTOM_FRONTEND_OPTIONS + // Apparently this func. can be run multiple times at the start. + if (numCustomFrontendOptions == 0 && numCustomFrontendScreens == 0) { + CustomFrontendOptionsPopulate(); + } +#endif #ifdef LOAD_INI_SETTINGS LoadINISettings(); // needs frontend options to be loaded #endif diff --git a/src/core/MenuScreensCustom.cpp b/src/core/MenuScreensCustom.cpp index d9fc5065..9a763f8c 100644 --- a/src/core/MenuScreensCustom.cpp +++ b/src/core/MenuScreensCustom.cpp @@ -67,16 +67,6 @@ #define POSTFX_SELECTORS #endif -#ifdef EXTENDED_PIPELINES - #define PIPELINES_SELECTOR \ - MENUACTION_CFO_SELECT, "FED_VPL", { new CCFOSelect((int8*)&CustomPipes::VehiclePipeSwitch, "VehiclePipeline", vehPipelineNames, ARRAY_SIZE(vehPipelineNames), false, nil) }, \ - MENUACTION_CFO_SELECT, "FED_PRM", { new CCFOSelect((int8*)&CustomPipes::RimlightEnable, "NeoRimLight", off_on, 2, false, nil) }, \ - MENUACTION_CFO_SELECT, "FED_WLM", { new CCFOSelect((int8*)&CustomPipes::LightmapEnable, "NeoLightMaps", off_on, 2, false, nil) }, \ - MENUACTION_CFO_SELECT, "FED_RGL", { new CCFOSelect((int8*)&CustomPipes::GlossEnable, "NeoRoadGloss", off_on, 2, false, nil) }, -#else - #define PIPELINES_SELECTOR -#endif - #ifdef INVERT_LOOK_FOR_PAD #define INVERT_PAD_SELECTOR MENUACTION_CFO_SELECT, "FEC_IVP", { new CCFOSelect((int8*)&CPad::bInvertLook4Pad, "InvertPad", off_on, 2, false, nil) }, #else @@ -84,7 +74,6 @@ #endif const char *filterNames[] = { "FEM_NON", "FEM_SIM", "FEM_NRM", "FEM_MOB" }; -const char *vehPipelineNames[] = { "FED_MFX", "FED_NEO" }; const char *off_on[] = { "FEM_OFF", "FEM_ON" }; void RestoreDefGraphics(int8 action) { @@ -404,7 +393,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = { CUTSCENE_BORDERS_TOGGLE FREE_CAM_TOGGLE POSTFX_SELECTORS - PIPELINES_SELECTOR + // re3.cpp inserts here pipeline selectors if neo/neo.txd exists and EXTENDED_PIPELINES defined MENUACTION_RESTOREDEF, "FET_DEF", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, MENUACTION_CHANGEMENU, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, }, @@ -831,14 +820,14 @@ CMenuScreenCustom aScreens[MENUPAGES] = { MENUACTION_FRAMESYNC, "FEM_VSC", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, MENUACTION_FRAMELIMIT, "FEM_FRM", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, MULTISAMPLING_SELECTOR + ISLAND_LOADING_SELECTOR + DUALPASS_SELECTOR #ifdef EXTENDED_COLOURFILTER POSTFX_SELECTORS #else MENUACTION_TRAILS, "FED_TRA", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, #endif - PIPELINES_SELECTOR - ISLAND_LOADING_SELECTOR - DUALPASS_SELECTOR + // re3.cpp inserts here pipeline selectors if neo/neo.txd exists and EXTENDED_PIPELINES defined MENUACTION_CFO_DYNAMIC, "FET_DEF", { new CCFODynamic(nil, nil, nil, RestoreDefGraphics) }, MENUACTION_CHANGEMENU, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, }, diff --git a/src/core/main.cpp b/src/core/main.cpp index 3a855e20..4b70a153 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -66,7 +66,6 @@ #include "postfx.h" #include "custompipes.h" #include "screendroplets.h" -#include "frontendoption.h" #include "MemoryHeap.h" GlobalScene Scene; @@ -481,13 +480,6 @@ Initialise3D(void *param) DebugMenuInit(); DebugMenuPopulate(); #endif // !DEBUGMENU -#ifdef CUSTOM_FRONTEND_OPTIONS - // Apparently this func. can be run multiple times at the start. - if (numCustomFrontendOptions == 0 && numCustomFrontendScreens == 0) { - // needs stored language and TheText to be loaded, and last TheText reload is at the start of here - CustomFrontendOptionsPopulate(); - } -#endif bool ret = CGame::InitialiseRenderWare(); #ifdef EXTENDED_PIPELINES CustomPipes::CustomPipeInit(); // need Scene.world for this diff --git a/src/core/re3.cpp b/src/core/re3.cpp index acb6caa2..87244e2a 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -30,9 +30,9 @@ #include "postfx.h" #include "custompipes.h" #include "MemoryHeap.h" +#include "FileMgr.h" #ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS -#include "FileMgr.h" #include "ControllerConfig.h" #endif @@ -79,6 +79,30 @@ void CustomFrontendOptionsPopulate(void) { // Moved to an array in MenuScreensCustom.cpp, but APIs are still available. see frontendoption.h + + // These work only if we have neo folder, so they're dynamically added +#ifdef EXTENDED_PIPELINES + const char *vehPipelineNames[] = { "FED_MFX", "FED_NEO" }; + const char *off_on[] = { "FEM_OFF", "FEM_ON" }; + int fd = CFileMgr::OpenFile("neo/neo.txd","r"); + if (fd) { +#ifdef GRAPHICS_MENU_OPTIONS + FrontendOptionSetCursor(MENUPAGE_GRAPHICS_SETTINGS, -3, false); + FrontendOptionAddSelect("FED_VPL", vehPipelineNames, ARRAY_SIZE(vehPipelineNames), (int8*)&CustomPipes::VehiclePipeSwitch, false, nil, "VehiclePipeline"); + FrontendOptionAddSelect("FED_PRM", off_on, 2, (int8*)&CustomPipes::RimlightEnable, false, nil, "NeoRimLight"); + FrontendOptionAddSelect("FED_WLM", off_on, 2, (int8*)&CustomPipes::LightmapEnable, false, nil, "NeoLightMaps"); + FrontendOptionAddSelect("FED_RGL", off_on, 2, (int8*)&CustomPipes::GlossEnable, false, nil, "NeoRoadGloss"); +#else + FrontendOptionSetCursor(MENUPAGE_DISPLAY_SETTINGS, -3, false); + FrontendOptionAddSelect("FED_VPL", vehPipelineNames, ARRAY_SIZE(vehPipelineNames), (int8*)&CustomPipes::VehiclePipeSwitch, false, nil, "VehiclePipeline"); + FrontendOptionAddSelect("FED_PRM", off_on, 2, (int8*)&CustomPipes::RimlightEnable, false, nil, "NeoRimLight"); + FrontendOptionAddSelect("FED_WLM", off_on, 2, (int8*)&CustomPipes::LightmapEnable, false, nil, "NeoLightMaps"); + FrontendOptionAddSelect("FED_RGL", off_on, 2, (int8*)&CustomPipes::GlossEnable, false, nil, "NeoRoadGloss"); +#endif + CFileMgr::CloseFile(fd); + } +#endif + } #endif From 38a1fef5c1e22c58ae4dd316800a162b04e22aad Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 27 Dec 2020 23:46:15 +0300 Subject: [PATCH 38/46] move cfo populate func. --- src/core/Frontend.cpp | 8 +------- src/core/Game.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 72739f7b..13fb1add 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -3744,13 +3744,7 @@ CMenuManager::LoadSettings() strcpy(m_PrefsSkinFile, DEFAULT_SKIN_NAME); strcpy(m_aSkinName, DEFAULT_SKIN_NAME); } - -#ifdef CUSTOM_FRONTEND_OPTIONS - // Apparently this func. can be run multiple times at the start. - if (numCustomFrontendOptions == 0 && numCustomFrontendScreens == 0) { - CustomFrontendOptionsPopulate(); - } -#endif + #ifdef LOAD_INI_SETTINGS LoadINISettings(); // needs frontend options to be loaded #endif diff --git a/src/core/Game.cpp b/src/core/Game.cpp index 126f0341..ff87b95a 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -32,6 +32,7 @@ #include "Fluff.h" #include "Font.h" #include "Frontend.h" +#include "frontendoption.h" #include "GameLogic.h" #include "Garages.h" #include "GenericGameStorage.h" @@ -167,6 +168,11 @@ CGame::InitialiseOnceBeforeRW(void) ValidateVersion(); #ifdef EXTENDED_COLOURFILTER CPostFX::InitOnce(); +#endif +#ifdef CUSTOM_FRONTEND_OPTIONS + // Not needed here but may be needed in future + // if (numCustomFrontendOptions == 0 && numCustomFrontendScreens == 0) + CustomFrontendOptionsPopulate(); #endif return true; } From 498d3a49ac2d7701af0456b050702807b544188b Mon Sep 17 00:00:00 2001 From: erorcun Date: Mon, 28 Dec 2020 00:15:05 +0300 Subject: [PATCH 39/46] just toggle waypoint --- src/core/Frontend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 13fb1add..4c963a13 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -6099,7 +6099,7 @@ CMenuManager::PrintMap(void) CFont::PrintString(nextX, SCREEN_SCALE_FROM_BOTTOM(nextY), TheText.Get("FEC_MOV")); nextX = MENU_X(30.0f); nextY -= 11.0f; TEXT_PIECE("FEC_MSR", 2.0f); TEXT_PIECE("FEC_IBT", 1.0f); - CFont::PrintString(nextX, SCREEN_SCALE_FROM_BOTTOM(nextY), TheText.Get("FEC_TAR")); + CFont::PrintString(nextX, SCREEN_SCALE_FROM_BOTTOM(nextY), TheText.Get("FEM_TWP")); #undef TEXT_PIECE } From dc96a49dfdeaf0b83cdaf7b5c5e6565e986a8d41 Mon Sep 17 00:00:00 2001 From: erorcun Date: Mon, 28 Dec 2020 03:25:26 +0300 Subject: [PATCH 40/46] Ped: WeaponInfo: little fixes and renamings --- src/peds/PlayerPed.cpp | 6 +++--- src/weapons/WeaponInfo.cpp | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp index ef5815ed..1b5e007a 100644 --- a/src/peds/PlayerPed.cpp +++ b/src/peds/PlayerPed.cpp @@ -299,7 +299,7 @@ CPlayerPed::SetRealMoveAnim(void) RestoreHeadingRate(); if (!curIdleAssoc) { - if (m_fCurrentStamina < 0.0f && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.0f, + if (m_fCurrentStamina < 0.0f && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.5f, nil, true, false, false, false, false, false)) { curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 8.0f); @@ -313,7 +313,7 @@ CPlayerPed::SetRealMoveAnim(void) } else if (m_fMoveSpeed == 0.0f && !curSprintAssoc) { if (!curIdleAssoc) { - if (m_fCurrentStamina < 0.0f && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.0f, + if (m_fCurrentStamina < 0.0f && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.5f, nil, true, false, false, false, false, false)) { curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 4.0f); @@ -329,7 +329,7 @@ CPlayerPed::SetRealMoveAnim(void) } else if (m_nPedState != PED_FIGHT) { if (m_fCurrentStamina < 0.0f && curIdleAssoc->animId != ANIM_IDLE_TIRED - && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.0f, nil, true, false, false, false, false, false)) { + && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.5f, nil, true, false, false, false, false, false)) { CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 4.0f); } else if (curIdleAssoc->animId != ANIM_IDLE_STANCE) { diff --git a/src/weapons/WeaponInfo.cpp b/src/weapons/WeaponInfo.cpp index 546aa6ba..b40329c8 100644 --- a/src/weapons/WeaponInfo.cpp +++ b/src/weapons/WeaponInfo.cpp @@ -76,10 +76,9 @@ CWeaponInfo::LoadWeaponData(void) line[linelen] = '\0'; // skip white space - for (lp = 0; line[lp] <= ' '; lp++); + for (lp = 0; line[lp] <= ' ' && line[lp] != '\0'; lp++); - if (lp >= linelen || // FIX: game uses == here, but this is safer if we have empty lines - line[lp] == '#') + if (line[lp] == '\0' || line[lp] == '#') continue; spread = 0.0f; From b9747de5d6832542bbdd4b94f4e5e1f0b90b08bb Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 28 Dec 2020 08:36:21 +0200 Subject: [PATCH 41/46] Enable BIND_VEHICLE_FIREWEAPON with gta3.set size check --- src/core/ControllerConfig.cpp | 43 ++++++++++++++++++++++++++++++++++- src/core/config.h | 2 +- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp index b56a19f0..bf4893ea 100644 --- a/src/core/ControllerConfig.cpp +++ b/src/core/ControllerConfig.cpp @@ -132,6 +132,10 @@ void CControllerConfigManager::LoadSettings(int32 file) { bool bValid = true; +#ifdef BIND_VEHICLE_FIREWEAPON + bool skipVehicleFireWeapon = false; +#endif + if (file) { char buff[29]; @@ -139,18 +143,55 @@ void CControllerConfigManager::LoadSettings(int32 file) if (!strncmp(buff, TopLineEmptyFile, sizeof(TopLineEmptyFile)-1)) bValid = false; - else + else { CFileMgr::Seek(file, 0, 0); + +#ifdef BIND_VEHICLE_FIREWEAPON + // HACK! + // All of this is hacky as fuck. + // We are checking the file size to read the .set file correctly. + // But because .set file is opened in text mode we have to read + // the WHOLE file to get the size we should be working with. + // Joy, ain't it? + char tempBuf[0x1000]; + size_t fileSize = 0, blockSize; + do + { + blockSize = CFileMgr::Read(file, tempBuf, sizeof(tempBuf)); + fileSize += blockSize; + } while (blockSize == sizeof(tempBuf)); + + CFileMgr::Seek(file, 0, 0); + + if (fileSize == 0x671) + skipVehicleFireWeapon = true; +#endif + } } if (bValid) { ControlsManager.MakeControllerActionsBlank(); +#ifdef BIND_VEHICLE_FIREWEAPON + // Set the default settings of VEHICLE_FIREWEAPON + if (skipVehicleFireWeapon) { + SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, rsPADINS, KEYBOARD); + SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, rsLCTRL, OPTIONAL_EXTRA); + if (m_bMouseAssociated) + SetMouseButtonAssociatedWithAction(VEHICLE_FIREWEAPON, 1); + } +#endif + for (int32 i = 0; i < MAX_CONTROLLERTYPES; i++) { for (int32 j = 0; j < MAX_CONTROLLERACTIONS; j++) { +#ifdef BIND_VEHICLE_FIREWEAPON + // Skip file read + if (skipVehicleFireWeapon && j == VEHICLE_FIREWEAPON) + continue; +#endif CFileMgr::Read(file, (char *)&ControlsManager.m_aSettings[j][i], sizeof(tControllerConfigBind)); } } diff --git a/src/core/config.h b/src/core/config.h index d3196f9b..a9bb1a17 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -274,7 +274,7 @@ enum Config { #define ALLCARSHELI_CHEAT #define ALT_DODO_CHEAT #define REGISTER_START_BUTTON -//#define BIND_VEHICLE_FIREWEAPON // Adds ability to rebind fire key for 'in vehicle' controls +#define BIND_VEHICLE_FIREWEAPON // Adds ability to rebind fire key for 'in vehicle' controls #define BUTTON_ICONS // use textures to show controller buttons // Hud, frontend and radar From 7eb96d53735f0f60d610d60aefdbfa4d5589c87f Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 28 Dec 2020 13:44:20 +0200 Subject: [PATCH 42/46] Add bike leftovers --- src/entities/Physical.cpp | 7 ++++++- src/peds/Population.cpp | 7 ++++--- src/vehicles/Bike.h | 10 ++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/entities/Physical.cpp b/src/entities/Physical.cpp index 04cec96b..4fc53039 100644 --- a/src/entities/Physical.cpp +++ b/src/entities/Physical.cpp @@ -16,6 +16,7 @@ #include "DMAudio.h" #include "Automobile.h" #include "Physical.h" +#include "Bike.h" CPhysical::CPhysical(void) { @@ -1917,7 +1918,11 @@ CPhysical::ProcessCollision(void) car->m_aSuspensionSpringRatio[2] = 1.0f; car->m_aSuspensionSpringRatio[3] = 1.0f; }else if(veh->m_vehType == VEHICLE_TYPE_BIKE){ - assert(0 && "TODO - but unused"); + CBike* bike = (CBike*)this; + bike->m_aSuspensionSpringRatio[0] = 1.0f; + bike->m_aSuspensionSpringRatio[1] = 1.0f; + bike->m_aSuspensionSpringRatio[2] = 1.0f; + bike->m_aSuspensionSpringRatio[3] = 1.0f; } } } diff --git a/src/peds/Population.cpp b/src/peds/Population.cpp index 5dbde649..35443cb8 100644 --- a/src/peds/Population.cpp +++ b/src/peds/Population.cpp @@ -22,6 +22,7 @@ #include "DummyObject.h" #include "Script.h" #include "Shadows.h" +#include "Bike.h" #define MIN_CREATION_DIST 40.0f // not for start of the game (look at the GeneratePedsAtStartOfGame) #define CREATION_RANGE 10.0f // added over the MIN_CREATION_DIST. @@ -833,11 +834,11 @@ CPopulation::AddPedInCar(CVehicle* car) newPed->SetCurrentWeapon(WEAPONTYPE_COLT45); newPed->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(newPed->GetWeapon()->m_eWeaponType)->m_nModelId); } - /* + // Miami leftover if (car->m_vehType == VEHICLE_TYPE_BIKE) { - newPed->m_pVehicleAnim = CAnimManager::BlendAnimation(newPed->GetClump(), ASSOCGRP_STD, *((CBike*)car + 308h), 100.0f); - } else */ + newPed->m_pVehicleAnim = CAnimManager::BlendAnimation(newPed->GetClump(), ASSOCGRP_STD, ((CBike*)car)->m_bikeSitAnimation, 100.0f); + } else // FIX: Make peds comfortable while driving car/boat #ifdef FIX_BUGS diff --git a/src/vehicles/Bike.h b/src/vehicles/Bike.h index 4e7e5a0e..38477e80 100644 --- a/src/vehicles/Bike.h +++ b/src/vehicles/Bike.h @@ -12,4 +12,14 @@ enum eBikeNodes { BIKE_MUDGUARD, BIKE_HANDLEBARS, BIKE_NUM_NODES +}; + +class CBike : public CVehicle +{ +public: + RwFrame *m_aBikeNodes[BIKE_NUM_NODES]; // assuming + uint8 unk1[96]; + AnimationId m_bikeSitAnimation; + uint8 unk2[180]; + float m_aSuspensionSpringRatio[4]; }; \ No newline at end of file From 9c2f1b0833ec28ea52162d55560fca8f89341335 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 28 Dec 2020 13:59:03 +0200 Subject: [PATCH 43/46] More bike leftovers --- src/control/Script6.cpp | 4 ++-- src/vehicles/Bike.h | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/control/Script6.cpp b/src/control/Script6.cpp index c2937e1d..77dae53a 100644 --- a/src/control/Script6.cpp +++ b/src/control/Script6.cpp @@ -3,6 +3,7 @@ #include "Script.h" #include "ScriptCommands.h" +#include "Bike.h" #include "CarCtrl.h" #include "Cranes.h" #include "Credits.h" @@ -415,8 +416,7 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command) ((CAutomobile*)pVehicle)->m_fTraction = fTraction; else // this is certainly not a boat, trane, heli or plane field - //((CBike*)pVehicle)->m_fTraction = fTraction; - *(float*)(((char*)pVehicle) + 1088) = fTraction; + ((CBike*)pVehicle)->m_fTraction = fTraction; return 0; } case COMMAND_ARE_MEASUREMENTS_IN_METRES: diff --git a/src/vehicles/Bike.h b/src/vehicles/Bike.h index 38477e80..85ff211b 100644 --- a/src/vehicles/Bike.h +++ b/src/vehicles/Bike.h @@ -1,5 +1,7 @@ #pragma once +#include "Vehicle.h" + // some miami bike leftovers enum eBikeNodes { @@ -22,4 +24,22 @@ public: AnimationId m_bikeSitAnimation; uint8 unk2[180]; float m_aSuspensionSpringRatio[4]; + + /* copied from VC, one of the floats here is gone, assuming m_bike_unused1 */ + float m_aSuspensionSpringRatioPrev[4]; + float m_aWheelTimer[4]; + //float m_bike_unused1; + int m_aWheelSkidmarkType[2]; + bool m_aWheelSkidmarkBloody[2]; + bool m_aWheelSkidmarkUnk[2]; + float m_aWheelRotation[2]; + float m_aWheelSpeed[2]; + float m_aWheelPosition[2]; + float m_aWheelBasePosition[2]; + float m_aSuspensionSpringLength[4]; + float m_aSuspensionLineLength[4]; + float m_fHeightAboveRoad; + /**/ + + float m_fTraction; }; \ No newline at end of file From 8af298c668f825785ca83bc212d86160ceb86b83 Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Mon, 28 Dec 2020 23:08:47 +0300 Subject: [PATCH 44/46] multiple instances sema fix --- src/core/CdStream.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/CdStream.cpp b/src/core/CdStream.cpp index f987dea5..4bb31ea4 100644 --- a/src/core/CdStream.cpp +++ b/src/core/CdStream.cpp @@ -73,7 +73,11 @@ CdStreamInitThread(void) gChannelRequestQ.size = gNumChannels + 1; ASSERT(gChannelRequestQ.items != nil ); +#ifdef FIX_BUGS + gCdStreamSema = CreateSemaphore(nil, 0, 5, nil); +#else gCdStreamSema = CreateSemaphore(nil, 0, 5, "CdStream"); +#endif if ( gCdStreamSema == nil ) { From f7e52d7a21ced8bd0fbb2a62f3231ed8386d7175 Mon Sep 17 00:00:00 2001 From: aap Date: Mon, 28 Dec 2020 21:58:16 +0100 Subject: [PATCH 45/46] fix neo screendroplet moving --- src/extras/screendroplets.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp index 9ac60d4f..6ea72f09 100644 --- a/src/extras/screendroplets.cpp +++ b/src/extras/screendroplets.cpp @@ -12,6 +12,7 @@ #include "RwHelper.h" #include "Timer.h" #include "Camera.h" +#include "World.h" #include "ZoneCull.h" #include "Weather.h" #include "ParticleObject.h" @@ -416,7 +417,8 @@ ScreenDroplets::ProcessCameraMovement(void) uint16 mode = TheCamera.Cams[TheCamera.ActiveCam].Mode; bool isTopDown = mode == CCam::MODE_TOPDOWN || mode == CCam::MODE_GTACLASSIC || mode == CCam::MODE_TOP_DOWN_PED; - bool isLookingInDirection = CPad::GetPad(0)->GetLookBehindForCar() || CPad::GetPad(0)->GetLookLeft() || CPad::GetPad(0)->GetLookRight(); + bool isLookingInDirection = FindPlayerVehicle() && mode == CCam::MODE_1STPERSON && + (CPad::GetPad(0)->GetLookBehindForCar() || CPad::GetPad(0)->GetLookLeft() || CPad::GetPad(0)->GetLookRight()); ms_enabled = !isTopDown && !isLookingInDirection; ms_movingEnabled = !isTopDown && !isLookingInDirection; From f75460fc1d83f82b088aaf69d6fba869fc1569f5 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Tue, 29 Dec 2020 13:55:15 +0200 Subject: [PATCH 46/46] Reorder CEntity functions into their original order --- src/core/References.cpp | 60 +++ src/core/World.cpp | 14 +- src/entities/Entity.cpp | 869 +++++++++++++++------------------------- src/entities/Entity.h | 18 +- src/render/Coronas.cpp | 192 +++++++++ src/render/Particle.cpp | 35 ++ src/render/Renderer.cpp | 13 + src/rw/RwHelper.cpp | 20 - 8 files changed, 634 insertions(+), 587 deletions(-) diff --git a/src/core/References.cpp b/src/core/References.cpp index 52abbc3e..6b0c868c 100644 --- a/src/core/References.cpp +++ b/src/core/References.cpp @@ -21,6 +21,66 @@ CReferences::Init(void) aRefs[NUMREFERENCES-1].next = nil; } +void +CEntity::RegisterReference(CEntity **pent) +{ + if(IsBuilding()) + return; + CReference *ref; + // check if already registered + for(ref = m_pFirstReference; ref; ref = ref->next) + if(ref->pentity == pent) + return; + // have to allocate new reference + ref = CReferences::pEmptyList; + if(ref){ + CReferences::pEmptyList = ref->next; + + ref->pentity = pent; + ref->next = m_pFirstReference; + m_pFirstReference = ref; + return; + } + return; +} + +// Clear all references to this entity +void +CEntity::ResolveReferences(void) +{ + CReference *ref; + // clear pointers to this entity + for(ref = m_pFirstReference; ref; ref = ref->next) + if(*ref->pentity == this) + *ref->pentity = nil; + // free list + if(m_pFirstReference){ + for(ref = m_pFirstReference; ref->next; ref = ref->next) + ; + ref->next = CReferences::pEmptyList; + CReferences::pEmptyList = m_pFirstReference; + m_pFirstReference = nil; + } +} + +// Free all references that no longer point to this entity +void +CEntity::PruneReferences(void) +{ + CReference *ref, *next, **lastnextp; + lastnextp = &m_pFirstReference; + for(ref = m_pFirstReference; ref; ref = next){ + next = ref->next; + if(*ref->pentity == this) + lastnextp = &ref->next; + else{ + *lastnextp = ref->next; + ref->next = CReferences::pEmptyList; + CReferences::pEmptyList = ref; + } + } +} + void CReferences::RemoveReferencesToPlayer(void) { diff --git a/src/core/World.cpp b/src/core/World.cpp index b2c1696c..dc99f015 100644 --- a/src/core/World.cpp +++ b/src/core/World.cpp @@ -1600,14 +1600,24 @@ CWorld::ExtinguishAllCarFiresInArea(CVector point, float range) } } +inline void +AddSteamsFromGround(CPtrList& list) +{ + CPtrNode *pNode = list.first; + while (pNode) { + ((CEntity*)pNode->item)->AddSteamsFromGround(nil); + pNode = pNode->next; + } +} + void CWorld::AddParticles(void) { for(int32 y = 0; y < NUMSECTORS_Y; y++) { for(int32 x = 0; x < NUMSECTORS_X; x++) { CSector *pSector = GetSector(x, y); - CEntity::AddSteamsFromGround(pSector->m_lists[ENTITYLIST_BUILDINGS]); - CEntity::AddSteamsFromGround(pSector->m_lists[ENTITYLIST_DUMMIES]); + AddSteamsFromGround(pSector->m_lists[ENTITYLIST_BUILDINGS]); + AddSteamsFromGround(pSector->m_lists[ENTITYLIST_DUMMIES]); } } } diff --git a/src/entities/Entity.cpp b/src/entities/Entity.cpp index 476439fa..db004af3 100644 --- a/src/entities/Entity.cpp +++ b/src/entities/Entity.cpp @@ -4,31 +4,24 @@ #include "RwHelper.h" #include "ModelIndices.h" #include "Timer.h" -#include "Placeable.h" #include "Entity.h" #include "Object.h" -#include "ParticleObject.h" -#include "Lights.h" #include "World.h" #include "Camera.h" #include "Glass.h" -#include "Clock.h" #include "Weather.h" #include "Timecycle.h" -#include "Bridge.h" #include "TrafficLights.h" #include "Coronas.h" #include "PointLights.h" #include "Shadows.h" #include "Pickups.h" #include "SpecialFX.h" -#include "References.h" #include "TxdStore.h" #include "Zones.h" +#include "MemoryHeap.h" #include "Bones.h" #include "Debug.h" -#include "Renderer.h" -#include "MemoryHeap.h" int gBuildings; @@ -89,11 +82,304 @@ CEntity::~CEntity(void) ResolveReferences(); } +void +CEntity::SetModelIndex(uint32 id) +{ + m_modelIndex = id; + CreateRwObject(); +} + +void +CEntity::SetModelIndexNoCreate(uint32 id) +{ + m_modelIndex = id; +} + +void +CEntity::CreateRwObject(void) +{ + CBaseModelInfo *mi; + + mi = CModelInfo::GetModelInfo(m_modelIndex); + + PUSH_MEMID(MEMID_WORLD); + m_rwObject = mi->CreateInstance(); + POP_MEMID(); + + if(m_rwObject){ + if(IsBuilding()) + gBuildings++; + if(RwObjectGetType(m_rwObject) == rpATOMIC) + m_matrix.AttachRW(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject)), false); + else if(RwObjectGetType(m_rwObject) == rpCLUMP) + m_matrix.AttachRW(RwFrameGetMatrix(RpClumpGetFrame((RpClump*)m_rwObject)), false); + mi->AddRef(); + } +} + +void +CEntity::AttachToRwObject(RwObject *obj) +{ + m_rwObject = obj; + if(m_rwObject){ + if(RwObjectGetType(m_rwObject) == rpATOMIC) + m_matrix.Attach(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject)), false); + else if(RwObjectGetType(m_rwObject) == rpCLUMP) + m_matrix.Attach(RwFrameGetMatrix(RpClumpGetFrame((RpClump*)m_rwObject)), false); + CModelInfo::GetModelInfo(m_modelIndex)->AddRef(); + } +} + +void +CEntity::DetachFromRwObject(void) +{ + if(m_rwObject) + CModelInfo::GetModelInfo(m_modelIndex)->RemoveRef(); + m_rwObject = nil; + m_matrix.Detach(); +} + +RpAtomic* +AtomicRemoveAnimFromSkinCB(RpAtomic *atomic, void *data) +{ + if(RpSkinGeometryGetSkin(RpAtomicGetGeometry(atomic))){ + RpHAnimHierarchy *hier = RpSkinAtomicGetHAnimHierarchy(atomic); +#ifdef LIBRW + if(hier && hier->interpolator->currentAnim){ + RpHAnimAnimationDestroy(hier->interpolator->currentAnim); + hier->interpolator->currentAnim = nil; + } +#else + if(hier && hier->pCurrentAnim){ + RpHAnimAnimationDestroy(hier->pCurrentAnim); + hier->pCurrentAnim = nil; + } +#endif + } + return atomic; +} + +void +CEntity::DeleteRwObject(void) +{ + RwFrame *f; + + m_matrix.Detach(); + if(m_rwObject){ + if(RwObjectGetType(m_rwObject) == rpATOMIC){ + f = RpAtomicGetFrame((RpAtomic*)m_rwObject); + RpAtomicDestroy((RpAtomic*)m_rwObject); + RwFrameDestroy(f); + }else if(RwObjectGetType(m_rwObject) == rpCLUMP){ +#ifdef PED_SKIN + if(IsClumpSkinned((RpClump*)m_rwObject)) + RpClumpForAllAtomics((RpClump*)m_rwObject, AtomicRemoveAnimFromSkinCB, nil); +#endif + RpClumpDestroy((RpClump*)m_rwObject); + } + m_rwObject = nil; + CModelInfo::GetModelInfo(m_modelIndex)->RemoveRef(); + if(IsBuilding()) + gBuildings--; + } +} + +CRect +CEntity::GetBoundRect(void) +{ + CRect rect; + CVector v; + CColModel *col = CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); + + rect.ContainPoint(m_matrix * col->boundingBox.min); + rect.ContainPoint(m_matrix * col->boundingBox.max); + + v = col->boundingBox.min; + v.x = col->boundingBox.max.x; + rect.ContainPoint(m_matrix * v); + + v = col->boundingBox.max; + v.x = col->boundingBox.min.x; + rect.ContainPoint(m_matrix * v); + + return rect; +} + +CVector +CEntity::GetBoundCentre(void) +{ + CVector v; + GetBoundCentre(v); + return v; +} + void CEntity::GetBoundCentre(CVector &out) { out = m_matrix * CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingSphere.center; -}; +} + +float +CEntity::GetBoundRadius(void) +{ + return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingSphere.radius; +} + +void +CEntity::UpdateRwFrame(void) +{ + if(m_rwObject){ + if(RwObjectGetType(m_rwObject) == rpATOMIC) + RwFrameUpdateObjects(RpAtomicGetFrame((RpAtomic*)m_rwObject)); + else if(RwObjectGetType(m_rwObject) == rpCLUMP) + RwFrameUpdateObjects(RpClumpGetFrame((RpClump*)m_rwObject)); + } +} + +#ifdef PED_SKIN +void +CEntity::UpdateRpHAnim(void) +{ + RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(GetClump()); + RpHAnimHierarchyUpdateMatrices(hier); + +#if 0 + int i; + char buf[256]; + if(this == (CEntity*)FindPlayerPed()) + for(i = 0; i < hier->numNodes; i++){ + RpHAnimStdInterpFrame *kf = (RpHAnimStdInterpFrame*)rpHANIMHIERARCHYGETINTERPFRAME(hier, i); + sprintf(buf, "%6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %d %s", + kf->q.imag.x, kf->q.imag.y, kf->q.imag.z, kf->q.real, + kf->t.x, kf->t.y, kf->t.z, + HIERNODEID(hier, i), + ConvertBoneTag2BoneName(HIERNODEID(hier, i))); + CDebug::PrintAt(buf, 10, 1+i*3); + + RwMatrix *m = &RpHAnimHierarchyGetMatrixArray(hier)[i]; + sprintf(buf, "%6.3f %6.3f %6.3f %6.3f", + m->right.x, m->up.x, m->at.x, m->pos.x); + CDebug::PrintAt(buf, 80, 1+i*3+0); + sprintf(buf, "%6.3f %6.3f %6.3f %6.3f", + m->right.y, m->up.y, m->at.y, m->pos.y); + CDebug::PrintAt(buf, 80, 1+i*3+1); + sprintf(buf, "%6.3f %6.3f %6.3f %6.3f", + m->right.z, m->up.z, m->at.z, m->pos.z); + CDebug::PrintAt(buf, 80, 1+i*3+2); + } + + void RenderSkeleton(RpHAnimHierarchy *hier); + RenderSkeleton(hier); +#endif +} +#endif + +void +CEntity::PreRender(void) +{ + switch(m_type){ + case ENTITY_TYPE_BUILDING: + if(GetModelIndex() == MI_RAILTRACKS){ + CShadows::StoreShadowForPole(this, 0.0f, -10.949f, 5.0f, 8.0f, 1.0f, 0); + CShadows::StoreShadowForPole(this, 0.0f, 10.949f, 5.0f, 8.0f, 1.0f, 1); + }else if(IsTreeModel(GetModelIndex())){ + CShadows::StoreShadowForTree(this); + ModifyMatrixForTreeInWind(); + }else if(IsBannerModel(GetModelIndex())){ + ModifyMatrixForBannerInWind(); + } + break; + case ENTITY_TYPE_OBJECT: + if(GetModelIndex() == MI_COLLECTABLE1){ + CPickups::DoCollectableEffects(this); + GetMatrix().UpdateRW(); + UpdateRwFrame(); + }else if(GetModelIndex() == MI_MONEY){ + CPickups::DoMoneyEffects(this); + GetMatrix().UpdateRW(); + UpdateRwFrame(); + }else if(GetModelIndex() == MI_NAUTICALMINE || + GetModelIndex() == MI_CARMINE || + GetModelIndex() == MI_BRIEFCASE){ + if(((CObject*)this)->bIsPickup){ + CPickups::DoMineEffects(this); + GetMatrix().UpdateRW(); + UpdateRwFrame(); + } + }else if(IsPickupModel(GetModelIndex())){ + if(((CObject*)this)->bIsPickup){ + CPickups::DoPickUpEffects(this); + GetMatrix().UpdateRW(); + UpdateRwFrame(); + }else if(GetModelIndex() == MI_GRENADE){ + CMotionBlurStreaks::RegisterStreak((uintptr)this, + 100, 100, 100, + GetPosition() - 0.07f*TheCamera.GetRight(), + GetPosition() + 0.07f*TheCamera.GetRight()); + }else if(GetModelIndex() == MI_MOLOTOV){ + CMotionBlurStreaks::RegisterStreak((uintptr)this, + 0, 100, 0, + GetPosition() - 0.07f*TheCamera.GetRight(), + GetPosition() + 0.07f*TheCamera.GetRight()); + } + }else if(GetModelIndex() == MI_MISSILE){ + CVector pos = GetPosition(); + float flicker = (CGeneral::GetRandomNumber() & 0xF)/(float)0x10; + CShadows::StoreShadowToBeRendered(SHADOWTYPE_ADDITIVE, + gpShadowExplosionTex, &pos, + 8.0f, 0.0f, 0.0f, -8.0f, + 255, 200.0f*flicker, 160.0f*flicker, 120.0f*flicker, + 20.0f, false, 1.0f); + CPointLights::AddLight(CPointLights::LIGHT_POINT, + pos, CVector(0.0f, 0.0f, 0.0f), + 8.0f, + 1.0f*flicker, + 0.8f*flicker, + 0.6f*flicker, + CPointLights::FOG_NONE, true); + CCoronas::RegisterCorona((uintptr)this, + 255.0f*flicker, 220.0f*flicker, 190.0f*flicker, 255, + pos, 6.0f*flicker, 80.0f, gpCoronaTexture[CCoronas::TYPE_STAR], + CCoronas::FLARE_NONE, CCoronas::REFLECTION_ON, + CCoronas::LOSCHECK_OFF, CCoronas::STREAK_OFF, 0.0f); + }else if(IsGlass(GetModelIndex())){ + PreRenderForGlassWindow(); + } + // fall through + case ENTITY_TYPE_DUMMY: + if(GetModelIndex() == MI_TRAFFICLIGHTS){ + CTrafficLights::DisplayActualLight(this); + CShadows::StoreShadowForPole(this, 2.957f, 0.147f, 0.0f, 16.0f, 0.4f, 0); + }else if(GetModelIndex() == MI_SINGLESTREETLIGHTS1) + CShadows::StoreShadowForPole(this, 0.744f, 0.0f, 0.0f, 16.0f, 0.4f, 0); + else if(GetModelIndex() == MI_SINGLESTREETLIGHTS2) + CShadows::StoreShadowForPole(this, 0.043f, 0.0f, 0.0f, 16.0f, 0.4f, 0); + else if(GetModelIndex() == MI_SINGLESTREETLIGHTS3) + CShadows::StoreShadowForPole(this, 1.143f, 0.145f, 0.0f, 16.0f, 0.4f, 0); + else if(GetModelIndex() == MI_DOUBLESTREETLIGHTS) + CShadows::StoreShadowForPole(this, 0.0f, -0.048f, 0.0f, 16.0f, 0.4f, 0); + else if(GetModelIndex() == MI_STREETLAMP1 || + GetModelIndex() == MI_STREETLAMP2) + CShadows::StoreShadowForPole(this, 0.0f, 0.0f, 0.0f, 16.0f, 0.4f, 0); + break; + } + + if (CModelInfo::GetModelInfo(GetModelIndex())->GetNum2dEffects() != 0) + ProcessLightsForEntity(); +} + +void +CEntity::Render(void) +{ + if(m_rwObject){ + bImBeingRendered = true; + if(RwObjectGetType(m_rwObject) == rpATOMIC) + RpAtomicRender((RpAtomic*)m_rwObject); + else + RpClumpRender((RpClump*)m_rwObject); + bImBeingRendered = false; + } +} bool CEntity::GetIsTouching(CVector const ¢er, float radius) @@ -101,6 +387,18 @@ CEntity::GetIsTouching(CVector const ¢er, float radius) return sq(GetBoundRadius()+radius) > (GetBoundCentre()-center).MagnitudeSqr(); } +bool +CEntity::IsVisible(void) +{ + return m_rwObject && bIsVisible && GetIsOnScreen(); +} + +bool +CEntity::IsVisibleComplex(void) +{ + return m_rwObject && bIsVisible && GetIsOnScreenComplex(); +} + bool CEntity::GetIsOnScreen(void) { @@ -269,62 +567,10 @@ CEntity::Remove(void) } } -void -CEntity::CreateRwObject(void) +float +CEntity::GetDistanceFromCentreOfMassToBaseOfModel(void) { - CBaseModelInfo *mi; - - mi = CModelInfo::GetModelInfo(m_modelIndex); - - PUSH_MEMID(MEMID_WORLD); - m_rwObject = mi->CreateInstance(); - POP_MEMID(); - - if(m_rwObject){ - if(IsBuilding()) - gBuildings++; - if(RwObjectGetType(m_rwObject) == rpATOMIC) - m_matrix.AttachRW(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject)), false); - else if(RwObjectGetType(m_rwObject) == rpCLUMP) - m_matrix.AttachRW(RwFrameGetMatrix(RpClumpGetFrame((RpClump*)m_rwObject)), false); - mi->AddRef(); - } -} - -void -CEntity::DeleteRwObject(void) -{ - RwFrame *f; - - m_matrix.Detach(); - if(m_rwObject){ - if(RwObjectGetType(m_rwObject) == rpATOMIC){ - f = RpAtomicGetFrame((RpAtomic*)m_rwObject); - RpAtomicDestroy((RpAtomic*)m_rwObject); - RwFrameDestroy(f); - }else if(RwObjectGetType(m_rwObject) == rpCLUMP){ -#ifdef PED_SKIN - if(IsClumpSkinned((RpClump*)m_rwObject)) - RpClumpForAllAtomics((RpClump*)m_rwObject, AtomicRemoveAnimFromSkinCB, nil); -#endif - RpClumpDestroy((RpClump*)m_rwObject); - } - m_rwObject = nil; - CModelInfo::GetModelInfo(m_modelIndex)->RemoveRef(); - if(IsBuilding()) - gBuildings--; - } -} - -void -CEntity::UpdateRwFrame(void) -{ - if(m_rwObject){ - if(RwObjectGetType(m_rwObject) == rpATOMIC) - RwFrameUpdateObjects(RpAtomicGetFrame((RpAtomic*)m_rwObject)); - else if(RwObjectGetType(m_rwObject) == rpCLUMP) - RwFrameUpdateObjects(RpClumpGetFrame((RpClump*)m_rwObject)); - } + return -CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingBox.min.z; } void @@ -347,490 +593,6 @@ CEntity::SetupBigBuilding(void) m_level = LEVEL_GENERIC; } -CRect -CEntity::GetBoundRect(void) -{ - CRect rect; - CVector v; - CColModel *col = CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); - - rect.ContainPoint(m_matrix * col->boundingBox.min); - rect.ContainPoint(m_matrix * col->boundingBox.max); - - v = col->boundingBox.min; - v.x = col->boundingBox.max.x; - rect.ContainPoint(m_matrix * v); - - v = col->boundingBox.max; - v.x = col->boundingBox.min.x; - rect.ContainPoint(m_matrix * v); - - return rect; -} - -void -CEntity::PreRender(void) -{ - switch(m_type){ - case ENTITY_TYPE_BUILDING: - if(GetModelIndex() == MI_RAILTRACKS){ - CShadows::StoreShadowForPole(this, 0.0f, -10.949f, 5.0f, 8.0f, 1.0f, 0); - CShadows::StoreShadowForPole(this, 0.0f, 10.949f, 5.0f, 8.0f, 1.0f, 1); - }else if(IsTreeModel(GetModelIndex())){ - CShadows::StoreShadowForTree(this); - ModifyMatrixForTreeInWind(); - }else if(IsBannerModel(GetModelIndex())){ - ModifyMatrixForBannerInWind(); - } - break; - case ENTITY_TYPE_OBJECT: - if(GetModelIndex() == MI_COLLECTABLE1){ - CPickups::DoCollectableEffects(this); - GetMatrix().UpdateRW(); - UpdateRwFrame(); - }else if(GetModelIndex() == MI_MONEY){ - CPickups::DoMoneyEffects(this); - GetMatrix().UpdateRW(); - UpdateRwFrame(); - }else if(GetModelIndex() == MI_NAUTICALMINE || - GetModelIndex() == MI_CARMINE || - GetModelIndex() == MI_BRIEFCASE){ - if(((CObject*)this)->bIsPickup){ - CPickups::DoMineEffects(this); - GetMatrix().UpdateRW(); - UpdateRwFrame(); - } - }else if(IsPickupModel(GetModelIndex())){ - if(((CObject*)this)->bIsPickup){ - CPickups::DoPickUpEffects(this); - GetMatrix().UpdateRW(); - UpdateRwFrame(); - }else if(GetModelIndex() == MI_GRENADE){ - CMotionBlurStreaks::RegisterStreak((uintptr)this, - 100, 100, 100, - GetPosition() - 0.07f*TheCamera.GetRight(), - GetPosition() + 0.07f*TheCamera.GetRight()); - }else if(GetModelIndex() == MI_MOLOTOV){ - CMotionBlurStreaks::RegisterStreak((uintptr)this, - 0, 100, 0, - GetPosition() - 0.07f*TheCamera.GetRight(), - GetPosition() + 0.07f*TheCamera.GetRight()); - } - }else if(GetModelIndex() == MI_MISSILE){ - CVector pos = GetPosition(); - float flicker = (CGeneral::GetRandomNumber() & 0xF)/(float)0x10; - CShadows::StoreShadowToBeRendered(SHADOWTYPE_ADDITIVE, - gpShadowExplosionTex, &pos, - 8.0f, 0.0f, 0.0f, -8.0f, - 255, 200.0f*flicker, 160.0f*flicker, 120.0f*flicker, - 20.0f, false, 1.0f); - CPointLights::AddLight(CPointLights::LIGHT_POINT, - pos, CVector(0.0f, 0.0f, 0.0f), - 8.0f, - 1.0f*flicker, - 0.8f*flicker, - 0.6f*flicker, - CPointLights::FOG_NONE, true); - CCoronas::RegisterCorona((uintptr)this, - 255.0f*flicker, 220.0f*flicker, 190.0f*flicker, 255, - pos, 6.0f*flicker, 80.0f, gpCoronaTexture[CCoronas::TYPE_STAR], - CCoronas::FLARE_NONE, CCoronas::REFLECTION_ON, - CCoronas::LOSCHECK_OFF, CCoronas::STREAK_OFF, 0.0f); - }else if(IsGlass(GetModelIndex())){ - PreRenderForGlassWindow(); - } - // fall through - case ENTITY_TYPE_DUMMY: - if(GetModelIndex() == MI_TRAFFICLIGHTS){ - CTrafficLights::DisplayActualLight(this); - CShadows::StoreShadowForPole(this, 2.957f, 0.147f, 0.0f, 16.0f, 0.4f, 0); - }else if(GetModelIndex() == MI_SINGLESTREETLIGHTS1) - CShadows::StoreShadowForPole(this, 0.744f, 0.0f, 0.0f, 16.0f, 0.4f, 0); - else if(GetModelIndex() == MI_SINGLESTREETLIGHTS2) - CShadows::StoreShadowForPole(this, 0.043f, 0.0f, 0.0f, 16.0f, 0.4f, 0); - else if(GetModelIndex() == MI_SINGLESTREETLIGHTS3) - CShadows::StoreShadowForPole(this, 1.143f, 0.145f, 0.0f, 16.0f, 0.4f, 0); - else if(GetModelIndex() == MI_DOUBLESTREETLIGHTS) - CShadows::StoreShadowForPole(this, 0.0f, -0.048f, 0.0f, 16.0f, 0.4f, 0); - else if(GetModelIndex() == MI_STREETLAMP1 || - GetModelIndex() == MI_STREETLAMP2) - CShadows::StoreShadowForPole(this, 0.0f, 0.0f, 0.0f, 16.0f, 0.4f, 0); - break; - } - - if (CModelInfo::GetModelInfo(GetModelIndex())->GetNum2dEffects() != 0) - ProcessLightsForEntity(); -} - -void -CEntity::PreRenderForGlassWindow(void) -{ - CGlass::AskForObjectToBeRenderedInGlass(this); - bIsVisible = false; -} - -void -CEntity::Render(void) -{ - if(m_rwObject){ - bImBeingRendered = true; - if(RwObjectGetType(m_rwObject) == rpATOMIC) - RpAtomicRender((RpAtomic*)m_rwObject); - else - RpClumpRender((RpClump*)m_rwObject); - bImBeingRendered = false; - } -} - -bool -CEntity::SetupLighting(void) -{ - DeActivateDirectional(); - SetAmbientColours(); - return false; -} - -void -CEntity::AttachToRwObject(RwObject *obj) -{ - m_rwObject = obj; - if(m_rwObject){ - if(RwObjectGetType(m_rwObject) == rpATOMIC) - m_matrix.Attach(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject)), false); - else if(RwObjectGetType(m_rwObject) == rpCLUMP) - m_matrix.Attach(RwFrameGetMatrix(RpClumpGetFrame((RpClump*)m_rwObject)), false); - CModelInfo::GetModelInfo(m_modelIndex)->AddRef(); - } -} - -void -CEntity::DetachFromRwObject(void) -{ - if(m_rwObject) - CModelInfo::GetModelInfo(m_modelIndex)->RemoveRef(); - m_rwObject = nil; - m_matrix.Detach(); -} - -void -CEntity::RegisterReference(CEntity **pent) -{ - if(IsBuilding()) - return; - CReference *ref; - // check if already registered - for(ref = m_pFirstReference; ref; ref = ref->next) - if(ref->pentity == pent) - return; - // have to allocate new reference - ref = CReferences::pEmptyList; - if(ref){ - CReferences::pEmptyList = ref->next; - - ref->pentity = pent; - ref->next = m_pFirstReference; - m_pFirstReference = ref; - return; - } - return; -} - -// Clear all references to this entity -void -CEntity::ResolveReferences(void) -{ - CReference *ref; - // clear pointers to this entity - for(ref = m_pFirstReference; ref; ref = ref->next) - if(*ref->pentity == this) - *ref->pentity = nil; - // free list - if(m_pFirstReference){ - for(ref = m_pFirstReference; ref->next; ref = ref->next) - ; - ref->next = CReferences::pEmptyList; - CReferences::pEmptyList = m_pFirstReference; - m_pFirstReference = nil; - } -} - -// Free all references that no longer point to this entity -void -CEntity::PruneReferences(void) -{ - CReference *ref, *next, **lastnextp; - lastnextp = &m_pFirstReference; - for(ref = m_pFirstReference; ref; ref = next){ - next = ref->next; - if(*ref->pentity == this) - lastnextp = &ref->next; - else{ - *lastnextp = ref->next; - ref->next = CReferences::pEmptyList; - CReferences::pEmptyList = ref; - } - } -} - -#ifdef PED_SKIN -void -CEntity::UpdateRpHAnim(void) -{ - RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(GetClump()); - RpHAnimHierarchyUpdateMatrices(hier); - -#if 0 - int i; - char buf[256]; - if(this == (CEntity*)FindPlayerPed()) - for(i = 0; i < hier->numNodes; i++){ - RpHAnimStdInterpFrame *kf = (RpHAnimStdInterpFrame*)rpHANIMHIERARCHYGETINTERPFRAME(hier, i); - sprintf(buf, "%6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %d %s", - kf->q.imag.x, kf->q.imag.y, kf->q.imag.z, kf->q.real, - kf->t.x, kf->t.y, kf->t.z, - HIERNODEID(hier, i), - ConvertBoneTag2BoneName(HIERNODEID(hier, i))); - CDebug::PrintAt(buf, 10, 1+i*3); - - RwMatrix *m = &RpHAnimHierarchyGetMatrixArray(hier)[i]; - sprintf(buf, "%6.3f %6.3f %6.3f %6.3f", - m->right.x, m->up.x, m->at.x, m->pos.x); - CDebug::PrintAt(buf, 80, 1+i*3+0); - sprintf(buf, "%6.3f %6.3f %6.3f %6.3f", - m->right.y, m->up.y, m->at.y, m->pos.y); - CDebug::PrintAt(buf, 80, 1+i*3+1); - sprintf(buf, "%6.3f %6.3f %6.3f %6.3f", - m->right.z, m->up.z, m->at.z, m->pos.z); - CDebug::PrintAt(buf, 80, 1+i*3+2); - } - - void RenderSkeleton(RpHAnimHierarchy *hier); - RenderSkeleton(hier); -#endif -} -#endif - -void -CEntity::AddSteamsFromGround(CVector *unused) -{ - int i, n; - C2dEffect *effect; - CVector pos; - - n = CModelInfo::GetModelInfo(GetModelIndex())->GetNum2dEffects(); - for(i = 0; i < n; i++){ - effect = CModelInfo::GetModelInfo(GetModelIndex())->Get2dEffect(i); - if(effect->type != EFFECT_PARTICLE) - continue; - - pos = GetMatrix() * effect->pos; - switch(effect->particle.particleType){ - case 0: - CParticleObject::AddObject(POBJECT_PAVEMENT_STEAM, pos, effect->particle.dir, effect->particle.scale, false); - break; - case 1: - CParticleObject::AddObject(POBJECT_WALL_STEAM, pos, effect->particle.dir, effect->particle.scale, false); - break; - case 2: - CParticleObject::AddObject(POBJECT_DRY_ICE, pos, effect->particle.scale, false); - break; - case 3: - CParticleObject::AddObject(POBJECT_SMALL_FIRE, pos, effect->particle.dir, effect->particle.scale, false); - break; - case 4: - CParticleObject::AddObject(POBJECT_DARK_SMOKE, pos, effect->particle.dir, effect->particle.scale, false); - break; - } - } -} - -void -CEntity::ProcessLightsForEntity(void) -{ - int i, n; - C2dEffect *effect; - CVector pos; - bool lightOn, lightFlickering; - uint32 flashTimer1, flashTimer2, flashTimer3; - - if(bRenderDamaged || !bIsVisible || GetUp().z < 0.96f) - return; - - flashTimer1 = 0; - flashTimer2 = 0; - flashTimer3 = 0; - - n = CModelInfo::GetModelInfo(GetModelIndex())->GetNum2dEffects(); - for(i = 0; i < n; i++, flashTimer1 += 0x80, flashTimer2 += 0x100, flashTimer3 += 0x200){ - effect = CModelInfo::GetModelInfo(GetModelIndex())->Get2dEffect(i); - - if(effect->type != EFFECT_LIGHT) - continue; - - pos = GetMatrix() * effect->pos; - - lightOn = false; - lightFlickering = false; - switch(effect->light.lightType){ - case LIGHT_ON: - lightOn = true; - break; - case LIGHT_ON_NIGHT: - if(CClock::GetHours() > 18 || CClock::GetHours() < 7) - lightOn = true; - break; - case LIGHT_FLICKER: - if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed) & 0x60) - lightOn = true; - else - lightFlickering = true; - if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed) & 3) - lightOn = true; - break; - case LIGHT_FLICKER_NIGHT: - if(CClock::GetHours() > 18 || CClock::GetHours() < 7 || CWeather::WetRoads > 0.5f){ - if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed) & 0x60) - lightOn = true; - else - lightFlickering = true; - if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed) & 3) - lightOn = true; - } - break; - case LIGHT_FLASH1: - if((CTimer::GetTimeInMilliseconds() + flashTimer1) & 0x200) - lightOn = true; - break; - case LIGHT_FLASH1_NIGHT: - if(CClock::GetHours() > 18 || CClock::GetHours() < 7) - if((CTimer::GetTimeInMilliseconds() + flashTimer1) & 0x200) - lightOn = true; - break; - case LIGHT_FLASH2: - if((CTimer::GetTimeInMilliseconds() + flashTimer2) & 0x400) - lightOn = true; - break; - case LIGHT_FLASH2_NIGHT: - if(CClock::GetHours() > 18 || CClock::GetHours() < 7) - if((CTimer::GetTimeInMilliseconds() + flashTimer2) & 0x400) - lightOn = true; - break; - case LIGHT_FLASH3: - if((CTimer::GetTimeInMilliseconds() + flashTimer3) & 0x800) - lightOn = true; - break; - case LIGHT_FLASH3_NIGHT: - if(CClock::GetHours() > 18 || CClock::GetHours() < 7) - if((CTimer::GetTimeInMilliseconds() + flashTimer3) & 0x800) - lightOn = true; - break; - case LIGHT_RANDOM_FLICKER: - if(m_randomSeed > 16) - lightOn = true; - else{ - if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed*8) & 0x60) - lightOn = true; - else - lightFlickering = true; - if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed*8) & 3) - lightOn = true; - } - break; - case LIGHT_RANDOM_FLICKER_NIGHT: - if(CClock::GetHours() > 18 || CClock::GetHours() < 7){ - if(m_randomSeed > 16) - lightOn = true; - else{ - if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed*8) & 0x60) - lightOn = true; - else - lightFlickering = true; - if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed*8) & 3) - lightOn = true; - } - } - break; - case LIGHT_BRIDGE_FLASH1: - if(CBridge::ShouldLightsBeFlashing() && CTimer::GetTimeInMilliseconds() & 0x200) - lightOn = true; - break; - case LIGHT_BRIDGE_FLASH2: - if(CBridge::ShouldLightsBeFlashing() && (CTimer::GetTimeInMilliseconds() & 0x1FF) < 60) - lightOn = true; - break; - } - - // Corona - if(lightOn) - CCoronas::RegisterCorona((uintptr)this + i, - effect->col.r, effect->col.g, effect->col.b, 255, - pos, effect->light.size, effect->light.dist, - effect->light.corona, effect->light.flareType, effect->light.roadReflection, - effect->light.flags&LIGHTFLAG_LOSCHECK, CCoronas::STREAK_OFF, 0.0f); - else if(lightFlickering) - CCoronas::RegisterCorona((uintptr)this + i, - 0, 0, 0, 255, - pos, effect->light.size, effect->light.dist, - effect->light.corona, effect->light.flareType, effect->light.roadReflection, - effect->light.flags&LIGHTFLAG_LOSCHECK, CCoronas::STREAK_OFF, 0.0f); - - // Pointlight - if(effect->light.flags & LIGHTFLAG_FOG_ALWAYS){ - CPointLights::AddLight(CPointLights::LIGHT_FOGONLY_ALWAYS, - pos, CVector(0.0f, 0.0f, 0.0f), - effect->light.range, - effect->col.r/255.0f, effect->col.g/255.0f, effect->col.b/255.0f, - CPointLights::FOG_ALWAYS, true); - }else if(effect->light.flags & LIGHTFLAG_FOG_NORMAL && lightOn && effect->light.range == 0.0f){ - CPointLights::AddLight(CPointLights::LIGHT_FOGONLY, - pos, CVector(0.0f, 0.0f, 0.0f), - effect->light.range, - effect->col.r/255.0f, effect->col.g/255.0f, effect->col.b/255.0f, - CPointLights::FOG_NORMAL, true); - }else if(lightOn && effect->light.range != 0.0f){ - if(effect->col.r == 0 && effect->col.g == 0 && effect->col.b == 0){ - CPointLights::AddLight(CPointLights::LIGHT_POINT, - pos, CVector(0.0f, 0.0f, 0.0f), - effect->light.range, - 0.0f, 0.0f, 0.0f, - CPointLights::FOG_NONE, true); - }else{ - CPointLights::AddLight(CPointLights::LIGHT_POINT, - pos, CVector(0.0f, 0.0f, 0.0f), - effect->light.range, - effect->col.r*CTimeCycle::GetSpriteBrightness()/255.0f, - effect->col.g*CTimeCycle::GetSpriteBrightness()/255.0f, - effect->col.b*CTimeCycle::GetSpriteBrightness()/255.0f, - // half-useless because LIGHTFLAG_FOG_ALWAYS can't be on - (effect->light.flags & LIGHTFLAG_FOG) >> 1, - true); - } - } - - // Light shadow - if(effect->light.shadowSize != 0.0f){ - if(lightOn){ - CShadows::StoreStaticShadow((uintptr)this + i, SHADOWTYPE_ADDITIVE, - effect->light.shadow, &pos, - effect->light.shadowSize, 0.0f, - 0.0f, -effect->light.shadowSize, - 128, - effect->col.r*CTimeCycle::GetSpriteBrightness()*effect->light.shadowIntensity/255.0f, - effect->col.g*CTimeCycle::GetSpriteBrightness()*effect->light.shadowIntensity/255.0f, - effect->col.b*CTimeCycle::GetSpriteBrightness()*effect->light.shadowIntensity/255.0f, - 15.0f, 1.0f, 40.0f, false, 0.0f); - }else if(lightFlickering){ - CShadows::StoreStaticShadow((uintptr)this + i, SHADOWTYPE_ADDITIVE, - effect->light.shadow, &pos, - effect->light.shadowSize, 0.0f, - 0.0f, -effect->light.shadowSize, - 0, 0.0f, 0.0f, 0.0f, - 15.0f, 1.0f, 40.0f, false, 0.0f); - } - } - } -} - float WindTabel[] = { 1.0f, 0.5f, 0.2f, 0.7f, 0.4f, 1.0f, 0.5f, 0.3f, 0.2f, 0.1f, 0.7f, 0.6f, 0.3f, 1.0f, 0.5f, 0.2f, @@ -917,14 +679,11 @@ CEntity::ModifyMatrixForBannerInWind(void) UpdateRwFrame(); } -void -CEntity::AddSteamsFromGround(CPtrList& list) +void +CEntity::PreRenderForGlassWindow(void) { - CPtrNode *pNode = list.first; - while (pNode) { - ((CEntity*)pNode->item)->AddSteamsFromGround(nil); - pNode = pNode->next; - } + CGlass::AskForObjectToBeRenderedInGlass(this); + bIsVisible = false; } #ifdef COMPATIBLE_SAVES diff --git a/src/entities/Entity.h b/src/entities/Entity.h index 9372c85d..7ee638d7 100644 --- a/src/entities/Entity.h +++ b/src/entities/Entity.h @@ -111,8 +111,8 @@ public: virtual void Add(void); virtual void Remove(void); - virtual void SetModelIndex(uint32 id) { m_modelIndex = id; CreateRwObject(); } - virtual void SetModelIndexNoCreate(uint32 id) { m_modelIndex = id; } + virtual void SetModelIndex(uint32 id); + virtual void SetModelIndexNoCreate(uint32 id); virtual void CreateRwObject(void); virtual void DeleteRwObject(void); virtual CRect GetBoundRect(void); @@ -123,7 +123,7 @@ public: virtual void PreRender(void); virtual void Render(void); virtual bool SetupLighting(void); - virtual void RemoveLighting(bool) {} + virtual void RemoveLighting(bool); virtual void FlagToDestroyWhenNextProcessed(void) {} bool IsBuilding(void) { return m_type == ENTITY_TYPE_BUILDING; } @@ -142,14 +142,14 @@ public: } void GetBoundCentre(CVector &out); - CVector GetBoundCentre(void) { CVector v; GetBoundCentre(v); return v; } - float GetBoundRadius(void) { return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingSphere.radius; } - float GetDistanceFromCentreOfMassToBaseOfModel(void) { return -CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingBox.min.z; } + CVector GetBoundCentre(void); + float GetBoundRadius(void); + float GetDistanceFromCentreOfMassToBaseOfModel(void); bool GetIsTouching(CVector const ¢er, float r); bool GetIsOnScreen(void); bool GetIsOnScreenComplex(void); - bool IsVisible(void) { return m_rwObject && bIsVisible && GetIsOnScreen(); } - bool IsVisibleComplex(void) { return m_rwObject && bIsVisible && GetIsOnScreenComplex(); } + bool IsVisible(void); + bool IsVisibleComplex(void); int16 GetModelIndex(void) const { return m_modelIndex; } void UpdateRwFrame(void); void SetupBigBuilding(void); @@ -170,8 +170,6 @@ public: void ModifyMatrixForTreeInWind(void); void ModifyMatrixForBannerInWind(void); void ProcessLightsForEntity(void); - - static void AddSteamsFromGround(CPtrList& list); }; VALIDATE_SIZE(CEntity, 0x64); diff --git a/src/render/Coronas.cpp b/src/render/Coronas.cpp index 48f0f6b9..32957259 100644 --- a/src/render/Coronas.cpp +++ b/src/render/Coronas.cpp @@ -2,6 +2,7 @@ #include "main.h" #include "General.h" +#include "Entity.h" #include "TxdStore.h" #include "Camera.h" #include "Sprite.h" @@ -11,6 +12,10 @@ #include "Collision.h" #include "Timecycle.h" #include "Coronas.h" +#include "PointLights.h" +#include "Shadows.h" +#include "Clock.h" +#include "Bridge.h" struct FlareDef { @@ -577,3 +582,190 @@ CRegisteredCorona::Update(void) firstUpdate = false; registeredThisFrame = false; } + +void +CEntity::ProcessLightsForEntity(void) +{ + int i, n; + C2dEffect *effect; + CVector pos; + bool lightOn, lightFlickering; + uint32 flashTimer1, flashTimer2, flashTimer3; + + if(bRenderDamaged || !bIsVisible || GetUp().z < 0.96f) + return; + + flashTimer1 = 0; + flashTimer2 = 0; + flashTimer3 = 0; + + n = CModelInfo::GetModelInfo(GetModelIndex())->GetNum2dEffects(); + for(i = 0; i < n; i++, flashTimer1 += 0x80, flashTimer2 += 0x100, flashTimer3 += 0x200){ + effect = CModelInfo::GetModelInfo(GetModelIndex())->Get2dEffect(i); + + if(effect->type != EFFECT_LIGHT) + continue; + + pos = GetMatrix() * effect->pos; + + lightOn = false; + lightFlickering = false; + switch(effect->light.lightType){ + case LIGHT_ON: + lightOn = true; + break; + case LIGHT_ON_NIGHT: + if(CClock::GetHours() > 18 || CClock::GetHours() < 7) + lightOn = true; + break; + case LIGHT_FLICKER: + if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed) & 0x60) + lightOn = true; + else + lightFlickering = true; + if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed) & 3) + lightOn = true; + break; + case LIGHT_FLICKER_NIGHT: + if(CClock::GetHours() > 18 || CClock::GetHours() < 7 || CWeather::WetRoads > 0.5f){ + if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed) & 0x60) + lightOn = true; + else + lightFlickering = true; + if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed) & 3) + lightOn = true; + } + break; + case LIGHT_FLASH1: + if((CTimer::GetTimeInMilliseconds() + flashTimer1) & 0x200) + lightOn = true; + break; + case LIGHT_FLASH1_NIGHT: + if(CClock::GetHours() > 18 || CClock::GetHours() < 7) + if((CTimer::GetTimeInMilliseconds() + flashTimer1) & 0x200) + lightOn = true; + break; + case LIGHT_FLASH2: + if((CTimer::GetTimeInMilliseconds() + flashTimer2) & 0x400) + lightOn = true; + break; + case LIGHT_FLASH2_NIGHT: + if(CClock::GetHours() > 18 || CClock::GetHours() < 7) + if((CTimer::GetTimeInMilliseconds() + flashTimer2) & 0x400) + lightOn = true; + break; + case LIGHT_FLASH3: + if((CTimer::GetTimeInMilliseconds() + flashTimer3) & 0x800) + lightOn = true; + break; + case LIGHT_FLASH3_NIGHT: + if(CClock::GetHours() > 18 || CClock::GetHours() < 7) + if((CTimer::GetTimeInMilliseconds() + flashTimer3) & 0x800) + lightOn = true; + break; + case LIGHT_RANDOM_FLICKER: + if(m_randomSeed > 16) + lightOn = true; + else{ + if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed*8) & 0x60) + lightOn = true; + else + lightFlickering = true; + if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed*8) & 3) + lightOn = true; + } + break; + case LIGHT_RANDOM_FLICKER_NIGHT: + if(CClock::GetHours() > 18 || CClock::GetHours() < 7){ + if(m_randomSeed > 16) + lightOn = true; + else{ + if((CTimer::GetTimeInMilliseconds() ^ m_randomSeed*8) & 0x60) + lightOn = true; + else + lightFlickering = true; + if((CTimer::GetTimeInMilliseconds()>>11 ^ m_randomSeed*8) & 3) + lightOn = true; + } + } + break; + case LIGHT_BRIDGE_FLASH1: + if(CBridge::ShouldLightsBeFlashing() && CTimer::GetTimeInMilliseconds() & 0x200) + lightOn = true; + break; + case LIGHT_BRIDGE_FLASH2: + if(CBridge::ShouldLightsBeFlashing() && (CTimer::GetTimeInMilliseconds() & 0x1FF) < 60) + lightOn = true; + break; + } + + // Corona + if(lightOn) + CCoronas::RegisterCorona((uintptr)this + i, + effect->col.r, effect->col.g, effect->col.b, 255, + pos, effect->light.size, effect->light.dist, + effect->light.corona, effect->light.flareType, effect->light.roadReflection, + effect->light.flags&LIGHTFLAG_LOSCHECK, CCoronas::STREAK_OFF, 0.0f); + else if(lightFlickering) + CCoronas::RegisterCorona((uintptr)this + i, + 0, 0, 0, 255, + pos, effect->light.size, effect->light.dist, + effect->light.corona, effect->light.flareType, effect->light.roadReflection, + effect->light.flags&LIGHTFLAG_LOSCHECK, CCoronas::STREAK_OFF, 0.0f); + + // Pointlight + if(effect->light.flags & LIGHTFLAG_FOG_ALWAYS){ + CPointLights::AddLight(CPointLights::LIGHT_FOGONLY_ALWAYS, + pos, CVector(0.0f, 0.0f, 0.0f), + effect->light.range, + effect->col.r/255.0f, effect->col.g/255.0f, effect->col.b/255.0f, + CPointLights::FOG_ALWAYS, true); + }else if(effect->light.flags & LIGHTFLAG_FOG_NORMAL && lightOn && effect->light.range == 0.0f){ + CPointLights::AddLight(CPointLights::LIGHT_FOGONLY, + pos, CVector(0.0f, 0.0f, 0.0f), + effect->light.range, + effect->col.r/255.0f, effect->col.g/255.0f, effect->col.b/255.0f, + CPointLights::FOG_NORMAL, true); + }else if(lightOn && effect->light.range != 0.0f){ + if(effect->col.r == 0 && effect->col.g == 0 && effect->col.b == 0){ + CPointLights::AddLight(CPointLights::LIGHT_POINT, + pos, CVector(0.0f, 0.0f, 0.0f), + effect->light.range, + 0.0f, 0.0f, 0.0f, + CPointLights::FOG_NONE, true); + }else{ + CPointLights::AddLight(CPointLights::LIGHT_POINT, + pos, CVector(0.0f, 0.0f, 0.0f), + effect->light.range, + effect->col.r*CTimeCycle::GetSpriteBrightness()/255.0f, + effect->col.g*CTimeCycle::GetSpriteBrightness()/255.0f, + effect->col.b*CTimeCycle::GetSpriteBrightness()/255.0f, + // half-useless because LIGHTFLAG_FOG_ALWAYS can't be on + (effect->light.flags & LIGHTFLAG_FOG) >> 1, + true); + } + } + + // Light shadow + if(effect->light.shadowSize != 0.0f){ + if(lightOn){ + CShadows::StoreStaticShadow((uintptr)this + i, SHADOWTYPE_ADDITIVE, + effect->light.shadow, &pos, + effect->light.shadowSize, 0.0f, + 0.0f, -effect->light.shadowSize, + 128, + effect->col.r*CTimeCycle::GetSpriteBrightness()*effect->light.shadowIntensity/255.0f, + effect->col.g*CTimeCycle::GetSpriteBrightness()*effect->light.shadowIntensity/255.0f, + effect->col.b*CTimeCycle::GetSpriteBrightness()*effect->light.shadowIntensity/255.0f, + 15.0f, 1.0f, 40.0f, false, 0.0f); + }else if(lightFlickering){ + CShadows::StoreStaticShadow((uintptr)this + i, SHADOWTYPE_ADDITIVE, + effect->light.shadow, &pos, + effect->light.shadowSize, 0.0f, + 0.0f, -effect->light.shadowSize, + 0, 0.0f, 0.0f, 0.0f, + 15.0f, 1.0f, 40.0f, false, 0.0f); + } + } + } +} diff --git a/src/render/Particle.cpp b/src/render/Particle.cpp index 844b6acd..08137d0c 100644 --- a/src/render/Particle.cpp +++ b/src/render/Particle.cpp @@ -3,6 +3,7 @@ #include "General.h" #include "Timer.h" #include "TxdStore.h" +#include "Entity.h" #include "Sprite.h" #include "Camera.h" #include "Collision.h" @@ -585,6 +586,40 @@ void CParticle::Initialise() debug("CParticle ready"); } +void +CEntity::AddSteamsFromGround(CVector *unused) +{ + int i, n; + C2dEffect *effect; + CVector pos; + + n = CModelInfo::GetModelInfo(GetModelIndex())->GetNum2dEffects(); + for(i = 0; i < n; i++){ + effect = CModelInfo::GetModelInfo(GetModelIndex())->Get2dEffect(i); + if(effect->type != EFFECT_PARTICLE) + continue; + + pos = GetMatrix() * effect->pos; + switch(effect->particle.particleType){ + case 0: + CParticleObject::AddObject(POBJECT_PAVEMENT_STEAM, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 1: + CParticleObject::AddObject(POBJECT_WALL_STEAM, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 2: + CParticleObject::AddObject(POBJECT_DRY_ICE, pos, effect->particle.scale, false); + break; + case 3: + CParticleObject::AddObject(POBJECT_SMALL_FIRE, pos, effect->particle.dir, effect->particle.scale, false); + break; + case 4: + CParticleObject::AddObject(POBJECT_DARK_SMOKE, pos, effect->particle.dir, effect->particle.scale, false); + break; + } + } +} + void CParticle::Shutdown() { debug("Shutting down CParticle..."); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index d47cac31..2559b743 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -920,6 +920,19 @@ CRenderer::RequestObjectsInFrustum(void) } } +bool +CEntity::SetupLighting(void) +{ + DeActivateDirectional(); + SetAmbientColours(); + return false; +} + +void +CEntity::RemoveLighting(bool) +{ +} + bool CPed::SetupLighting(void) { diff --git a/src/rw/RwHelper.cpp b/src/rw/RwHelper.cpp index e0133985..4ee3a0b3 100644 --- a/src/rw/RwHelper.cpp +++ b/src/rw/RwHelper.cpp @@ -324,26 +324,6 @@ HAnimAnimationCreateForHierarchy(RpHAnimHierarchy *hier) return anim; } -RpAtomic* -AtomicRemoveAnimFromSkinCB(RpAtomic *atomic, void *data) -{ - if(RpSkinGeometryGetSkin(RpAtomicGetGeometry(atomic))){ - RpHAnimHierarchy *hier = RpSkinAtomicGetHAnimHierarchy(atomic); -#ifdef LIBRW - if(hier && hier->interpolator->currentAnim){ - RpHAnimAnimationDestroy(hier->interpolator->currentAnim); - hier->interpolator->currentAnim = nil; - } -#else - if(hier && hier->pCurrentAnim){ - RpHAnimAnimationDestroy(hier->pCurrentAnim); - hier->pCurrentAnim = nil; - } -#endif - } - return atomic; -} - void RenderSkeleton(RpHAnimHierarchy *hier) {