From 6665b16ba279f9d92c5a5b2ddc62dd584e20b581 Mon Sep 17 00:00:00 2001 From: Adrian Graber Date: Tue, 13 Jul 2021 01:11:42 +0200 Subject: [PATCH 01/16] Nintendo Switch support --- .github/workflows/build-switch.yml | 29 ++++++ .vscode/c_cpp_properties.json | 18 ++++ .vscode/settings.json | 6 ++ CMakeLists.txt | 16 ++- README.md | 2 +- cmake/nx/NXFunctions.cmake | 38 +++++++ gamefiles/TEXT/american.gxt | Bin 424066 -> 424134 bytes gamefiles/TEXT/french.gxt | Bin 470068 -> 470132 bytes gamefiles/TEXT/german.gxt | Bin 461962 -> 462030 bytes gamefiles/TEXT/italian.gxt | Bin 459018 -> 459086 bytes gamefiles/TEXT/spanish.gxt | Bin 455350 -> 455414 bytes gamefiles/models/frontend_nsw.txd | Bin 0 -> 2360104 bytes gamefiles/models/nswbtns.txd | Bin 0 -> 528424 bytes logo.svg => res/images/logo.svg | 0 logo.png => res/images/logo_1024.png | Bin res/images/logo_256.jpg | Bin 0 -> 30986 bytes src/CMakeLists.txt | 27 ++++- src/core/ControllerConfig.cpp | 14 +++ src/core/Frontend.cpp | 28 +++++ src/core/Frontend.h | 1 + src/core/MenuScreensCustom.cpp | 14 ++- src/core/common.h | 5 + src/core/config.h | 21 +++- src/core/re3.cpp | 2 - src/skel/crossplatform.cpp | 146 ++++++++++++++++++++++++++- src/skel/crossplatform.h | 25 +++++ src/skel/events.cpp | 2 + src/skel/glfw/glfw.cpp | 91 ++++++++++++++++- utils/gxt/american.txt | 3 + utils/gxt/french.txt | 3 + utils/gxt/german.txt | 3 + utils/gxt/italian.txt | 3 + utils/gxt/spanish.txt | 3 + 33 files changed, 481 insertions(+), 19 deletions(-) create mode 100644 .github/workflows/build-switch.yml create mode 100644 cmake/nx/NXFunctions.cmake create mode 100644 gamefiles/models/frontend_nsw.txd create mode 100644 gamefiles/models/nswbtns.txd rename logo.svg => res/images/logo.svg (100%) rename logo.png => res/images/logo_1024.png (100%) create mode 100644 res/images/logo_256.jpg diff --git a/.github/workflows/build-switch.yml b/.github/workflows/build-switch.yml new file mode 100644 index 00000000..6ea45720 --- /dev/null +++ b/.github/workflows/build-switch.yml @@ -0,0 +1,29 @@ + +name: re3 cmake devkitA64 (Nintendo Switch) +on: + pull_request: + push: + release: + types: published +jobs: + build-nintendo-switch: + runs-on: ubuntu-latest + container: devkitpro/devkita64:latest + steps: + - uses: actions/checkout@v2 + with: + submodules: 'true' + - name: "Build files" + run: | + /opt/devkitpro/portlibs/switch/bin/aarch64-none-elf-cmake -S. -Bbuild -DREVC_AUDIO=OAL -DLIBRW_PLATFORM=GL3 -DLIBRW_GL3_GFXLIB=GLFW -DREVC_WITH_OPUS=False -DREVC_VENDORED_LIBRW=True -DREVC_INSTALL=True + cmake --build build --parallel + - name: "Create binary package (cpack)" + working-directory: ./build + run: | + cpack + - name: "Archive binary package (github artifacts)" + uses: actions/upload-artifact@v2 + with: + name: "switch-gl3" + path: build/*.zip + if-no-files-found: error \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 327d8cc7..2ce82727 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -26,6 +26,24 @@ "compilerArgs": ["-ggdb"], "cStandard": "gnu11", "cppStandard": "gnu++14" + }, + { + "name": "devkitPro aarch64 (Nintendo Switch)", + "compilerPath": "${env:DEVKITPRO}/devkitA64/bin/aarch64-none-elf-g++", + "includePath": [ + "${default}", + "${env:DEVKITPRO}/portlibs/switch/include", + "${env:DEVKITPRO}/libnx/include" + ], + "intelliSenseMode": "gcc-arm64", + "cStandard": "gnu11", + "cppStandard": "gnu++11", + "defines": [ + "__SWITCH__", + "LIBRW", + "RW_GL3", + "AUDIO_OAL" + ] } ], "version": 4 diff --git a/.vscode/settings.json b/.vscode/settings.json index 10cb5627..ef1f6f22 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,8 +2,13 @@ "C_Cpp.default.cStandard": "gnu11", "C_Cpp.default.cppStandard": "gnu++14", "C_Cpp.default.includePath": [ + "src", "src/animation", "src/audio", + "src/audio/eax", + "src/audio/oal", + "src/buildings", + "src/collision", "src/control", "src/core", "src/entities", @@ -16,6 +21,7 @@ "src/render", "src/rw", "src/save", + "src/save/glfw", "src/skel", "src/text", "src/vehicles", diff --git a/CMakeLists.txt b/CMakeLists.txt index e8689b38..5d29a834 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,27 @@ -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.14) set(EXECUTABLE reVC) set(PROJECT REVC) project(${EXECUTABLE} C CXX) +set(${PROJECT}_AUTHOR "${PROJECT} Team") list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC GIT_SHA1 "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR") message(STATUS "Building ${CMAKE_PROJECT_NAME} GIT SHA1: ${GIT_SHA1}") + +if(NINTENDO_SWITCH) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/nx") + include(NXFunctions) +endif() + +if(NOT COMMAND reVC_platform_target) + function(reVC_platform_target) + endfunction() +endif() + if(WIN32) set(${PROJECT}_AUDIOS "OAL" "MSS") else() @@ -66,6 +78,8 @@ if(${PROJECT}_INSTALL) set(os "-apple") elseif(UNIX) set(os "-linux") + elseif(NINTENDO_SWITCH) + set(os "-switch") else() set(compiler "-UNK") message(WARNING "Unknown os. Created cpack package will be wrong. (override using cpack -P)") diff --git a/README.md b/README.md index 0bfd955b..9855f7af 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -reVC logo +reVC logo [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmiami&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=miami) diff --git a/cmake/nx/NXFunctions.cmake b/cmake/nx/NXFunctions.cmake new file mode 100644 index 00000000..f67b3ebc --- /dev/null +++ b/cmake/nx/NXFunctions.cmake @@ -0,0 +1,38 @@ +if(NOT COMMAND nx_generate_nacp) + message(FATAL_ERROR "The `nx_generate_nacp` cmake command is not available. Please use an appropriate Nintendo Switch toolchain.") +endif() + +if(NOT COMMAND nx_create_nro) + message(FATAL_ERROR "The `nx_create_nro` cmake command is not available. Please use an appropriate Nintendo Switch toolchain.") +endif() + +set(CMAKE_EXECUTABLE_SUFFIX ".elf") + +function(reVC_platform_target TARGET) + cmake_parse_arguments(RPT "INSTALL" "" "" ${ARGN}) + + get_target_property(TARGET_TYPE "${TARGET}" TYPE) + if(TARGET_TYPE STREQUAL "EXECUTABLE") + nx_generate_nacp(${TARGET}.nacp + NAME "${TARGET}" + AUTHOR "${${PROJECT}_AUTHOR}" + VERSION "1.0.0-${GIT_SHA1}" + ) + + nx_create_nro(${TARGET} + NACP ${TARGET}.nacp + ICON "${PROJECT_SOURCE_DIR}/res/images/logo_256.jpg" + ) + + if(${PROJECT}_INSTALL AND RPT_INSTALL) + get_target_property(TARGET_OUTPUT_NAME ${TARGET} OUTPUT_NAME) + if(NOT TARGET_OUTPUT_NAME) + set(TARGET_OUTPUT_NAME "${TARGET}") + endif() + + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_OUTPUT_NAME}.nro" + DESTINATION "." + ) + endif() + endif() +endfunction() diff --git a/gamefiles/TEXT/american.gxt b/gamefiles/TEXT/american.gxt index 39895b0cb4a188a34151cab7f938605a7edbc331..ca03b34c1c0906e32d1a960bfb542cc152bb05ab 100644 GIT binary patch delta 1100 zcmXxjZ%7ky7zgn0wwv_V*9r@O9R|hA`PF7=#da-arm|9Wc2vaM%?vvwf zXCANGAS#ZzfgHl$ zhLY=WPboQ!mzPSeM`y2usI2mP!^EI4pTw7k!h8~QPsoPNG;-Ao397;rlV+z)3MXxP zWYZEHRkuxpilVa;Vyt*z)GU)#C1%++wl^eba;lxtga)@t4xzEk@8;_;airuh8pD3X zRXMKGusfT{aax={?^^sY&dZvqMlcrfBN0_KI)H#6y~Q~d>~AdM&|_CG>TKPr-Y03Z-se%?t>qutT2n5SRpG;lxb=ZZ5upDXgZB( z_d7Q)3u0=EY$!2)6Vac-e9^HTVZP`P%3v`w!fW2t2=f{o7v?o*!ey}KHrk2a8%tQB zXOKP7C4v;a2f3b-L%7{ravduA$T8Mln}6?{KXovZ@uHO}Y28ZYolw%}$>x{q8>GWa z#e6(1)4DsOl}+=WZ~4`xXFkt#zVGa{rv2rYy%@k%42-9*_^Zd)R($27Yq!ep2Kt8s y{hpaXzqdA1twV(l8;rhNV9?*%LW*)W6hy~Qu6rL1&#rsv^3f&D%&z+vp8p3ju?rdi delta 1033 zcmXxiO=uHA6bJBsl1(Y1;K4%+5sIJ$5g{K%DI%S2r|Fu_?y}j~4+~90ZeO0DgJpZmt4K!5)=rSy3azN8GvdcX;iSQ8(32t$>z#=Gz)q+Jaf2!^n zI`z8a7#^y-6`^qr-OLbo!@#7pn8f{QX)%fX1G4RLle|8w!O*$x((D@Nq%$6UvR4`k zhUK|7C28+9Bzdi2RLW#SPo_N&3!55D*3-vnLT9$?j$$tuRPh)Fj@2E=UGF*_015=X_22@4Z>wQPm}k5A?t;1ZW<9B+7t`Nv}i<&Tf!nO zf{|^qttZ7Lv>j=&sq^`a15a{(bn(<6qrFz{9c^3o z&6jrC9tV6ArE6y|w)xj{H+J*4cJscsyLta`?on~We|f6npQ;3=D%zV$aBcQK29WuQ diff --git a/gamefiles/TEXT/french.gxt b/gamefiles/TEXT/french.gxt index d20206516efc30260144ad07be737181fd6818c1..ece0d8ed4383144c80cd3291b7b49809a2305805 100644 GIT binary patch delta 1078 zcmXxiUr19?90&04yt~WLBBG*j(SiaA6ZgjNynt*<@PVb|BlTAEWWo_ummrO-EAQz_~{$(iD) z$XWkOHksX*A42V)1chat_@6+KY>6<`y=7;SWmXi$Lu4~c@2KMz;k;qfPHjg#(`nNu z$$9FT;?rH8DXyxX=@#RIo~eQQg&+nrgXx^&H-s&2TWPdD3?ju1Zj~7w{McKt7_L@* z$I-m(JAsRzeRpE(M-VF0#N99!kR6LjeBbR_OycZ8vT1Xj9Er%#6s}k_yW$Dgc^lXl zmr>RX+cGIh?U9k@PQ#e8$eNPQ*)}>xWaz9g#A!kw&ijsG&xG$dBJ;iz=y)z8qp^%e z!`^sB&d}!cnSCR}9AvtsrBHt>BdcmUHBg57-d%_e>L1D4@Gv8Hd?lNfm^Ad?u0>8` zQ^<*nE^7x|)1+aylP%Mk%J>=AB0pie7WtLI5G!d+;<#}t>iQx>Z!hzR@{H!Z8o~xEg1+kan1uu9lOa&Xu!gN?_ovi0Is>P)*zNr+A8@{O&?oV=|e~9Ny z|0P?@=`IhT@=t=wie7vnB$I6(Mr420TNIfcNAwWcD$+aZ_%L_bbZDooBf@lA@f5jC zJyX2cAx!Z|PMB_y=@q61+>0`Lbdwnx#Yeeq&9U>?cqAjMnVMZ?bnp|gUrQLW*ZTi5Gi)^GP5|wj9kM){iRCRZX>NcF_~Q%MP%bP*BxP z$F?Xbl2MS?yoO=eWL?dd90%Ly6&S2Wm+|OivaFCI=zmqMSPa2KCee;~<-C-}z zyR01aO_RofRGpT8ZpjC9Bn(X6SLWT;q$PVbX}|que|# zj&I{+OU?63$k%=IO(*X9=9{_?!zgKXmgh{Y_~tpoYrc8TzOP|8te;K-R-|2?Rr&^% zlTH4jkNyMsSl|RcH3v>&`8YYR4YbwXNNcUN>4YPNI%n0=VTjRQ_wSWE zmqIscOF diff --git a/gamefiles/TEXT/german.gxt b/gamefiles/TEXT/german.gxt index f96f87d546a6d68b1307163d095487bb8cf72d3f..fbec75cb6440918a9279b73a08812aff3c3cba4e 100644 GIT binary patch delta 1083 zcmXxiT}TvB6bJDCHalC;2T?{ryQrZM6zG0vWL93sad+C;nPGOeRWbA-s7EOuiX|qf zP{IeP$gCd9df11^a7hayt)L)8A{6W?3o0KXM1%@9=-j=t3$y(0nRD*PnR|6KI5!#` z4!XsV1eQ)~Mi@x!@f-mLYduGSKl?n#fT2du4Zy4-p_LiQV^q5q_e`}`+B4P0PI;!< z`m@}&$=8}4F4;8=D(D^cUQoeu-ZK?^c;cBB>z^iTNtJ5R|5lhvk)IQ$Qe6B*PIdI~ zoQGe?CUaUdooM?iL19)YKKO&%=3(6W>y`!LU>e^W9(@z$otR%0=AAfKB%6+^lUMvQG(}Zx>fO&R!Wjpc z*)7A>497Mpsisy&QY{@Ai$}?tl1w`eS~M9t%XX^Np_oy21e?y39mVpsvSaAJFC(R~ zlt#^-87HS`a{6^l$S{vH-PYo;p31Ninob9B;k*Oz>5=+87 zXKhuOpYrZMVd^wywg+I@W~nO`HNrf9B_ho8^`-!9rl@IhK1EjCgsN*{3^{yY=?1mv zbe5Z^g^}+fn@W;zV)2A9pLA=VFrPG-3m~o9ah|jHu`ti6dM?a!ZoCe_VI8y*-H-3W z3Vnmv{@-GdrF*dCTVG1b(mhy~%Z_4b139U7o-DkQD(g0G8(W8VRp~L(*}~^YM)D;J z4UGrAwvos*pyOVh$7}M#f#=&XHJ1x;!u$lIZc%BTr3+0`tHA1F}c{LI3~& delta 1036 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 z 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 z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## 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 literal 0 HcmV?d00001 diff --git a/gamefiles/models/nswbtns.txd b/gamefiles/models/nswbtns.txd new file mode 100644 index 0000000000000000000000000000000000000000..9831ce549a9ab2adf0caaeb5bf713c83cc9d7308 GIT binary patch literal 528424 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

A1 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

(*9p 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⋘MtBkk7O=RgkG6%` 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 DESTINATION "." OPTIONAL) endif() endif() + +reVC_platform_target(${EXECUTABLE} INSTALL) diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp index 72d31137..dbb0bd87 100644 --- a/src/core/ControllerConfig.cpp +++ b/src/core/ControllerConfig.cpp @@ -2673,6 +2673,14 @@ const char *PlayStationButtons[][MAX_CONTROLLERACTIONS] = #undef PS2_CROSS #undef PS2_SQUARE +const char *NintendoSwitchButtons_noIcons[][MAX_CONTROLLERACTIONS] = + CONTROLLER_BUTTONS("Y", "A", "B", "X", "L", "ZL", "LS", "R", "ZR", "RS", "BACK", "right stick up", "right stick down", "right stick left", "right stick right"); + +#ifdef BUTTON_ICONS +const char *NintendoSwitchButtons[][MAX_CONTROLLERACTIONS] = + CONTROLLER_BUTTONS("~T~", "~O~", "~X~", "~Q~", "~K~", "~M~", "~A~", "~J~", "~V~", "~C~", "BACK", "~H~", "~L~", "~(~", "~)~"); +#endif + #undef UP #undef DOWN #undef LEFT @@ -2698,6 +2706,9 @@ void CControllerConfigManager::GetWideStringOfCommandKeys(uint16 action, wchar * case CMenuManager::CONTROLLER_DUALSHOCK4: Buttons = CFont::ButtonsSlot != -1 ? PlayStationButtons : PlayStationButtons_noIcons; break; + case CMenuManager::CONTROLLER_NINTENDO_SWITCH: + Buttons = CFont::ButtonsSlot != -1 ? NintendoSwitchButtons : NintendoSwitchButtons_noIcons; + break; default: #endif Buttons = CFont::ButtonsSlot != -1 ? XboxButtons : XboxButtons_noIcons; @@ -2713,6 +2724,9 @@ void CControllerConfigManager::GetWideStringOfCommandKeys(uint16 action, wchar * case CMenuManager::CONTROLLER_DUALSHOCK4: Buttons = PlayStationButtons_noIcons; break; + case CMenuManager::CONTROLLER_NINTENDO_SWITCH: + Buttons = NintendoSwitchButtons_noIcons; + break; default: Buttons = XboxButtons_noIcons; break; diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 632a69ab..b0ef0627 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -539,8 +539,12 @@ CMenuManager::CMenuManager() #endif #ifdef GAMEPAD_MENU +#ifdef __SWITCH__ + m_PrefsControllerType = CONTROLLER_NINTENDO_SWITCH; +#else m_PrefsControllerType = CONTROLLER_XBOXONE; #endif +#endif } void @@ -566,7 +570,11 @@ CMenuManager::Initialise(void) m_nCurrOption = 0; m_nOptionHighlightTransitionBlend = 0; CentreMousePointer(); +#ifdef GTA_HANDHELD + m_bShowMouse = false; +#else m_bShowMouse = true; +#endif m_fMapSize = MENU_Y(162.0f); // Y because of HOR+ m_fMapCenterX = MENU_X_LEFT_ALIGNED(320.0f); m_fMapCenterY = MENU_Y(225.0f); @@ -5872,6 +5880,7 @@ const char* controllerTypesPaths[] = { "MODELS/FRONTEND_DS4.TXD", "MODELS/FRONTEND_X360.TXD", "MODELS/FRONTEND_XONE.TXD", + "MODELS/FRONTEND_NSW.TXD", }; void @@ -5982,6 +5991,18 @@ CMenuManager::PrintController(void) TEXT_L2R2_Y += 5.0f; TEXT_SELECT_X += 3.0f; break; + case CONTROLLER_NINTENDO_SWITCH: + TEXT_L1_Y += 5.0f; + TEXT_L1_Y_VEH = TEXT_L1_Y; + TEXT_R1_Y += 5.0f; + TEXT_TRIANGLE_Y += 3.0f; + TEXT_CIRCLE_Y += 3.0f; + TEXT_CROSS_Y += 3.0f; + TEXT_LSTICK_Y -= 23.0f; + TEXT_DPAD_Y += 25.0; + TEXT_RSTICK_Y += 1.0f; + TEXT_R3_Y += 1.0f; + break; }; if (m_DisplayControllerOnFoot) { @@ -6278,6 +6299,7 @@ CMenuManager::PrintController(void) { case CONTROLLER_XBOXONE: case CONTROLLER_XBOX360: + case CONTROLLER_NINTENDO_SWITCH: CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f)); switch (m_PrefsLanguage) { @@ -6358,6 +6380,7 @@ CMenuManager::PrintController(void) { case CONTROLLER_XBOXONE: case CONTROLLER_XBOX360: + case CONTROLLER_NINTENDO_SWITCH: CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f)); switch (m_PrefsLanguage) { @@ -6441,6 +6464,7 @@ CMenuManager::PrintController(void) { case CONTROLLER_XBOXONE: case CONTROLLER_XBOX360: + case CONTROLLER_NINTENDO_SWITCH: CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f)); switch (m_PrefsLanguage) { @@ -6525,6 +6549,7 @@ CMenuManager::PrintController(void) { case CONTROLLER_XBOXONE: case CONTROLLER_XBOX360: + case CONTROLLER_NINTENDO_SWITCH: CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f)); CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_SMT")); break; @@ -6567,6 +6592,9 @@ CMenuManager::LoadController(int8 type) case CONTROLLER_DUALSHOCK4: CFont::LoadButtons("MODELS/PS3BTNS.TXD"); break; + case CONTROLLER_NINTENDO_SWITCH: + CFont::LoadButtons("MODELS/NSWBTNS.TXD"); + break; default: CFont::LoadButtons("MODELS/X360BTNS.TXD"); break; diff --git a/src/core/Frontend.h b/src/core/Frontend.h index b4e70613..b6a91517 100644 --- a/src/core/Frontend.h +++ b/src/core/Frontend.h @@ -685,6 +685,7 @@ public: CONTROLLER_DUALSHOCK4, CONTROLLER_XBOX360, CONTROLLER_XBOXONE, + CONTROLLER_NINTENDO_SWITCH, }; int8 m_PrefsControllerType; diff --git a/src/core/MenuScreensCustom.cpp b/src/core/MenuScreensCustom.cpp index 49bb33f8..340fee62 100644 --- a/src/core/MenuScreensCustom.cpp +++ b/src/core/MenuScreensCustom.cpp @@ -34,7 +34,7 @@ #ifdef CUSTOM_FRONTEND_OPTIONS -#ifdef IMPROVED_VIDEOMODE +#if defined(IMPROVED_VIDEOMODE) && !defined(GTA_HANDHELD) #define VIDEOMODE_SELECTOR MENUACTION_CFO_SELECT, "FEM_SCF", { new CCFOSelect((int8*)&FrontEndMenuManager.m_nPrefsWindowed, "VideoMode", "Windowed", screenModes, 2, true, ScreenModeAfterChange, true) }, 0, 0, MENUALIGN_LEFT, #else #define VIDEOMODE_SELECTOR @@ -354,7 +354,7 @@ void DetectJoystickGoBack() { #endif #ifdef GAMEPAD_MENU -const char* controllerTypes[] = { "FEC_DS2", "FEC_DS3", "FEC_DS4", "FEC_360", "FEC_ONE" }; +const char* controllerTypes[] = { "FEC_DS2", "FEC_DS3", "FEC_DS4", "FEC_360", "FEC_ONE", "FEC_NSW" }; void ControllerTypeAfterChange(int8 before, int8 after) { FrontEndMenuManager.LoadController(after); @@ -604,7 +604,11 @@ CMenuScreenCustom aScreens[] = { // MENUPAGE_OPTIONS = 27 { "FET_OPT", MENUPAGE_NONE, nil, nil, +#ifdef GTA_HANDHELD + MENUACTION_CHANGEMENU, "FEO_CON", {nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS}, 320, 132, MENUALIGN_CENTER, +#else MENUACTION_CHANGEMENU, "FEO_CON", {nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_PC}, 320, 132, MENUALIGN_CENTER, +#endif MENUACTION_LOADRADIO, "FEO_AUD", {nil, SAVESLOT_NONE, MENUPAGE_SOUND_SETTINGS}, 0, 0, MENUALIGN_CENTER, MENUACTION_CHANGEMENU, "FEO_DIS", {nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS}, 0, 0, MENUALIGN_CENTER, #ifdef GRAPHICS_MENU_OPTIONS @@ -660,7 +664,11 @@ CMenuScreenCustom aScreens[] = { { "", 0, nil, nil, }, #ifdef GAMEPAD_MENU +#ifdef GTA_HANDHELD + { "FET_AGS", MENUPAGE_OPTIONS, new CCustomScreenLayout({40, 78, 25, true, true}), nil, +#else { "FET_AGS", MENUPAGE_CONTROLLER_PC, new CCustomScreenLayout({40, 78, 25, true, true}), nil, +#endif MENUACTION_CTRLCONFIG, "FEC_CCF", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS }, 40, 76, MENUALIGN_LEFT, MENUACTION_CTRLDISPLAY, "FEC_CDP", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS }, 0, 0, MENUALIGN_LEFT, INVERT_PAD_SELECTOR @@ -726,7 +734,9 @@ CMenuScreenCustom aScreens[] = { // MENUPAGE_GRAPHICS_SETTINGS { "FET_GFX", MENUPAGE_OPTIONS, new CCustomScreenLayout({40, 78, 25, true, true}), GraphicsGoBack, +#ifndef GTA_HANDHELD MENUACTION_SCREENRES, "FED_RES", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS }, 0, 0, MENUALIGN_LEFT, +#endif MENUACTION_WIDESCREEN, "FED_WIS", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS }, 0, 0, MENUALIGN_LEFT, VIDEOMODE_SELECTOR #ifdef LEGACY_MENU_OPTIONS diff --git a/src/core/common.h b/src/core/common.h index 6f6acd49..13fadc27 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -11,6 +11,11 @@ #define __STDC_LIMIT_MACROS // so we get UINT32_MAX etc #endif + +#ifdef __SWITCH__ +#include +#endif + #include #include #include diff --git a/src/core/config.h b/src/core/config.h index 9c318350..1bff7c7f 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -165,6 +165,11 @@ enum Config { #define GTA_VERSION GTAVC_PC_11 +// Enable configuration for handheld console ports +#if defined(__SWITCH__) || defined(PSP2) + #define GTA_HANDHELD +#endif + // TODO(MIAMI): someone ought to find and check out uses of these defines: //#define GTA3_STEAM_PATCH //#define GTAVC_JP_PATCH @@ -176,7 +181,9 @@ enum Config { # define VU_COLLISION # define PS2_MENU #elif defined GTA_PC -# define PC_PLAYER_CONTROLS // mouse player/cam mode +# ifndef GTA_HANDHELD +# define PC_PLAYER_CONTROLS // mouse player/cam mode +# endif # define GTA_REPLAY # define GTA_SCENE_EDIT # define PC_MENU @@ -325,7 +332,7 @@ enum Config { #if !defined(RW_GL3) && defined(_WIN32) #define XINPUT #endif -#if defined XINPUT || (defined RW_GL3 && !defined LIBRW_SDL2 && !defined __SWITCH__) +#if defined XINPUT || (defined RW_GL3 && !defined LIBRW_SDL2 && !defined GTA_HANDHELD) #define DETECT_JOYSTICK_MENU // Then we'll expect user to enter Controller->Detect joysticks if his joystick isn't detected at the start. #endif #define DETECT_PAD_INPUT_SWITCH // Adds automatic switch of pad related stuff between controller and kb/m @@ -347,7 +354,7 @@ enum Config { //# define PS2_MENU_USEALLPAGEICONS #else # define MAP_ENHANCEMENTS // Adding waypoint and better mouse support -# ifdef XINPUT +# if defined(XINPUT) || defined(GTA_HANDHELD) # define GAMEPAD_MENU // Add gamepad menu # endif # define TRIANGLE_BACK_BUTTON @@ -456,4 +463,12 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually #undef USE_CUTSCENE_SHADOW_FOR_PED #endif +#ifdef GTA_HANDHELD + #define IGNORE_MOUSE_KEYBOARD // ignore mouse & keyboard input +#endif + +#ifdef __SWITCH__ + #define USE_UNNAMED_SEM // named semaphores are unsupported on the switch +#endif + #endif // VANILLA_DEFINES diff --git a/src/core/re3.cpp b/src/core/re3.cpp index e2220467..d78b997b 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -45,9 +45,7 @@ #include "MBlur.h" #include "ControllerConfig.h" -#ifdef DETECT_JOYSTICK_MENU #include "crossplatform.h" -#endif #ifndef _WIN32 #include "assert.h" diff --git a/src/skel/crossplatform.cpp b/src/skel/crossplatform.cpp index f7016b21..58ab7920 100644 --- a/src/skel/crossplatform.cpp +++ b/src/skel/crossplatform.cpp @@ -198,6 +198,20 @@ char* casepath(char const* path, bool checkPathFirst) size_t rl = 0; DIR* d; + char* c; + + #if defined(__SWITCH__) || defined(PSP2) + if( (c = strstr(p, ":/")) != NULL) // scheme used by some environments, eg. switch, vita + { + size_t deviceNameOffset = c - p + 3; + char* deviceNamePath = (char*)alloca(deviceNameOffset + 1); + strlcpy(deviceNamePath, p, deviceNameOffset); + deviceNamePath[deviceNameOffset] = 0; + d = opendir(deviceNamePath); + p = c + 1; + } + else + #endif if (p[0] == '/' || p[0] == '\\') { d = opendir("/"); @@ -212,7 +226,7 @@ char* casepath(char const* path, bool checkPathFirst) bool cantProceed = false; // just convert slashes in what's left in string, don't correct case of letters(because we can't) bool mayBeTrailingSlash = false; - char* c; + while (c = strsep(&p, "/\\")) { // May be trailing slash(allow), slash at the start(avoid), or multiple slashes(avoid) @@ -293,3 +307,133 @@ char *_strdate(char *buf) { return strdate(buf); } #endif + +#ifdef __SWITCH__ +/* Taken from glibc */ +char *realpath(const char *name, char *resolved) +{ + char *rpath, *dest = NULL; + const char *start, *end, *rpath_limit; + long int path_max; + + /* As per Single Unix Specification V2 we must return an error if + either parameter is a null pointer. We extend this to allow + the RESOLVED parameter to be NULL in case the we are expected to + allocate the room for the return value. */ + if (!name) + return NULL; + + /* As per Single Unix Specification V2 we must return an error if + the name argument points to an empty string. */ + if (name[0] == '\0') + return NULL; + +#ifdef PATH_MAX + path_max = PATH_MAX; +#else + path_max = pathconf(name, _PC_PATH_MAX); + if (path_max <= 0) + path_max = 1024; +#endif + + if (!resolved) + { + rpath = (char*)malloc(path_max); + if (!rpath) + return NULL; + } + else + rpath = resolved; + rpath_limit = rpath + path_max; + + if (name[0] != '/') + { + if (!getcwd(rpath, path_max)) + { + rpath[0] = '\0'; + goto error; + } + dest = (char*)memchr(rpath, '\0', path_max); + } + else + { + rpath[0] = '/'; + dest = rpath + 1; + } + + for (start = end = name; *start; start = end) + { + /* Skip sequence of multiple path-separators. */ + while (*start == '/') + ++start; + + /* Find end of path component. */ + for (end = start; *end && *end != '/'; ++end) + /* Nothing. */; + + if (end - start == 0) + break; + else if (end - start == 1 && start[0] == '.') + /* nothing */; + else if (end - start == 2 && start[0] == '.' && start[1] == '.') + { + /* Back up to previous component, ignore if at root already. */ + if (dest > rpath + 1) + while ((--dest)[-1] != '/') + ; + } + else + { + size_t new_size; + + if (dest[-1] != '/') + *dest++ = '/'; + + if (dest + (end - start) >= rpath_limit) + { + ptrdiff_t dest_offset = dest - rpath; + char *new_rpath; + + if (resolved) + { + if (dest > rpath + 1) + dest--; + *dest = '\0'; + goto error; + } + new_size = rpath_limit - rpath; + if (end - start + 1 > path_max) + new_size += end - start + 1; + else + new_size += path_max; + new_rpath = (char *)realloc(rpath, new_size); + if (!new_rpath) + goto error; + rpath = new_rpath; + rpath_limit = rpath + new_size; + + dest = rpath + dest_offset; + } + + dest = (char*)memcpy(dest, start, end - start); + *dest = '\0'; + } + } + if (dest > rpath + 1 && dest[-1] == '/') + --dest; + *dest = '\0'; + + return rpath; + +error: + if (!resolved) + free(rpath); + return NULL; +} + +ssize_t readlink (const char * __path, char * __buf, size_t __buflen) +{ + errno = ENOSYS; + return -1; +} +#endif diff --git a/src/skel/crossplatform.h b/src/skel/crossplatform.h index f37e64a1..4ab7d156 100644 --- a/src/skel/crossplatform.h +++ b/src/skel/crossplatform.h @@ -161,3 +161,28 @@ bool FindNextFile(HANDLE, WIN32_FIND_DATA*); void FileTimeToSystemTime(time_t*, SYSTEMTIME*); void GetDateFormat(int, int, SYSTEMTIME*, int, char*, int); #endif + +#ifdef __SWITCH__ + +// tweak glfw values for switch to match expected pc bindings +#ifdef GLFW_GAMEPAD_BUTTON_A + #undef GLFW_GAMEPAD_BUTTON_A +#endif +#define GLFW_GAMEPAD_BUTTON_A 1 + +#ifdef GLFW_GAMEPAD_BUTTON_B + #undef GLFW_GAMEPAD_BUTTON_B +#endif +#define GLFW_GAMEPAD_BUTTON_B 0 + +#ifdef GLFW_GAMEPAD_BUTTON_X + #undef GLFW_GAMEPAD_BUTTON_X +#endif +#define GLFW_GAMEPAD_BUTTON_X 3 + +#ifdef GLFW_GAMEPAD_BUTTON_Y + #undef GLFW_GAMEPAD_BUTTON_Y +#endif +#define GLFW_GAMEPAD_BUTTON_Y 2 + +#endif diff --git a/src/skel/events.cpp b/src/skel/events.cpp index 3e1e95b3..87447819 100644 --- a/src/skel/events.cpp +++ b/src/skel/events.cpp @@ -821,7 +821,9 @@ PadHandler(RsEvent event, void *param) RwBool AttachInputDevices(void) { +#ifndef IGNORE_MOUSE_KEYBOARD RsInputDeviceAttach(rsKEYBOARD, KeyboardHandler); +#endif RsInputDeviceAttach(rsPAD, PadHandler); diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp index 0928229f..81f3b7b1 100644 --- a/src/skel/glfw/glfw.cpp +++ b/src/skel/glfw/glfw.cpp @@ -12,12 +12,14 @@ DWORD _dwOperatingSystemVersion; #include "resource.h" #else long _dwOperatingSystemVersion; +#ifndef __SWITCH__ #ifndef __APPLE__ #include #else #include #include #endif +#endif #include #include #include @@ -51,7 +53,7 @@ long _dwOperatingSystemVersion; #include "MemoryMgr.h" // We found out that GLFW's keyboard input handling is still pretty delayed/not stable, so now we fetch input from X11 directly on Linux. -#if !defined _WIN32 && !defined __APPLE__ && !defined __SWITCH__ // && !defined WAYLAND +#if !defined _WIN32 && !defined __APPLE__ && !defined GTA_HANDHELD // && !defined WAYLAND #define GET_KEYBOARD_INPUT_FROM_X11 #endif @@ -328,6 +330,78 @@ psNativeTextureSupport(void) #define CMDSTR LPSTR #endif +/* + ***************************************************************************** + */ + +#ifdef __SWITCH__ + +static HidVibrationValue SwitchVibrationValues[2]; +static HidVibrationDeviceHandle SwitchVibrationDeviceHandles[2][2]; +static HidVibrationDeviceHandle SwitchVibrationDeviceGC; + +static PadState SwitchPad; + +static Result HidInitializationResult[2]; +static Result HidInitializationGCResult; + +static void _psInitializeVibration() +{ + HidInitializationResult[0] = hidInitializeVibrationDevices(SwitchVibrationDeviceHandles[0], 2, HidNpadIdType_Handheld, HidNpadStyleTag_NpadHandheld); + if(R_FAILED(HidInitializationResult[0])) { + printf("Failed to initialize VibrationDevice for Handheld Mode\n"); + } + HidInitializationResult[1] = hidInitializeVibrationDevices(SwitchVibrationDeviceHandles[1], 2, HidNpadIdType_No1, HidNpadStyleSet_NpadFullCtrl); + if(R_FAILED(HidInitializationResult[1])) { + printf("Failed to initialize VibrationDevice for Detached Mode\n"); + } + HidInitializationGCResult = hidInitializeVibrationDevices(&SwitchVibrationDeviceGC, 1, HidNpadIdType_No1, HidNpadStyleTag_NpadGc); + if(R_FAILED(HidInitializationResult[1])) { + printf("Failed to initialize VibrationDevice for GC Mode\n"); + } + + SwitchVibrationValues[0].freq_low = 160.0f; + SwitchVibrationValues[0].freq_high = 320.0f; + + padConfigureInput(1, HidNpadStyleSet_NpadFullCtrl); + padInitializeDefault(&SwitchPad); +} + +static void _psHandleVibration() +{ + padUpdate(&SwitchPad); + + uint8 target_device = padIsHandheld(&SwitchPad) ? 0 : 1; + + if(R_SUCCEEDED(HidInitializationResult[target_device])) { + CPad* pad = CPad::GetPad(0); + + // value conversion based on SDL2 switch port + SwitchVibrationValues[0].amp_high = SwitchVibrationValues[0].amp_low = pad->ShakeFreq == 0 ? 0.0f : 320.0f; + SwitchVibrationValues[0].freq_low = pad->ShakeFreq == 0.0 ? 160.0f : (float)pad->ShakeFreq * 1.26f; + SwitchVibrationValues[0].freq_high = pad->ShakeFreq == 0.0 ? 320.0f : (float)pad->ShakeFreq * 1.26f; + + if (pad->ShakeDur < CTimer::GetTimeStepInMilliseconds()) + pad->ShakeDur = 0; + else + pad->ShakeDur -= CTimer::GetTimeStepInMilliseconds(); + if (pad->ShakeDur == 0) pad->ShakeFreq = 0; + + + if(target_device == 1 && R_SUCCEEDED(HidInitializationGCResult)) { + // gamecube rumble + hidSendVibrationGcErmCommand(SwitchVibrationDeviceGC, pad->ShakeFreq > 0 ? HidVibrationGcErmCommand_Start : HidVibrationGcErmCommand_Stop); + } + + memcpy(&SwitchVibrationValues[1], &SwitchVibrationValues[0], sizeof(HidVibrationValue)); + hidSendVibrationValues(SwitchVibrationDeviceHandles[target_device], SwitchVibrationValues, 2); + } +} +#else +static void _psInitializeVibration() {} +static void _psHandleVibration() {} +#endif + /* ***************************************************************************** */ @@ -407,6 +481,8 @@ psInitialize(void) InitialiseLanguage(); #endif + + _psInitializeVibration(); gGameState = GS_START_UP; TRACE("gGameState = GS_START_UP"); @@ -480,6 +556,9 @@ psInitialize(void) _dwMemAvailPhys = (uint64_t)(vm_stat.free_count * page_size); debug("Physical memory size %llu\n", _dwMemAvailPhys); debug("Available physical memory %llu\n", size); +#elif defined (__SWITCH__) + svcGetInfo(&_dwMemAvailPhys, InfoType_UsedMemorySize, CUR_PROCESS_HANDLE, 0); + debug("Physical memory size %llu\n", _dwMemAvailPhys); #else #ifndef __APPLE__ struct sysinfo systemInfo; @@ -982,13 +1061,15 @@ void psPostRWinit(void) RwVideoMode vm; RwEngineGetVideoModeInfo(&vm, GcurSelVM); + glfwSetFramebufferSizeCallback(PSGLOBAL(window), resizeCB); +#ifndef IGNORE_MOUSE_KEYBOARD #ifndef GET_KEYBOARD_INPUT_FROM_X11 glfwSetKeyCallback(PSGLOBAL(window), keypressCB); #endif - glfwSetFramebufferSizeCallback(PSGLOBAL(window), resizeCB); glfwSetScrollCallback(PSGLOBAL(window), scrollCB); glfwSetCursorPosCallback(PSGLOBAL(window), cursorCB); glfwSetCursorEnterCallback(PSGLOBAL(window), cursorEnterCB); +#endif glfwSetWindowIconifyCallback(PSGLOBAL(window), windowIconifyCB); glfwSetWindowFocusCallback(PSGLOBAL(window), windowFocusCB); glfwSetJoystickCallback(joysChangeCB); @@ -1824,7 +1905,7 @@ main(int argc, char *argv[]) InitMemoryMgr(); #endif -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__SWITCH__) struct sigaction act; act.sa_sigaction = terminateHandler; act.sa_flags = SA_SIGINFO; @@ -2486,7 +2567,9 @@ void CapturePad(RwInt32 padID) if ( Abs(rightStickPos.y) > 0.3f ) pad->PCTempJoyState.RightStickY = (int32)(rightStickPos.y * 128.0f); } - + + _psHandleVibration(); + return; } diff --git a/utils/gxt/american.txt b/utils/gxt/american.txt index 66d74238..94ea95c4 100644 --- a/utils/gxt/american.txt +++ b/utils/gxt/american.txt @@ -14414,6 +14414,9 @@ XBOX 360 CONTROLLER [FEC_ONE] XBOX ONE CONTROLLER +[FEC_NSW] +NINTENDO SWITCH CONTROLLER + [FEC_TYP] GAMEPAD TYPE diff --git a/utils/gxt/french.txt b/utils/gxt/french.txt index 246600a1..73860f9c 100644 --- a/utils/gxt/french.txt +++ b/utils/gxt/french.txt @@ -14703,6 +14703,9 @@ XBOX 360 CONTROLLER [FEC_ONE] XBOX ONE CONTROLLER +[FEC_NSW] +NINTENDO SWITCH CONTROLLER + [FEC_TYP] GAMEPAD TYPE diff --git a/utils/gxt/german.txt b/utils/gxt/german.txt index 595d792a..27e91def 100644 --- a/utils/gxt/german.txt +++ b/utils/gxt/german.txt @@ -14703,6 +14703,9 @@ XBOX 360 CONTROLLER [FEC_ONE] XBOX ONE CONTROLLER +[FEC_NSW] +NINTENDO SWITCH CONTROLLER + [FEC_TYP] GAMEPAD-TYP diff --git a/utils/gxt/italian.txt b/utils/gxt/italian.txt index da135892..97f510cd 100644 --- a/utils/gxt/italian.txt +++ b/utils/gxt/italian.txt @@ -14712,6 +14712,9 @@ XBOX 360 CONTROLLER [FEC_ONE] XBOX ONE CONTROLLER +[FEC_NSW] +NINTENDO SWITCH CONTROLLER + [FEC_TYP] GAMEPAD TYPE diff --git a/utils/gxt/spanish.txt b/utils/gxt/spanish.txt index 07d44c4c..c3a4e0ee 100644 --- a/utils/gxt/spanish.txt +++ b/utils/gxt/spanish.txt @@ -14398,6 +14398,9 @@ MANDO DE XBOX 360 [FEC_ONE] MANDO DE XBOX ONE +[FEC_NSW] +MANDO DE NINTENDO SWITCH + [FEC_TYP] TIPO DE MANDO From 7f544f9049eca9cee6a028ac24a667764bd9f799 Mon Sep 17 00:00:00 2001 From: Adrian Graber Date: Tue, 13 Jul 2021 01:32:43 +0200 Subject: [PATCH 02/16] Fix artifact path --- .github/workflows/build-switch.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-switch.yml b/.github/workflows/build-switch.yml index 6ea45720..fff4195f 100644 --- a/.github/workflows/build-switch.yml +++ b/.github/workflows/build-switch.yml @@ -25,5 +25,5 @@ jobs: uses: actions/upload-artifact@v2 with: name: "switch-gl3" - path: build/*.zip - if-no-files-found: error \ No newline at end of file + path: build/*.tar.xz + if-no-files-found: error From eadf0496bf2b365938b64f5f239d0c353ce9770e Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sat, 14 Aug 2021 23:31:32 +0300 Subject: [PATCH 03/16] fixed heli buoyancy --- src/vehicles/Automobile.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 5e2b0c10..387311b7 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -3690,6 +3690,7 @@ CAutomobile::ProcessBuoyancy(void) CVector impulse, point; if(mod_Buoyancy.ProcessBuoyancy(this, m_fBuoyancy, &point, &impulse)){ + bTouchingWater = true; float timeStep = Max(CTimer::GetTimeStep(), 0.01f); float impulseRatio = impulse.z / (GRAVITY * m_fMass * timeStep); float waterResistance = Pow(1.0f - 0.05f*impulseRatio, CTimer::GetTimeStep()); @@ -3704,7 +3705,7 @@ CAutomobile::ProcessBuoyancy(void) heliHitWaterHard = true; } }else{ - float strength = 1.0f/Max(8.0f*impulseRatio, 1.0f); + float strength = Max(8.0f*impulseRatio, 1.0f); ApplyMoveForce(-2.0f*impulse/strength); ApplyTurnForce(-impulse/strength, point); if(impulseRatio > 0.9f){ From fd52285074ca6b1eb4a0b3b7990358ab08b837f4 Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 15 Aug 2021 03:29:49 +0300 Subject: [PATCH 04/16] Fix premature .ini saving leading to missing bindings --- src/core/Frontend.cpp | 3 --- src/skel/win/win.cpp | 10 ++++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 4820427f..875bb76b 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -3169,9 +3169,6 @@ CMenuManager::LoadSettings() if (LoadINISettings()) { LoadINIControllerSettings(); } - // if no reVC.ini, create it, or update it with new values - SaveINISettings(); - SaveINIControllerSettings(); #endif #ifdef FIX_BUGS diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp index f251f58d..c49f0ab9 100644 --- a/src/skel/win/win.cpp +++ b/src/skel/win/win.cpp @@ -2179,10 +2179,12 @@ WinMain(HINSTANCE instance, #ifdef LOAD_INI_SETTINGS LoadINIControllerSettings(); - if (connectedPadButtons != 0) { - ControlsManager.InitDefaultControlConfigJoyPad(connectedPadButtons); - SaveINIControllerSettings(); - } + if (connectedPadButtons != 0) + ControlsManager.InitDefaultControlConfigJoyPad(connectedPadButtons); // add (connected-saved) amount of new button assignments on top of ours + + // these have 2 purposes: creating .ini at the start, and adding newly introduced settings to old .ini at the start + SaveINISettings(); + SaveINIControllerSettings(); #endif } From 0db14d718c65856824750e0e8e49392de617a5ad Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 15 Aug 2021 03:39:35 +0300 Subject: [PATCH 05/16] All the sliders, unite --- src/core/MenuScreensCustom.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/MenuScreensCustom.cpp b/src/core/MenuScreensCustom.cpp index d490a249..ca3db581 100644 --- a/src/core/MenuScreensCustom.cpp +++ b/src/core/MenuScreensCustom.cpp @@ -430,6 +430,7 @@ CMenuScreenCustom aScreens[] = { { "FEH_DIS", MENUPAGE_OPTIONS, new CCustomScreenLayout({40, 78, 25, true}), nil, MENUACTION_BRIGHTNESS, "FED_BRI", {nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS}, 0, 0, MENUALIGN_LEFT, MENUACTION_DRAWDIST, "FEM_LOD", {nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS}, 0, 0, MENUALIGN_LEFT, + DENSITY_SLIDERS #ifdef LEGACY_MENU_OPTIONS MENUACTION_FRAMESYNC, "FEM_VSC", {nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS}, 0, 0, MENUALIGN_LEFT, #endif @@ -449,7 +450,6 @@ CMenuScreenCustom aScreens[] = { DUALPASS_SELECTOR CUTSCENE_BORDERS_TOGGLE FREE_CAM_TOGGLE - DENSITY_SLIDERS POSTFX_SELECTORS // 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}, 320, 0, MENUALIGN_CENTER, @@ -459,9 +459,9 @@ CMenuScreenCustom aScreens[] = { { "FEH_DIS", MENUPAGE_OPTIONS, new CCustomScreenLayout({40, 78, 25, true}), nil, MENUACTION_BRIGHTNESS, "FED_BRI", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT, MENUACTION_DRAWDIST, "FEM_LOD", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT, + DENSITY_SLIDERS CUTSCENE_BORDERS_TOGGLE FREE_CAM_TOGGLE - DENSITY_SLIDERS MENUACTION_LEGENDS, "MAP_LEG", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT, MENUACTION_RADARMODE, "FED_RDR", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT, MENUACTION_HUD, "FED_HUD", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT, From f4e723e690d29f23d77f66980f1c91c7a626e38e Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 15 Aug 2021 03:59:12 +0300 Subject: [PATCH 06/16] Fix .ini fix for glfw --- src/skel/glfw/glfw.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp index 81f3b7b1..f8beee64 100644 --- a/src/skel/glfw/glfw.cpp +++ b/src/skel/glfw/glfw.cpp @@ -2049,10 +2049,12 @@ main(int argc, char *argv[]) #ifdef LOAD_INI_SETTINGS LoadINIControllerSettings(); - if (connectedPadButtons != 0) { - ControlsManager.InitDefaultControlConfigJoyPad(connectedPadButtons); - SaveINIControllerSettings(); - } + if (connectedPadButtons != 0) + ControlsManager.InitDefaultControlConfigJoyPad(connectedPadButtons); // add (connected-saved) amount of new button assignments on top of ours + + // these have 2 purposes: creating .ini at the start, and adding newly introduced settings to old .ini at the start + SaveINISettings(); + SaveINIControllerSettings(); #endif } From 3441714a13f57eecdf6ef74d3208cf503efd588c Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:27:30 +0300 Subject: [PATCH 07/16] lil fix --- src/control/CarAI.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index 8e79fee1..2609436f 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -584,8 +584,11 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle) { if (pVehicle->pDriver){ pVehicle->pDriver->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle); - if (pVehicle->GetModelIndex() == MI_AMBULAN) + switch (pVehicle->GetModelIndex()) { + case MI_AMBULAN: pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE); + break; + } } int timer = 100; for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++){ From 435b8fe52e7564bfcf6ff32d36b0625316cbf12f Mon Sep 17 00:00:00 2001 From: erorcun Date: Sat, 14 Aug 2021 22:11:33 +0300 Subject: [PATCH 08/16] Fix impossible bullets --- src/peds/Ped.cpp | 6 +++- src/peds/PedFight.cpp | 28 ++++++++++++++--- src/peds/PlayerPed.cpp | 38 ++++++++++++++++------ src/peds/PlayerPed.h | 6 ++++ src/weapons/Weapon.cpp | 71 +++++++++++++++++++++++++++++++++++------- 5 files changed, 122 insertions(+), 27 deletions(-) diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index fbe63a1a..6cbe7484 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -1233,8 +1233,12 @@ CPed::ClearAimFlag(void) m_lookTimer = 0; } - if (IsPlayer()) + if (IsPlayer()) { ((CPlayerPed*)this)->m_fFPSMoveHeading = 0.0f; +#ifdef FREE_CAM + ((CPlayerPed*)this)->m_bFreeAimActive = false; +#endif + } } void diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp index 20df6553..43ded57a 100644 --- a/src/peds/PedFight.cpp +++ b/src/peds/PedFight.cpp @@ -345,11 +345,17 @@ CPed::SetAttack(CEntity *victim) if (m_pLookTarget) { SetAimFlag(m_pLookTarget); - } else if (this == FindPlayerPed() && TheCamera.Cams[0].Using3rdPersonMouseCam()) { - SetAimFlag(m_fRotationCur); - ((CPlayerPed*)this)->m_fFPSMoveHeading = TheCamera.Find3rdPersonQuickAimPitch(); - } else if (curWeapon->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) { - SetAimFlag(m_fRotationCur); +#ifdef FREE_CAM + } else if (this != FindPlayerPed() || !((CPlayerPed*)this)->m_bFreeAimActive) { +#else + } else { +#endif + if (this == FindPlayerPed() && TheCamera.Cams[0].Using3rdPersonMouseCam()) { + SetAimFlag(m_fRotationCur); + ((CPlayerPed*)this)->m_fFPSMoveHeading = TheCamera.Find3rdPersonQuickAimPitch(); + } else if (curWeapon->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) { + SetAimFlag(m_fRotationCur); + } } } #ifdef FIX_BUGS @@ -821,6 +827,9 @@ CPed::Attack(void) if (!bIsDucking && !GetFireAnimNotDucking(ourWeapon) && ourWeapon->IsFlagSet(WEAPONFLAG_CANAIM_WITHARM)) m_pedIK.m_flags |= CPedIK::AIMS_WITH_ARM; else +#ifdef FREE_CAM + if (!IsPlayer() || !((CPlayerPed*)this)->m_bFreeAimActive) +#endif m_pedIK.m_flags &= ~CPedIK::AIMS_WITH_ARM; } @@ -1017,6 +1026,15 @@ CPed::Attack(void) weaponAnimAssoc->SetCurrentTime(animLoopEnd); weaponAnimAssoc->flags &= ~ASSOC_RUNNING; SetPointGunAt(m_pPointGunAt); +#ifdef FREE_CAM + } else if (IsPlayer() && ((CPlayerPed*)this)->m_bFreeAimActive && GetWeapon()->m_eWeaponState != WEAPONSTATE_RELOADING) { + float limitedCam = CGeneral::LimitRadianAngle(-TheCamera.Orientation); + SetLookFlag(limitedCam, true, true); + SetAimFlag(limitedCam); + SetLookTimer(INT32_MAX); + SetPointGunAt(nil); + ((CPlayerPed*)this)->m_fFPSMoveHeading = TheCamera.Find3rdPersonQuickAimPitch(); +#endif } else { ClearAimFlag(); diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp index 1d96ba6d..b0b82640 100644 --- a/src/peds/PlayerPed.cpp +++ b/src/peds/PlayerPed.cpp @@ -98,6 +98,9 @@ CPlayerPed::CPlayerPed(void) : CPed(PEDTYPE_PLAYER1) m_nAttackDirToCheck = 0; m_nLastBusFareCollected = 0; idleAnimBlockIndex = CAnimManager::GetAnimationBlockIndex("playidles"); +#ifdef FREE_CAM + m_bFreeAimActive = false; +#endif } void @@ -1342,17 +1345,22 @@ CPlayerPed::ProcessPlayerWeapon(CPad *padUsed) if ((padUsed->GetTarget() && CAN_AIM_WITH_ARM) || padUsed->GetWeapon()) { float limitedCam = CGeneral::LimitRadianAngle(-TheCamera.Orientation); + m_cachedCamSource = TheCamera.Cams[TheCamera.ActiveCam].Source; + m_cachedCamFront = TheCamera.Cams[TheCamera.ActiveCam].Front; + m_cachedCamUp = TheCamera.Cams[TheCamera.ActiveCam].Up; + // On this one we can rotate arm. if (CAN_AIM_WITH_ARM) { - 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 - } pointedGun = 2; - SetLookFlag(limitedCam, true); + m_bFreeAimActive = true; + SetLookFlag(limitedCam, true, true); SetAimFlag(limitedCam); - SetLookTimer(INT32_MAX); // removing this makes head move for real, but I experinced some bugs. - + SetLookTimer(INT32_MAX); + ((CPlayerPed*)this)->m_fFPSMoveHeading = TheCamera.Find3rdPersonQuickAimPitch(); + if (m_nPedState != PED_ATTACK && m_nPedState != PED_AIM_GUN) { + // This is a seperate ped state just for pointing gun. Used for target button + SetPointGunAt(nil); + } } else { m_fRotationDest = limitedCam; changedHeadingRate = 2; @@ -1380,9 +1388,19 @@ CPlayerPed::ProcessPlayerWeapon(CPad *padUsed) changedHeadingRate = 0; RestoreHeadingRate(); } - if (pointedGun == 1 && m_nPedState != PED_ATTACK) { - pointedGun = 0; - ClearPointGunAt(); + if (pointedGun == 1) { + if (m_nPedState == PED_ATTACK) { + if (!padUsed->GetWeapon() && (m_pedIK.m_flags & CPedIK::GUN_POINTED_SUCCESSFULLY) == 0) { + float limitedCam = CGeneral::LimitRadianAngle(-TheCamera.Orientation); + + SetAimFlag(limitedCam); + ((CPlayerPed*)this)->m_fFPSMoveHeading = TheCamera.Find3rdPersonQuickAimPitch(); + m_bFreeAimActive = true; + } + } else { + pointedGun = 0; + ClearPointGunAt(); + } } #endif diff --git a/src/peds/PlayerPed.h b/src/peds/PlayerPed.h index 1b7158b5..30b67199 100644 --- a/src/peds/PlayerPed.h +++ b/src/peds/PlayerPed.h @@ -44,6 +44,12 @@ public: float m_fGunSpinAngle; unsigned int m_nPadDownPressedInMilliseconds; unsigned int m_nLastBusFareCollected; +#ifdef FREE_CAM + bool m_bFreeAimActive; + CVector m_cachedCamSource; + CVector m_cachedCamFront; + CVector m_cachedCamUp; +#endif static bool bDontAllowWeaponChange; #ifndef MASTER diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp index c0319a11..2d219e2d 100644 --- a/src/weapons/Weapon.cpp +++ b/src/weapons/Weapon.cpp @@ -49,6 +49,29 @@ bool CWeapon::bPhotographHasBeenTaken; int32 sniperPirateCheck = 0x00797743; // 'Cwy\0' ??? #endif +#ifdef FREE_CAM +static bool +Find3rdPersonCamTargetVectorFromCachedVectors(float dist, CVector pos, CVector& source, CVector& target, CVector camSource, CVector camFront, CVector camUp) +{ + if (CPad::GetPad(0)->GetLookBehindForPed()) { + source = pos; + target = dist * FindPlayerPed()->GetForward() + source; + return false; + } else { + float angleX = DEGTORAD((CCamera::m_f3rdPersonCHairMultX - 0.5f) * 1.8f * 0.5f * TheCamera.Cams[TheCamera.ActiveCam].FOV * CDraw::GetAspectRatio()); + float angleY = DEGTORAD((0.5f - CCamera::m_f3rdPersonCHairMultY) * 1.8f * 0.5f * TheCamera.Cams[TheCamera.ActiveCam].FOV); + source = camSource; + target = camFront; + target += camUp * Tan(angleY); + target += CrossProduct(camFront, camUp) * Tan(angleX); + target.Normalise(); + source += DotProduct(pos - source, target) * target; + target = dist * target + source; + return true; + } +} +#endif + CWeaponInfo * CWeapon::GetInfo() { @@ -943,17 +966,23 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource) } else if ( shooter == FindPlayerPed() && TheCamera.Cams[0].Using3rdPersonMouseCam() ) { - TheCamera.Find3rdPersonCamTargetVector(info->m_fRange, *fireSource, source, target); #ifdef FREE_CAM - CPed *shooterPed = (CPed *)shooter; - if((shooterPed->m_pedIK.m_flags & CPedIK::GUN_POINTED_SUCCESSFULLY) == 0) { - target.x = info->m_fRange; - target.y = 0.0f; - target.z = 0.0f; + if (CCamera::bFreeCam) { + CPlayerPed* shooterPed = (CPlayerPed*)shooter; + Find3rdPersonCamTargetVectorFromCachedVectors(info->m_fRange, *fireSource, source, target, shooterPed->m_cachedCamSource, shooterPed->m_cachedCamFront, shooterPed->m_cachedCamUp); - shooterPed->TransformToNode(target, PED_HANDR); - } + if ((shooterPed->m_pedIK.m_flags & CPedIK::GUN_POINTED_SUCCESSFULLY) == 0) { + target.x = info->m_fRange; + target.y = 0.0f; + target.z = 0.0f; + + shooterPed->TransformToNode(target, PED_HANDR); + } + } else #endif + { + TheCamera.Find3rdPersonCamTargetVector(info->m_fRange, *fireSource, source, target); + } #ifdef FIX_BUGS // fix muzzleflash rotation @@ -1708,8 +1737,19 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource) if ( shooter == FindPlayerPed() && TheCamera.Cams[0].Using3rdPersonMouseCam() ) { - TheCamera.Find3rdPersonCamTargetVector(1.0f, *fireSource, source, target); - CVector Left = CrossProduct(TheCamera.Cams[TheCamera.ActiveCam].Front, TheCamera.Cams[TheCamera.ActiveCam].Up); + CVector Left; +#ifdef FREE_CAM + if (CCamera::bFreeCam) { + CPlayerPed* shooterPed = (CPlayerPed*)shooter; + Find3rdPersonCamTargetVectorFromCachedVectors(1.0f, *fireSource, source, target, shooterPed->m_cachedCamSource, shooterPed->m_cachedCamFront, shooterPed->m_cachedCamUp); + Left = CrossProduct(shooterPed->m_cachedCamFront, shooterPed->m_cachedCamUp); + } + else +#endif + { + TheCamera.Find3rdPersonCamTargetVector(1.0f, *fireSource, source, target); + Left = CrossProduct(TheCamera.Cams[TheCamera.ActiveCam].Front, TheCamera.Cams[TheCamera.ActiveCam].Up); + } float f = (i - (shootsAtOnce / 2)) * angleBetweenTwoShot; target = f * Left + target - source; @@ -2151,7 +2191,16 @@ CWeapon::FireAreaEffect(CEntity *shooter, CVector *fireSource) if ( shooter == FindPlayerPed() && TheCamera.Cams[0].Using3rdPersonMouseCam() ) { - TheCamera.Find3rdPersonCamTargetVector(info->m_fRange, *fireSource, source, target); +#ifdef FREE_CAM + if (CCamera::bFreeCam) { + CPlayerPed* shooterPed = (CPlayerPed*)shooter; + Find3rdPersonCamTargetVectorFromCachedVectors(info->m_fRange, *fireSource, source, target, shooterPed->m_cachedCamSource, shooterPed->m_cachedCamFront, shooterPed->m_cachedCamUp); + } + else +#endif + { + TheCamera.Find3rdPersonCamTargetVector(info->m_fRange, *fireSource, source, target); + } float norm = (1.0f / info->m_fRange); dir = (target - source) * norm; } From 042284de8bbd7c7984e5202a085ca5ee554d43e2 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:35:47 +0300 Subject: [PATCH 09/16] actual fix --- src/control/CarAI.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index 2609436f..5b4c955b 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -585,6 +585,13 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle) if (pVehicle->pDriver){ pVehicle->pDriver->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle); switch (pVehicle->GetModelIndex()) { + case MI_FIRETRUCK: + case MI_FBICAR: + case MI_ENFORCER: + case MI_CHOPPER: + case MI_RHINO: + case MI_POLICE: + break; case MI_AMBULAN: pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE); break; From 26e5a7eed1dbf6937b767f17acaf9985de3e673e Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:40:38 +0300 Subject: [PATCH 10/16] bruh --- src/control/CarAI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index 5b4c955b..ff793374 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -588,7 +588,7 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle) case MI_FIRETRUCK: case MI_FBICAR: case MI_ENFORCER: - case MI_CHOPPER: + case MI_BARRACKS: case MI_RHINO: case MI_POLICE: break; From 6bdfb0d3868e3804484f4abcfda9e56fca92f0e5 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:41:59 +0300 Subject: [PATCH 11/16] merged correct switch --- src/control/CarAI.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index ff793374..c8230d4d 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -611,8 +611,18 @@ void CCarAI::TellOccupantsToFleeCar(CVehicle* pVehicle) { if (pVehicle->pDriver && !pVehicle->pDriver->IsPlayer()) { pVehicle->pDriver->SetObjective(OBJECTIVE_FLEE_ON_FOOT_TILL_SAFE); - if (pVehicle->GetModelIndex() != MI_FIRETRUCK && pVehicle->GetModelIndex() == MI_AMBULAN) + switch (pVehicle->GetModelIndex()) { + case MI_FIRETRUCK: + case MI_FBIRANCH: + case MI_ENFORCER: + case MI_BARRACKS: + case MI_RHINO: + case MI_POLICE: + break; + case MI_AMBULAN: pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE); + break; + } } int timer = 100; for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) { From dec09bde1c7b9f647aec93b4afc8b7a090644335 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 23:30:25 +0300 Subject: [PATCH 12/16] fix --- src/control/CarCtrl.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp index 1cf09a9f..fa5ac1fe 100644 --- a/src/control/CarCtrl.cpp +++ b/src/control/CarCtrl.cpp @@ -1559,7 +1559,7 @@ void CCarCtrl::WeaveThroughCarsSectorList(CPtrList& lst, CVehicle* pVehicle, CPh continue; if (Abs(pTestVehicle->GetPosition().z - pVehicle->GetPosition().z) >= VEHICLE_HEIGHT_DIFF_TO_CONSIDER_WEAVING) continue; - if (pTestVehicle != pVehicle) + if (pTestVehicle != pVehicle && (!pVehicle->bPartOfConvoy || !pTestVehicle->bPartOfConvoy)) WeaveForOtherCar(pTestVehicle, pVehicle, pAngleToWeaveLeft, pAngleToWeaveRight); } } @@ -1567,8 +1567,6 @@ void CCarCtrl::WeaveThroughCarsSectorList(CPtrList& lst, CVehicle* pVehicle, CPh void CCarCtrl::WeaveForOtherCar(CEntity* pOtherEntity, CVehicle* pVehicle, float* pAngleToWeaveLeft, float* pAngleToWeaveRight) { CVehicle* pOtherCar = (CVehicle*)pOtherEntity; - if (pVehicle->bPartOfConvoy && pOtherCar->bPartOfConvoy) - return; if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMPLAYER_CLOSE && pOtherEntity == FindPlayerVehicle()) return; if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMCAR_CLOSE && pOtherEntity == pVehicle->AutoPilot.m_pTargetCar) From 77f692c669bd4c197f1641e0a71ce62c0424a4df Mon Sep 17 00:00:00 2001 From: aap Date: Mon, 16 Aug 2021 00:26:01 +0200 Subject: [PATCH 13/16] some CAutomobile fixes --- src/vehicles/Automobile.cpp | 44 ++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 387311b7..96b78fa6 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -246,6 +246,7 @@ CAutomobile::SetModelIndex(uint32 id) #define SAND_SLOWDOWN (0.01f) float CAR_BALANCE_MULT = 0.3f; +float HELI_ROTOR_DOTPROD_LIMIT = 0.95f; CVector vecSeaSparrowGunPos(-0.5f, 2.4f, -0.785f); CVector vecHunterGunPos(0.0f, 4.8f, -1.3f); CVector vecHunterRocketPos(2.5f, 1.0f, -0.5f); @@ -1365,13 +1366,13 @@ CAutomobile::ProcessControl(void) }else{ if(UsesSiren()){ if(Pads[0].bHornHistory[Pads[0].iCurrHornHistory]){ - if(Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+4) % 5] && - Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+3) % 5]) + if(Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+CPad::HORNHISTORY_SIZE-1) % CPad::HORNHISTORY_SIZE] && + Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+CPad::HORNHISTORY_SIZE-2) % CPad::HORNHISTORY_SIZE]) m_nCarHornTimer = 1; else m_nCarHornTimer = 0; - }else if(Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+4) % 5] && - !Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+1) % 5]){ + }else if(Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+CPad::HORNHISTORY_SIZE-1) % CPad::HORNHISTORY_SIZE] && + !Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+1) % CPad::HORNHISTORY_SIZE]){ m_nCarHornTimer = 0; m_bSirenOrAlarm = !m_bSirenOrAlarm; }else @@ -1510,9 +1511,9 @@ CAutomobile::ProcessControl(void) CMatrix mat; mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_BONNET])); CVector blade = mat.GetRight(); - blade = Multiply3x3(blade, GetMatrix()); + blade = Multiply3x3(GetMatrix(), blade); camDist /= Max(Sqrt(distSq), 0.01f); - if(Abs(DotProduct(camDist, blade)) > 0.95f){ + if(Abs(DotProduct(camDist, blade)) > HELI_ROTOR_DOTPROD_LIMIT){ DMAudio.PlayOneShot(m_audioEntityId, SOUND_HELI_BLADE, 0.0f); m_fPropellerRotation = m_aWheelRotation[1]; } @@ -1594,7 +1595,7 @@ CAutomobile::ProcessControl(void) float speedsq = m_vecMoveSpeed.MagnitudeSqr(); for(i = 0; i < 4; i++){ float suspChange = m_aSuspensionSpringRatioPrev[i] - m_aSuspensionSpringRatio[i]; - if(suspChange > 0.3f && !drivingInSand && speedsq > 0.04f){ + if(suspChange > 0.3f && !drivingInSand && speedsq > SQR(0.2f)){ if(Damage.GetWheelStatus(i) == WHEEL_STATUS_BURST) DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_JUMP_2, suspChange); else @@ -2563,10 +2564,10 @@ CAutomobile::PreRender(void) if(IsRealHeli()){ // top rotor m_aWheelRotation[1] += m_aWheelSpeed[1]*CTimer::GetTimeStep(); - if(m_aWheelRotation[1] > TWOPI) m_aWheelRotation[1] -= TWOPI; + while(m_aWheelRotation[1] > TWOPI) m_aWheelRotation[1] -= TWOPI; // rear rotor m_aWheelRotation[3] += m_aWheelSpeed[1]*CTimer::GetTimeStep(); - if(m_aWheelRotation[3] > TWOPI) m_aWheelRotation[3] -= TWOPI; + while(m_aWheelRotation[3] > TWOPI) m_aWheelRotation[3] -= TWOPI; onlyFrontWheels = true; } @@ -3960,10 +3961,10 @@ CAutomobile::DoHoverSuspensionRatios(void) }else m_aSuspensionSpringRatio[i] = 0.99999f; - m_aWheelColPoints[i].point.x = (lower.x - upper.x)*m_aSuspensionSpringRatio[i] + upper.x; - m_aWheelColPoints[i].point.y = (lower.y - upper.y)*m_aSuspensionSpringRatio[i] + upper.y; - m_aWheelColPoints[i].point.z = waterZ; - m_aWheelColPoints[i].normal = CVector(0.01f, 0.0f, 1.0f); + m_aWheelColPoints[i].point = CVector((lower.x - upper.x)*m_aSuspensionSpringRatio[i] + upper.x, + (lower.y - upper.y)*m_aSuspensionSpringRatio[i] + upper.y, + waterZ); + m_aWheelColPoints[i].normal = CVector(0.0f, 0.0f, 1.0f); m_aWheelColPoints[i].surfaceB = SURFACE_WATER; } } @@ -4347,9 +4348,9 @@ CAutomobile::dmgDrawCarCollidingParticles(const CVector &pos, float amount) nil, CGeneral::GetRandomNumberInRange(0.02f, 0.08f), CVehicleModelInfo::ms_vehicleColourTable[m_currentColour1], - CGeneral::GetRandomNumberInRange(-40.0f, 40.0f), + CGeneral::GetRandomNumberInRange(-40, 40), 0, - CGeneral::GetRandomNumberInRange(0.0f, 4.0f)); + CGeneral::GetRandomNumberInRange(0, 4)); } void @@ -4880,6 +4881,8 @@ CAutomobile::SetUpWheelColModel(CColModel *colModel) return true; } +float fBurstForceMult = 0.03f; + void CAutomobile::BurstTyre(uint8 wheel, bool applyForces) { @@ -4905,8 +4908,8 @@ CAutomobile::BurstTyre(uint8 wheel, bool applyForces) } if(applyForces){ - ApplyMoveForce(GetRight() * m_fMass * CGeneral::GetRandomNumberInRange(-0.03f, 0.03f)); - ApplyTurnForce(GetRight() * m_fTurnMass * CGeneral::GetRandomNumberInRange(-0.03f, 0.03f), GetForward()); + ApplyMoveForce(GetRight() * m_fMass * CGeneral::GetRandomNumberInRange(-fBurstForceMult, fBurstForceMult)); + ApplyTurnForce(GetRight() * m_fTurnMass * CGeneral::GetRandomNumberInRange(-fBurstForceMult, fBurstForceMult), GetForward()); } } } @@ -4953,7 +4956,7 @@ CAutomobile::IsRoomForPedToLeaveCar(uint32 component, CVector *doorOffset) CVector dist = doorPos - seatPos; - // Removing that makes thiProcessEntityCollisions func. return false for van doors. + // Removing that makes this func. return false for van doors. doorPos.z += 0.5f; float length = dist.Magnitude(); CVector pedPos = seatPos + dist*((length+0.6f)/length); @@ -5605,13 +5608,14 @@ CAutomobile::SetPanelDamage(int32 component, ePanels panel, bool noFlyingCompone if(m_aCarNodes[component] == nil) return; if(status == PANEL_STATUS_SMASHED1){ - DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_WINDSHIELD_CRACK, 0.0f); + if(panel == VEHPANEL_WINDSCREEN) + DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_WINDSHIELD_CRACK, 0.0f); // show damaged part SetComponentVisibility(m_aCarNodes[component], ATOMIC_FLAG_DAM); }else if(status == PANEL_STATUS_MISSING){ if(!noFlyingComponents) SpawnFlyingComponent(component, COMPGROUP_PANEL); - else + else if(panel == VEHPANEL_WINDSCREEN) CGlass::CarWindscreenShatters(this, false); // hide both SetComponentVisibility(m_aCarNodes[component], ATOMIC_FLAG_NONE); From 9ed94f310a5957ddd71e1d7bfda71e700fedbdd6 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 16 Aug 2021 09:57:40 +0300 Subject: [PATCH 14/16] Fix CW build --- codewarrior/reVC.mcp.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/codewarrior/reVC.mcp.xml b/codewarrior/reVC.mcp.xml index 750fb675..64f985fd 100644 --- a/codewarrior/reVC.mcp.xml +++ b/codewarrior/reVC.mcp.xml @@ -1723,6 +1723,13 @@ Text + + Name + ScriptDebug.cpp + Windows + Text + Debug + Name Script.cpp @@ -4711,6 +4718,11 @@ SceneEdit.h Windows + + Name + ScriptDebug.cpp + Windows + Name Script.cpp @@ -8248,6 +8260,13 @@ Text + + Name + ScriptDebug.cpp + Windows + Text + Debug + Name Script.cpp @@ -11236,6 +11255,11 @@ SceneEdit.h Windows + + Name + ScriptDebug.cpp + Windows + Name Script.cpp @@ -13780,6 +13804,12 @@ SceneEdit.h Windows + + Debug + Name + ScriptDebug.cpp + Windows + Debug Name From c7e05c74b9b38c90bdb6d3c85c5ffc73bdf88f66 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 16 Aug 2021 10:00:10 +0300 Subject: [PATCH 15/16] Fix cAudioManager::ProcessVehicleEngine return type, rename Sound Intensity --- src/audio/AudioCollision.cpp | 4 +- src/audio/AudioLogic.cpp | 706 ++++++++++++++++++----------------- src/audio/AudioManager.cpp | 37 +- src/audio/AudioManager.h | 12 +- 4 files changed, 380 insertions(+), 379 deletions(-) diff --git a/src/audio/AudioCollision.cpp b/src/audio/AudioCollision.cpp index 0a3c1edd..4bf6a404 100644 --- a/src/audio/AudioCollision.cpp +++ b/src/audio/AudioCollision.cpp @@ -268,7 +268,7 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col) SET_EMITTING_VOLUME(emittingVol); RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = CollisionSoundIntensity; + m_sQueueSample.m_SoundIntensity = CollisionSoundIntensity; m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -297,7 +297,7 @@ cAudioManager::SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 coun SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = CollisionSoundIntensity; + m_sQueueSample.m_SoundIntensity = CollisionSoundIntensity; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 329358a5..eb14963c 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -914,7 +914,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -965,7 +965,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = 140.0f; + m_sQueueSample.m_SoundIntensity = 140.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -990,7 +990,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = 140.0f; + m_sQueueSample.m_SoundIntensity = 140.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1006,7 +1006,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = 140.0f; + m_sQueueSample.m_SoundIntensity = 140.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1050,7 +1050,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = 140.0f; + m_sQueueSample.m_SoundIntensity = 140.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1083,7 +1083,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 30; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1118,7 +1118,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(propellerSpeed * 100.0f); SET_LOOP_OFFSETS(SFX_SEAPLANE_PRO4) m_sQueueSample.m_fSpeedMultiplier = 5.0f; - m_sQueueSample.m_fSoundIntensity = 20.0f; + m_sQueueSample.m_SoundIntensity = 20.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 7; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1149,7 +1149,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) SET_EMITTING_VOLUME(volumeModifier * 25.0f); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = 27.0f; + m_sQueueSample.m_SoundIntensity = 27.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1195,7 +1195,7 @@ cAudioManager::ProcessRainOnVehicle(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_bReverbFlag = FALSE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -1247,7 +1247,7 @@ cAudioManager::ProcessReverseGear(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVolume); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = reverseGearIntensity; + m_sQueueSample.m_SoundIntensity = reverseGearIntensity; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1290,7 +1290,7 @@ cAudioManager::ProcessModelHeliVehicle(cVehicleParams& params) } if (acceletateState < brakeState) acceletateState = brakeState; - freq = Clamp2(5 * acceletateState + 22050, prevFreq, 30); + freq = Clamp2(5 * acceletateState + 22050, (int)prevFreq, 30); CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); m_sQueueSample.m_nVolume = ComputeVolume(70, SOUND_INTENSITY, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { @@ -1304,7 +1304,7 @@ cAudioManager::ProcessModelHeliVehicle(cVehicleParams& params) SET_EMITTING_VOLUME(70); SET_LOOP_OFFSETS(SFX_CAR_RC_HELI) m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1367,7 +1367,7 @@ cAudioManager::ProcessModelVehicle(cVehicleParams& params) SET_EMITTING_VOLUME(volume); SET_LOOP_OFFSETS(SFX_RC_REV) m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1431,7 +1431,7 @@ cAudioManager::ProcessModelVehicle(cVehicleParams& params) SET_EMITTING_VOLUME(volume); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -1500,7 +1500,7 @@ cAudioManager::ProcessVehicleFlatTyre(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(SFX_TYRE_BURST_L) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1565,7 +1565,7 @@ cAudioManager::ProcessVehicleRoadNoise(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1624,7 +1624,7 @@ cAudioManager::ProcessWetRoadNoise(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -1636,7 +1636,7 @@ cAudioManager::ProcessWetRoadNoise(cVehicleParams& params) return TRUE; } -void +bool8 cAudioManager::ProcessVehicleEngine(cVehicleParams& params) { const float SOUND_INTENSITY = 50.0f; @@ -1664,197 +1664,199 @@ cAudioManager::ProcessVehicleEngine(cVehicleParams& params) isMoped = FALSE; caddyBool = FALSE; traction = 0.0f; - if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return; - playerVeh = FindPlayerVehicle(); - veh = params.m_pVehicle; - if (playerVeh == veh && veh->GetStatus() == STATUS_WRECKED) { - SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); - return; - } - if (!veh->bEngineOn) - return; - CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); - if (playerVeh == veh && veh->m_modelIndex != MI_CADDY) { - ProcessPlayersVehicleEngine(params, params.m_pVehicle); - return; - } - transmission = params.m_pTransmission; - if (transmission != nil) { - switch (veh->m_modelIndex) { - case MI_PIZZABOY: - case MI_FAGGIO: - isMoped = TRUE; - currentGear = transmission->nNumberOfGears; - break; - case MI_CADDY: - currentGear = transmission->nNumberOfGears; - caddyBool = TRUE; - break; - default: - currentGear = veh->m_nCurrentGear; - break; - } - switch (params.m_VehicleType) { - case VEHICLE_TYPE_CAR: - automobile = (CAutomobile*)veh; - wheelsOnGround = automobile->m_nDriveWheelsOnGround; - wheelsOnGroundPrev = automobile->m_nDriveWheelsOnGroundPrev; - wheelState = automobile->m_aWheelState; - gasPedalAudioPtr = &automobile->m_fGasPedalAudio; - break; - case VEHICLE_TYPE_BIKE: - bike = (CBike*)veh; - wheelsOnGround = bike->m_nDriveWheelsOnGround; - wheelsOnGroundPrev = bike->m_nDriveWheelsOnGroundPrev; - wheelState = bike->m_aWheelState; - gasPedalAudioPtr = &bike->m_fGasPedalAudio; - break; - default: - debug(" ** AUDIOLOG: Unrecognised vehicle type %d in ProcessVehicleEngine() * \n", params.m_VehicleType); - return; + if (params.m_fDistance < SQR(SOUND_INTENSITY)) { + playerVeh = FindPlayerVehicle(); + veh = params.m_pVehicle; + if (playerVeh == veh && veh->GetStatus() == STATUS_WRECKED) { + SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); + return TRUE; } + if (veh->bEngineOn) { + CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); + if (playerVeh == veh && veh->m_modelIndex != MI_CADDY) { + ProcessPlayersVehicleEngine(params, params.m_pVehicle); + return TRUE; + } + transmission = params.m_pTransmission; + if (transmission != nil) { + switch (veh->m_modelIndex) { + case MI_PIZZABOY: + case MI_FAGGIO: + isMoped = TRUE; + currentGear = transmission->nNumberOfGears; + break; + case MI_CADDY: + currentGear = transmission->nNumberOfGears; + caddyBool = TRUE; + break; + default: + currentGear = veh->m_nCurrentGear; + break; + } + switch (params.m_VehicleType) { + case VEHICLE_TYPE_CAR: + automobile = (CAutomobile*)veh; + wheelsOnGround = automobile->m_nDriveWheelsOnGround; + wheelsOnGroundPrev = automobile->m_nDriveWheelsOnGroundPrev; + wheelState = automobile->m_aWheelState; + gasPedalAudioPtr = &automobile->m_fGasPedalAudio; + break; + case VEHICLE_TYPE_BIKE: + bike = (CBike*)veh; + wheelsOnGround = bike->m_nDriveWheelsOnGround; + wheelsOnGroundPrev = bike->m_nDriveWheelsOnGroundPrev; + wheelState = bike->m_aWheelState; + gasPedalAudioPtr = &bike->m_fGasPedalAudio; + break; + default: + debug(" ** AUDIOLOG: Unrecognised vehicle type %d in ProcessVehicleEngine() * \n", params.m_VehicleType); + return TRUE; + } - if (wheelsOnGround != 0) { - if (!veh->bIsHandbrakeOn || isMoped && caddyBool) { //mb bug, bcs it's can't be TRUE together - if (veh->GetStatus() == STATUS_SIMPLE || isMoped || caddyBool) { - traction = 0.0f; - } else { - switch (transmission->nDriveType) { - case '4': - if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { - for (int i = 0; i < 2; i++) - if (wheelState[i] == WHEEL_STATE_SPINNING) - traction += 0.1f; + if (wheelsOnGround != 0) { + if (!veh->bIsHandbrakeOn || isMoped && caddyBool) { //mb bug, bcs it's can't be TRUE together + if (veh->GetStatus() == STATUS_SIMPLE || isMoped || caddyBool) { + traction = 0.0f; } else { - for (int i = 0; i < 4; i++) - if (wheelState[i] == WHEEL_STATE_SPINNING) - traction += 0.05f; + switch (transmission->nDriveType) { + case '4': + if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { + for (int i = 0; i < 2; i++) + if (wheelState[i] == WHEEL_STATE_SPINNING) + traction += 0.1f; + } else { + for (int i = 0; i < 4; i++) + if (wheelState[i] == WHEEL_STATE_SPINNING) + traction += 0.05f; + } + break; + case 'F': + if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { + if (wheelState[BIKEWHEEL_FRONT] == WHEEL_STATE_SPINNING) + traction += 0.2f; + } else { + if (wheelState[CARWHEEL_FRONT_LEFT] == WHEEL_STATE_SPINNING) + traction += 0.1f; + if (wheelState[CARWHEEL_FRONT_RIGHT] == WHEEL_STATE_SPINNING) + traction += 0.1f; + } + break; + case 'R': + if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { + if (wheelState[BIKEWHEEL_REAR] == WHEEL_STATE_SPINNING) + traction += 0.2f; + } else { + if (wheelState[CARWHEEL_REAR_LEFT] == WHEEL_STATE_SPINNING) + traction += 0.1f; + if (wheelState[CARWHEEL_REAR_RIGHT] == WHEEL_STATE_SPINNING) + traction += 0.1f; + } + break; + default: + break; + } } - break; - case 'F': - if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { - if (wheelState[BIKEWHEEL_FRONT] == WHEEL_STATE_SPINNING) - traction += 0.2f; - } else { - if (wheelState[CARWHEEL_FRONT_LEFT] == WHEEL_STATE_SPINNING) - traction += 0.1f; - if (wheelState[CARWHEEL_FRONT_RIGHT] == WHEEL_STATE_SPINNING) - traction += 0.1f; - } - break; - case 'R': - if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { - if (wheelState[BIKEWHEEL_REAR] == WHEEL_STATE_SPINNING) - traction += 0.2f; - } else { - if (wheelState[CARWHEEL_REAR_LEFT] == WHEEL_STATE_SPINNING) - traction += 0.1f; - if (wheelState[CARWHEEL_REAR_RIGHT] == WHEEL_STATE_SPINNING) - traction += 0.1f; - } - break; - default: - break; + } else if (params.m_fVelocityChange == 0.0f) { + traction = 0.9f; } - } - } else if (params.m_fVelocityChange == 0.0f) { - traction = 0.9f; - } - if (transmission->fMaxVelocity <= 0.0f) { - relativeChange = 0.0f; - modificator = 0.0f; - } else { - if (!isMoped && !caddyBool) { - if (currentGear != 0) { - relativeGearChange = Min(1.0f, - params.m_fVelocityChange - transmission->Gears[currentGear].fShiftDownVelocity) / transmission->fMaxVelocity * 2.5f; - if (traction == 0.0f && veh->GetStatus() != STATUS_SIMPLE && - params.m_fVelocityChange < transmission->Gears[1].fShiftUpVelocity) - traction = 0.7f; - relativeChange = traction * *gasPedalAudioPtr * 0.95f + (1.0f - traction) * relativeGearChange; + if (transmission->fMaxVelocity <= 0.0f) { + relativeChange = 0.0f; + modificator = 0.0f; } else { - relativeChange = Min(1.0f, - 1.0f - Abs((params.m_fVelocityChange - transmission->Gears[0].fShiftDownVelocity) / transmission->fMaxReverseVelocity)); + if (!isMoped && !caddyBool) { + if (currentGear != 0) { + relativeGearChange = Min(1.0f, + params.m_fVelocityChange - transmission->Gears[currentGear].fShiftDownVelocity) / transmission->fMaxVelocity * 2.5f; + if (traction == 0.0f && veh->GetStatus() != STATUS_SIMPLE && + params.m_fVelocityChange < transmission->Gears[1].fShiftUpVelocity) + traction = 0.7f; + relativeChange = traction * *gasPedalAudioPtr * 0.95f + (1.0f - traction) * relativeGearChange; + } else { + relativeChange = Min(1.0f, + 1.0f - Abs((params.m_fVelocityChange - transmission->Gears[0].fShiftDownVelocity) / transmission->fMaxReverseVelocity)); + } + modificator = relativeChange; + } else { + modificator = Min(1.0f, Abs(params.m_fVelocityChange / transmission->fMaxVelocity > 1.0f)); + } } + } else { + if (wheelsOnGroundPrev != 0) + *gasPedalAudioPtr *= 0.4f; + relativeChange = *gasPedalAudioPtr; modificator = relativeChange; - } else { - modificator = Min(1.0f, Abs(params.m_fVelocityChange / transmission->fMaxVelocity > 1.0f)); - } - } - } else { - if (wheelsOnGroundPrev != 0) - *gasPedalAudioPtr *= 0.4f; - relativeChange = *gasPedalAudioPtr; - modificator = relativeChange; - } - if (currentGear != 0 || wheelsOnGround == 0) - freq = 1200 * currentGear + 18000.0f * modificator + 14000; - else if (params.m_VehicleType == VEHICLE_TYPE_BIKE) - freq = 22050; - else - freq = 13000.0f * modificator + 14000; - if (modificator >= 0.75f) - emittingVol = 90; - else - emittingVol = modificator * (4.0f / 3.0f) * 15.0f + 75; - } else { - modificator = 0.0f; - emittingVol = 75; - } - if (veh->bIsDrowning) - emittingVol /= 4; - if (caddyBool) { - emittingVol = 100.0f * modificator; - freq = 2130.0f * modificator + 4270; - m_sQueueSample.m_nCounter = 2; - } - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance); - if (m_sQueueSample.m_nVolume != 0) { - if (!caddyBool) { - if (veh->GetStatus() == STATUS_SIMPLE) { - if (modificator < 0.02f) { - m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1; - m_sQueueSample.m_nCounter = 52; - freq = 10000.0f * modificator + 22050; - } else { - m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nAccelerationSampleIndex; - m_sQueueSample.m_nCounter = 2; } + if (currentGear != 0 || wheelsOnGround == 0) + freq = 1200 * currentGear + 18000.0f * modificator + 14000; + else if (params.m_VehicleType == VEHICLE_TYPE_BIKE) + freq = 22050; + else + freq = 13000.0f * modificator + 14000; + if (modificator >= 0.75f) + emittingVol = 90; + else + emittingVol = modificator * (4.0f / 3.0f) * 15.0f + 75; } else { - if (veh->m_fGasPedal < 0.02f) { - m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1; - m_sQueueSample.m_nCounter = 52; - freq = 10000.0f * modificator + 22050; - } else { - m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nAccelerationSampleIndex; - m_sQueueSample.m_nCounter = 2; - } + modificator = 0.0f; + emittingVol = 75; + } + if (veh->bIsDrowning) + emittingVol /= 4; + if (caddyBool) { + emittingVol = 100.0f * modificator; + freq = 2130.0f * modificator + 4270; + m_sQueueSample.m_nCounter = 2; + } + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance); + if (m_sQueueSample.m_nVolume != 0) { + if (!caddyBool) { + if (veh->GetStatus() == STATUS_SIMPLE) { + if (modificator < 0.02f) { + m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1; + m_sQueueSample.m_nCounter = 52; + freq = 10000.0f * modificator + 22050; + } else { + m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nAccelerationSampleIndex; + m_sQueueSample.m_nCounter = 2; + } + } else { + if (veh->m_fGasPedal < 0.02f) { + m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1; + m_sQueueSample.m_nCounter = 52; + freq = 10000.0f * modificator + 22050; + } else { + m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nAccelerationSampleIndex; + m_sQueueSample.m_nCounter = 2; + } + } + m_sQueueSample.m_nFrequency = freq + 100 * m_sQueueSample.m_nBankIndex % 1000; + } else { + if (FindVehicleOfPlayer() == params.m_pVehicle) + m_sQueueSample.m_nSampleIndex = SFX_CAR_AFTER_ACCEL_12; + else + m_sQueueSample.m_nSampleIndex = SFX_CAR_REV_12; + m_sQueueSample.m_nFrequency = freq + 20 * m_sQueueSample.m_nBankIndex % 100; + } + m_sQueueSample.m_nBankIndex = SFX_BANK_0; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_nReleasingVolumeModificator = 3; + if (m_sQueueSample.m_nSampleIndex == SFX_CAR_IDLE_5 || m_sQueueSample.m_nSampleIndex == SFX_CAR_REV_5) + m_sQueueSample.m_nFrequency /= 2; + m_sQueueSample.m_nLoopCount = 0; + SET_EMITTING_VOLUME(emittingVol); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_fSpeedMultiplier = 6.0f; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_nReleasingVolumeDivider = 8; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; + AddSampleToRequestedQueue(); } - m_sQueueSample.m_nFrequency = freq + 100 * m_sQueueSample.m_nBankIndex % 1000; - } else { - if (FindVehicleOfPlayer() == params.m_pVehicle) - m_sQueueSample.m_nSampleIndex = SFX_CAR_AFTER_ACCEL_12; - else - m_sQueueSample.m_nSampleIndex = SFX_CAR_REV_12; - m_sQueueSample.m_nFrequency = freq + 20 * m_sQueueSample.m_nBankIndex % 100; } - m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = FALSE; - m_sQueueSample.m_nReleasingVolumeModificator = 3; - if (m_sQueueSample.m_nSampleIndex == SFX_CAR_IDLE_5 || m_sQueueSample.m_nSampleIndex == SFX_CAR_REV_5) - m_sQueueSample.m_nFrequency /= 2; - m_sQueueSample.m_nLoopCount = 0; - SET_EMITTING_VOLUME(emittingVol); - SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) - m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = FALSE; - m_sQueueSample.m_nReleasingVolumeDivider = 8; - m_sQueueSample.m_bReverbFlag = TRUE; - m_sQueueSample.m_bRequireReflection = FALSE; - AddSampleToRequestedQueue(); + return TRUE; } + return FALSE; } void @@ -1911,7 +1913,7 @@ cAudioManager::AddPlayerCarSample(uint8 emittingVolume, uint32 freq, uint32 samp SET_EMITTING_VOLUME(emittingVolume); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = 50.0f; + m_sQueueSample.m_SoundIntensity = 50.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -1937,7 +1939,7 @@ cAudioManager::ProcessCesna(cVehicleParams ¶ms) SET_EMITTING_VOLUME(80); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = 200.0f; + m_sQueueSample.m_SoundIntensity = 200.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -1957,7 +1959,7 @@ cAudioManager::ProcessCesna(cVehicleParams ¶ms) SET_EMITTING_VOLUME(80); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = 90.0f; + m_sQueueSample.m_SoundIntensity = 90.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -2491,7 +2493,7 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = TRUE; @@ -2597,7 +2599,7 @@ cAudioManager::ProcessVehicleHorn(cVehicleParams& params) #endif SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 5.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -2678,7 +2680,7 @@ cAudioManager::ProcessVehicleSirenOrAlarm(cVehicleParams& params) SET_EMITTING_VOLUME(volume); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 7.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -2724,7 +2726,7 @@ cAudioManager::ProcessVehicleReverseWarning(cVehicleParams& params) #endif SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = TRUE; @@ -2769,7 +2771,7 @@ cAudioManager::ProcessVehicleDoors(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 1.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = TRUE; @@ -2814,7 +2816,7 @@ cAudioManager::ProcessAirBrakes(cVehicleParams& params) SET_EMITTING_VOLUME(volume); RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -2870,7 +2872,7 @@ cAudioManager::ProcessEngineDamage(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVolume); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = TRUE; @@ -2918,7 +2920,7 @@ cAudioManager::ProcessCarBombTick(cVehicleParams& params) SET_EMITTING_VOLUME(EMITTING_VOLUME); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = TRUE; @@ -2942,7 +2944,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) float maxDist; static uint8 GunIndex = 53; - for (int i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_AudioEvents; i++) { + for (uint16 i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_AudioEvents; i++) { noReflections = FALSE; isHeli = FALSE; m_sQueueSample.m_bRequireReflection = FALSE; @@ -2987,7 +2989,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bRequireReflection = TRUE; break; } @@ -3027,7 +3029,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bRequireReflection = TRUE; break; } @@ -3041,7 +3043,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_GLASS_CRACK); m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; } break; case SOUND_CAR_JUMP: case SOUND_CAR_JUMP_2: { @@ -3069,7 +3071,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency *= 2; m_sQueueSample.m_nReleasingVolumeModificator = 6; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; break; } case SOUND_CAR_TYRE_POP: { @@ -3084,7 +3086,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(2000); m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[4] % 10 + 117; break; @@ -3102,7 +3104,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_CAR_STARTER); m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bRequireReflection = TRUE; break; } @@ -3115,7 +3117,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 8); m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[4] % 10 + 30; break; @@ -3133,7 +3135,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 8); m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[0] % 15 + 55; break; @@ -3146,7 +3148,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_SUSPENSION_SLOW_MOVE_LOOP); m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_nReleasingVolumeDivider = 7; noReflections = TRUE; maxDist = SQR(SOUND_INTENSITY); @@ -3162,7 +3164,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 8); m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[1] % 15 + 55; break; @@ -3184,7 +3186,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = (7000.0f * relVol) + 6000; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; emittingVol = (35.0f * relVol); maxDist = SQR(SOUND_INTENSITY); break; @@ -3212,7 +3214,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 11025; m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 5.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[1] % 20 + 70; break; @@ -3230,7 +3232,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; emittingVol = (37.0f * vol * 625.0f / 24.0f) + 90; maxDist = SQR(SOUND_INTENSITY); noReflections = TRUE; @@ -3244,7 +3246,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_BOMB_BEEP); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); m_sQueueSample.m_bRequireReflection = TRUE; emittingVol = 60; @@ -3258,7 +3260,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_JUMBO_LAND_WHEELS); m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[4] % 25 + 75; break; @@ -3280,7 +3282,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; break; } case SOUND_WEAPON_SHOT_FIRED: { @@ -3327,7 +3329,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bRequireReflection = TRUE; isHeli = TRUE; break; @@ -3381,7 +3383,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) #endif m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bRequireReflection = TRUE; break; } @@ -3397,7 +3399,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 7; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[3] % 20 + 90; break; @@ -3413,7 +3415,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_ARM_BOMB); m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bRequireReflection = TRUE; emittingVol = 50; maxDist = SQR(SOUND_INTENSITY); @@ -3453,7 +3455,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 16000; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); m_sQueueSample.m_bRequireReflection = TRUE; emittingVol = m_anRandomTable[4] % 20 + 90; @@ -3468,7 +3470,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency = RandomDisplacement(6000) + 16000; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; ++CrunchOffset; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[4] % 20 + 55; @@ -3490,7 +3492,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); break; } @@ -3499,7 +3501,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) } if (params.m_fDistance < maxDist) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { if (noReflections) { m_sQueueSample.m_nLoopCount = 0; @@ -3512,7 +3514,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); m_sQueueSample.m_bReverbFlag = TRUE; if (isHeli) { - if (0.2f * m_sQueueSample.m_fSoundIntensity > m_sQueueSample.m_fDistance) { + if (0.2f * m_sQueueSample.m_SoundIntensity > m_sQueueSample.m_fDistance) { m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nOffset = 0; #ifdef THIS_IS_STUPID @@ -3585,7 +3587,7 @@ cAudioManager::ProcessTrainNoise(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = TRUE; @@ -3607,7 +3609,7 @@ cAudioManager::ProcessTrainNoise(cVehicleParams& params) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = TRUE; @@ -3729,7 +3731,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) SET_EMITTING_VOLUME(Vol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = intensity; + m_sQueueSample.m_SoundIntensity = intensity; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 7; m_sQueueSample.m_bReverbFlag = TRUE; @@ -3753,7 +3755,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) SET_EMITTING_VOLUME(80); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = intensity; + m_sQueueSample.m_SoundIntensity = intensity; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 7; m_sQueueSample.m_bReverbFlag = TRUE; @@ -3800,7 +3802,7 @@ cAudioManager::ProcessBoatMovingOverWater(cVehicleParams& params) SET_EMITTING_VOLUME(vol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = 50.0f; + m_sQueueSample.m_SoundIntensity = 50.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 6; m_sQueueSample.m_bReverbFlag = TRUE; @@ -3967,7 +3969,7 @@ cAudioManager::SetupJumboTaxiSound(uint8 vol) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -3998,7 +4000,7 @@ cAudioManager::SetupJumboWhineSound(uint8 emittingVol, uint32 freq) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -4028,7 +4030,7 @@ cAudioManager::SetupJumboEngineSound(uint8 vol, uint32 freq) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_bReverbFlag = TRUE; @@ -4057,7 +4059,7 @@ cAudioManager::SetupJumboFlySound(uint8 emittingVol) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_bReverbFlag = TRUE; @@ -4087,7 +4089,7 @@ cAudioManager::SetupJumboRumbleSound(uint8 emittingVol) SET_EMITTING_VOLUME(emittingVol); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 12; m_sQueueSample.m_nOffset = 0; @@ -4220,7 +4222,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) } m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 20.0f; + m_sQueueSample.m_SoundIntensity = 20.0f; m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS SET_EMITTING_VOLUME(emittingVol); @@ -4247,7 +4249,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 17); m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS SET_EMITTING_VOLUME(emittingVol); @@ -4340,7 +4342,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) ++iSound; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4395,7 +4397,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) narrowSoundRange = TRUE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4419,7 +4421,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = 27000; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = 50.0f; + m_sQueueSample.m_SoundIntensity = 50.0f; maxDist = SQR(50); m_sQueueSample.m_nLoopCount = 0; emittingVol = 100; @@ -4442,7 +4444,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = 27000; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 0; emittingVol = 100; @@ -4467,7 +4469,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 22000; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 0; emittingVol = 100; @@ -4492,7 +4494,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4512,7 +4514,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4532,7 +4534,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4553,7 +4555,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4573,7 +4575,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4592,7 +4594,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 17000; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4612,7 +4614,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4630,7 +4632,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 34000; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4649,7 +4651,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4667,7 +4669,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 43150; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4686,7 +4688,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4709,7 +4711,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4728,7 +4730,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = (10 * m_sQueueSample.m_nEntityIndex & 2047) + SampleManager.GetSampleBaseFrequency(SFX_FLAMETHROWER_LEFT); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 0; SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) @@ -4748,7 +4750,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4806,7 +4808,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4869,7 +4871,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 120.0f; + m_sQueueSample.m_SoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4888,7 +4890,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4906,7 +4908,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 8); m_sQueueSample.m_nReleasingVolumeModificator = 7; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4926,7 +4928,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = RandomDisplacement(1400) + 20000; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 40.0f; + m_sQueueSample.m_SoundIntensity = 40.0f; maxDist = SQR(40); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -4959,7 +4961,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; if (weaponType == WEAPONTYPE_UNARMED || weaponType == WEAPONTYPE_BRASSKNUCKLE) emittingVol = m_anRandomTable[1] % 10 + 35; else @@ -4988,7 +4990,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = (3 * m_sQueueSample.m_nFrequency) / 4; m_sQueueSample.m_nReleasingVolumeModificator = 6; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = 20.0f; + m_sQueueSample.m_SoundIntensity = 20.0f; maxDist = SQR(20); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -5006,7 +5008,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_MINIGUN_FIRE_LEFT); m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = 150.0f; + m_sQueueSample.m_SoundIntensity = 150.0f; emittingVol = 127; maxDist = SQR(150); m_sQueueSample.m_nLoopCount = 0; @@ -5023,7 +5025,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = 18569; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = 150.0f; + m_sQueueSample.m_SoundIntensity = 150.0f; emittingVol = 127.0f * m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_afVolume[i]; maxDist = SQR(150); m_sQueueSample.m_nLoopCount = 0; @@ -5040,7 +5042,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_MINIGUN_STOP); m_sQueueSample.m_nReleasingVolumeModificator = 4; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = 150.0f; + m_sQueueSample.m_SoundIntensity = 150.0f; maxDist = SQR(150); m_sQueueSample.m_nLoopCount = 1; RESET_LOOP_OFFSETS @@ -5083,7 +5085,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_fSoundIntensity = 15.0f; + m_sQueueSample.m_SoundIntensity = 15.0f; maxDist = SQR(15); m_sQueueSample.m_nLoopCount = 0; SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) @@ -5103,10 +5105,10 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) iSound = 21; if (params.m_fDistance < maxDist) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { if (stereo) { - if (m_sQueueSample.m_fDistance < 0.2f * m_sQueueSample.m_fSoundIntensity) { + if (m_sQueueSample.m_fDistance < 0.2f * m_sQueueSample.m_SoundIntensity) { m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nOffset = 0; } else { @@ -7906,7 +7908,7 @@ cPedComments::Process() AudioManager.m_sQueueSample.m_nEmittingVolume = MAX_VOLUME; #endif AudioManager.m_sQueueSample.m_fSpeedMultiplier = 3.0f; - AudioManager.m_sQueueSample.m_fSoundIntensity = 40.0f; + AudioManager.m_sQueueSample.m_SoundIntensity = 40.0f; AudioManager.m_sQueueSample.m_bReleasingSoundFlag = TRUE; AudioManager.m_sQueueSample.m_vecPos = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_vecPos; AudioManager.m_sQueueSample.m_bReverbFlag = TRUE; @@ -7980,7 +7982,7 @@ cAudioManager::ProcessExplosions(int32 explosion) case EXPLOSION_ROCKET: case EXPLOSION_BARREL: case EXPLOSION_TANK_GRENADE: - m_sQueueSample.m_fSoundIntensity = 200.0f; + m_sQueueSample.m_SoundIntensity = 200.0f; m_sQueueSample.m_nSampleIndex = SFX_EXPLOSION_2; m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 19000; m_sQueueSample.m_nReleasingVolumeModificator = 0; @@ -7988,7 +7990,7 @@ cAudioManager::ProcessExplosions(int32 explosion) m_sQueueSample.m_bRequireReflection = TRUE; break; case EXPLOSION_MOLOTOV: - m_sQueueSample.m_fSoundIntensity = 150.0f; + m_sQueueSample.m_SoundIntensity = 150.0f; m_sQueueSample.m_nSampleIndex = SFX_EXPLOSION_3; m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 19000; m_sQueueSample.m_nReleasingVolumeModificator = 0; @@ -7997,7 +7999,7 @@ cAudioManager::ProcessExplosions(int32 explosion) break; case EXPLOSION_MINE: case EXPLOSION_HELI_BOMB: - m_sQueueSample.m_fSoundIntensity = 200.0f; + m_sQueueSample.m_SoundIntensity = 200.0f; m_sQueueSample.m_nSampleIndex = SFX_ROCKET_LEFT; m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 12347; m_sQueueSample.m_nReleasingVolumeModificator = 0; @@ -8005,7 +8007,7 @@ cAudioManager::ProcessExplosions(int32 explosion) m_sQueueSample.m_bRequireReflection = TRUE; break; default: - m_sQueueSample.m_fSoundIntensity = 200.0f; + m_sQueueSample.m_SoundIntensity = 200.0f; m_sQueueSample.m_nSampleIndex = SFX_EXPLOSION_1; m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 19500; if (type == EXPLOSION_HELI) @@ -8016,9 +8018,9 @@ cAudioManager::ProcessExplosions(int32 explosion) } m_sQueueSample.m_vecPos = *CExplosion::GetExplosionPosition(i); distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); - if (distSquared < SQR(m_sQueueSample.m_fSoundIntensity)) { + if (distSquared < SQR(m_sQueueSample.m_SoundIntensity)) { m_sQueueSample.m_fDistance = Sqrt(distSquared); - m_sQueueSample.m_nVolume = ComputeVolume(MAX_VOLUME, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(MAX_VOLUME, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = i; m_sQueueSample.m_fSpeedMultiplier = 2.0f; @@ -8048,7 +8050,7 @@ cAudioManager::ProcessFires(int32) if (entity) { switch (entity->GetType()) { case ENTITY_TYPE_BUILDING: - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_CAR_ON_FIRE; emittingVol = 100; m_sQueueSample.m_nFrequency = 8 * SampleManager.GetSampleBaseFrequency(SFX_CAR_ON_FIRE) / 10; @@ -8056,7 +8058,7 @@ cAudioManager::ProcessFires(int32) m_sQueueSample.m_nReleasingVolumeModificator = 6; break; case ENTITY_TYPE_PED: - m_sQueueSample.m_fSoundIntensity = 25.0f; + m_sQueueSample.m_SoundIntensity = 25.0f; m_sQueueSample.m_nSampleIndex = SFX_PED_ON_FIRE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_PED_ON_FIRE); emittingVol = 60; @@ -8064,7 +8066,7 @@ cAudioManager::ProcessFires(int32) m_sQueueSample.m_nReleasingVolumeModificator = 10; break; default: - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_CAR_ON_FIRE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_CAR_ON_FIRE); m_sQueueSample.m_nFrequency += i * (m_sQueueSample.m_nFrequency / 64); @@ -8072,7 +8074,7 @@ cAudioManager::ProcessFires(int32) m_sQueueSample.m_nReleasingVolumeModificator = 8; } } else { - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_CAR_ON_FIRE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_CAR_ON_FIRE); emittingVol = 80; @@ -8080,9 +8082,9 @@ cAudioManager::ProcessFires(int32) } m_sQueueSample.m_vecPos = gFireManager.m_aFires[i].m_vecPos; distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); - if (distSquared < SQR(m_sQueueSample.m_fSoundIntensity)) { + if (distSquared < SQR(m_sQueueSample.m_SoundIntensity)) { m_sQueueSample.m_fDistance = Sqrt(distSquared); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = i; m_sQueueSample.m_nBankIndex = SFX_BANK_0; @@ -8101,7 +8103,7 @@ cAudioManager::ProcessFires(int32) if (gFireManager.m_aFires[i].m_bExtinguishedWithWater) { gFireManager.m_aFires[i].m_bExtinguishedWithWater = FALSE; emittingVol = 100.0f * gFireManager.m_aFires[i].m_fWaterExtinguishCountdown; - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nSampleIndex = SFX_JUMBO_TAXI; m_sQueueSample.m_nFrequency = 19591; @@ -8138,7 +8140,7 @@ cAudioManager::ProcessWaterCannon(int32) m_sQueueSample.m_fDistance = Sqrt(distSquared); m_sQueueSample.m_nVolume = ComputeVolume(50, SOUND_INTENSITY, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_nSampleIndex = SFX_JUMBO_TAXI; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = 15591; @@ -8190,7 +8192,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) switch (sound) { case SCRIPT_SOUND_POLICE_CELL_DOOR_CLUNK: - m_sQueueSample.m_fSoundIntensity = 40.0f; + m_sQueueSample.m_SoundIntensity = 40.0f; m_sQueueSample.m_nSampleIndex = SFX_COL_GATE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = 10600; @@ -8202,7 +8204,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_bRequireReflection = TRUE; break; case SCRIPT_SOUND_GARAGE_DOOR_CLUNK: - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_COL_CAR_PANEL_2; // huh? m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = 22000; @@ -8217,7 +8219,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) case SCRIPT_SOUND_BULLET_HIT_GROUND_1: case SCRIPT_SOUND_BULLET_HIT_GROUND_2: case SCRIPT_SOUND_BULLET_HIT_GROUND_3: - m_sQueueSample.m_fSoundIntensity = 50.0f; + m_sQueueSample.m_SoundIntensity = 50.0f; m_sQueueSample.m_nSampleIndex = m_anRandomTable[iSound % 5] % 3 + SFX_BULLET_WALL_1; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); @@ -8229,7 +8231,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) break; case SCRIPT_SOUND_WILLIE_CARD_SWIPE: emittingVolume = 70; - m_sQueueSample.m_fSoundIntensity = 40.0f; + m_sQueueSample.m_SoundIntensity = 40.0f; m_sQueueSample.m_nSampleIndex = SFX_BOMB_BEEP; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = 20159; @@ -8253,7 +8255,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) return; } case SCRIPT_SOUND_SEAPLANE_LOW_FUEL: - m_sQueueSample.m_fSoundIntensity = 1000.0f; + m_sQueueSample.m_SoundIntensity = 1000.0f; m_sQueueSample.m_nSampleIndex = SFX_SEAPLANE_LOW; m_sQueueSample.m_nBankIndex = SFX_BANK_0; emittingVolume = 100; @@ -8264,7 +8266,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_bRequireReflection = FALSE; break; case SCRIPT_SOUND_PAYPHONE_RINGING: - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_PHONE_RING; m_sQueueSample.m_nBankIndex = SFX_BANK_0; emittingVolume = 80; @@ -8275,7 +8277,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_bRequireReflection = FALSE; break; case SCRIPT_SOUND_GLASS_BREAK_L: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = SFX_GLASS_SMASH; m_sQueueSample.m_nBankIndex = SFX_BANK_0; emittingVolume = 70; @@ -8285,7 +8287,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_GLASS_BREAK_S: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = SFX_GLASS_SMASH; m_sQueueSample.m_nBankIndex = SFX_BANK_0; emittingVolume = 60; @@ -8295,7 +8297,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_GLASS_CRACK: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = SFX_GLASS_CRACK; m_sQueueSample.m_nBankIndex = SFX_BANK_0; emittingVolume = 70; @@ -8306,7 +8308,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_bRequireReflection = TRUE; break; case SCRIPT_SOUND_GLASS_LIGHT_BREAK: - m_sQueueSample.m_fSoundIntensity = 55.0f; + m_sQueueSample.m_SoundIntensity = 55.0f; m_sQueueSample.m_nSampleIndex = (m_anRandomTable[4] & 3) + SFX_GLASS_SHARD_1; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = RandomDisplacement(2000) + 19000; @@ -8316,7 +8318,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) emittingVolume = RandomDisplacement(11) + 25; break; case SCRIPT_SOUND_BOX_DESTROYED_1: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = SFX_WOODEN_BOX_SMASH; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = RandomDisplacement(1500) + 18600; @@ -8327,7 +8329,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) emittingVolume = m_anRandomTable[2] % 20 + 80; break; case SCRIPT_SOUND_BOX_DESTROYED_2: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = SFX_CARDBOARD_BOX_SMASH; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = RandomDisplacement(1500) + 18600; @@ -8338,7 +8340,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) emittingVolume = m_anRandomTable[2] % 20 + 80; break; case SCRIPT_SOUND_METAL_COLLISION: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = m_anRandomTable[3] % 5 + SFX_COL_CAR_1; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); @@ -8350,7 +8352,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) emittingVolume = m_anRandomTable[2] % 30 + 70; break; case SCRIPT_SOUND_TIRE_COLLISION: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = SFX_TYRE_BUMP; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); @@ -8362,7 +8364,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) emittingVolume = m_anRandomTable[2] % 30 + 60; break; case SCRIPT_SOUND_HIT_BALL: - m_sQueueSample.m_fSoundIntensity = 60.0f; + m_sQueueSample.m_SoundIntensity = 60.0f; m_sQueueSample.m_nSampleIndex = SFX_HIT_BALL; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); @@ -8403,7 +8405,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = RandomDisplacement(1500) + 30000; m_sQueueSample.m_nReleasingVolumeModificator = 15; } - m_sQueueSample.m_fSoundIntensity = 20.0f; + m_sQueueSample.m_SoundIntensity = 20.0f; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_bIs2D = FALSE; @@ -8413,7 +8415,7 @@ 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_SoundIntensity = 20.0f; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_bIs2D = FALSE; @@ -8424,9 +8426,9 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) } distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); - if (distSquared < SQR(m_sQueueSample.m_fSoundIntensity)) { + if (distSquared < SQR(m_sQueueSample.m_SoundIntensity)) { m_sQueueSample.m_fDistance = Sqrt(distSquared); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = iSound++; m_sQueueSample.m_nLoopCount = 1; @@ -8447,7 +8449,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) switch(sound) { case SCRIPT_SOUND_BANK_ALARM_LOOP: - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_BUILDINGS_BANK_ALARM; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_BANK_ALARM; emittingVolume = 90; @@ -8459,7 +8461,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) break; case SCRIPT_SOUND_POLICE_CELL_DOOR_SLIDING_LOOP: case SCRIPT_SOUND_GARAGE_DOOR_SLIDING_LOOP: - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_GARAGE_DOOR_LOOP; m_sQueueSample.m_nBankIndex = SFX_BANK_0; emittingVolume = 90; @@ -8470,7 +8472,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_SNORING_LOOP: - m_sQueueSample.m_fSoundIntensity = 6.0f; + m_sQueueSample.m_SoundIntensity = 6.0f; m_sQueueSample.m_nSampleIndex = SFX_BUILDING_SNORE; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_SNORING; emittingVolume = 25; @@ -8481,7 +8483,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_SHOOTING_RANGE_TARGET_MOVING_LOOP: - m_sQueueSample.m_fSoundIntensity = 40.0f; + m_sQueueSample.m_SoundIntensity = 40.0f; m_sQueueSample.m_nSampleIndex = SFX_TANK_TURRET; m_sQueueSample.m_nBankIndex = SFX_BANK_0; emittingVolume = 60; @@ -8494,7 +8496,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) case SCRIPT_SOUND_NEW_BUILDING_BAR_1: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_1; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_BAR_1; - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8505,7 +8507,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) case SCRIPT_SOUND_NEW_BUILDING_BAR_2: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_2; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_BAR_2; - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8516,7 +8518,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) case SCRIPT_SOUND_NEW_BUILDING_BAR_3: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_3; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_BAR_3; - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8527,7 +8529,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) case SCRIPT_SOUND_NEW_BUILDING_BAR_4: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_4; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_BAR_4; - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8540,7 +8542,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex = SFX_BUILDING_MAL1; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_MALIBU_1; MusicManager.SetMalibuClubTrackPos(SCRIPT_SOUND_NEW_BUILDING_MALIBU_1); - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8553,7 +8555,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex = SFX_BUILDING_MAL2; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_MALIBU_2; MusicManager.SetMalibuClubTrackPos(SCRIPT_SOUND_NEW_BUILDING_MALIBU_2); - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8566,7 +8568,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex = SFX_BUILDING_MAL3; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_MALIBU_3; MusicManager.SetMalibuClubTrackPos(SCRIPT_SOUND_NEW_BUILDING_MALIBU_3); - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8579,7 +8581,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex = SFX_BUILDING_STR1; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_STRIP_1; MusicManager.SetStripClubTrackPos(SCRIPT_SOUND_NEW_BUILDING_STRIP_1); - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8592,7 +8594,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex = SFX_BUILDING_STR2; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_STRIP_2; MusicManager.SetStripClubTrackPos(SCRIPT_SOUND_NEW_BUILDING_STRIP_2); - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8605,7 +8607,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex = SFX_BUILDING_STR3; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_STRIP_3; MusicManager.SetStripClubTrackPos(SCRIPT_SOUND_NEW_BUILDING_STRIP_3); - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8616,7 +8618,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) case SCRIPT_SOUND_NEW_BUILDING_CHURCH: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_CHURCH; m_sQueueSample.m_nBankIndex = SFX_BANK_BUILDING_CHURCH; - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; emittingVolume = 127; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -8626,7 +8628,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) break; case SCRIPT_SOUND_NEW_WATERFALL: emittingVolume = 30; - m_sQueueSample.m_fSoundIntensity = 80.0f; + m_sQueueSample.m_SoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = SFX_BOAT_WATER_LOOP; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = 20812; @@ -8639,9 +8641,9 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) } distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); - if(distSquared < SQR(m_sQueueSample.m_fSoundIntensity)) { + if(distSquared < SQR(m_sQueueSample.m_SoundIntensity)) { m_sQueueSample.m_fDistance = Sqrt(distSquared); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = 0; m_sQueueSample.m_bIs2D = FALSE; @@ -8668,21 +8670,23 @@ cAudioManager::ProcessWeather(int32 id) static uint8 iSound = 0; - if (m_asAudioEntities[id].m_AudioEvents != 0 && m_asAudioEntities[id].m_awAudioEvent[0] == SOUND_LIGHTNING) { - if (m_asAudioEntities[id].m_afVolume[0] >= 10.f) { - m_sQueueSample.m_nSampleIndex = SFX_EXPLOSION_1; - m_sQueueSample.m_nBankIndex = SFX_BANK_GENERIC_EXTRA; - m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 4000; - vol = (m_asAudioEntities[id].m_afVolume[0] - 10.0f) + 40; - } else { + if (m_asAudioEntities[id].m_AudioEvents > 0 && m_asAudioEntities[id].m_awAudioEvent[0] == SOUND_LIGHTNING) { + if (m_asAudioEntities[id].m_afVolume[0] < 10.0f) { m_sQueueSample.m_nSampleIndex = SFX_EXPLOSION_2; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 4000; - vol = (m_asAudioEntities[id].m_afVolume[0]) + 35; + vol = (m_asAudioEntities[id].m_afVolume[0] * 10.0f * 0.1f) + 35; + vol += 35; + } else { + m_sQueueSample.m_nSampleIndex = SFX_EXPLOSION_1; + m_sQueueSample.m_nBankIndex = SFX_BANK_GENERIC_EXTRA; + m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 4000; + vol = ((m_asAudioEntities[id].m_afVolume[0] - 10.0f) * 10.0f * 0.1f); + vol += 40; } m_sQueueSample.m_nVolume = vol; if (TheCamera.SoundDistUp < 20.0f) - m_sQueueSample.m_nVolume /= 2; + m_sQueueSample.m_nVolume <<= 1; if (iSound == 4) iSound = 0; m_sQueueSample.m_nCounter = iSound++; @@ -9029,7 +9033,7 @@ cAudioManager::ProcessProjectiles() switch (CProjectileInfo::GetProjectileInfo(i)->m_eWeaponType) { case WEAPONTYPE_TEARGAS: emittingVol = 80; - m_sQueueSample.m_fSoundIntensity = 40.0f; + m_sQueueSample.m_SoundIntensity = 40.0f; m_sQueueSample.m_nSampleIndex = SFX_PALM_TREE_LO; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = 13879; @@ -9037,7 +9041,7 @@ cAudioManager::ProcessProjectiles() break; case WEAPONTYPE_MOLOTOV: emittingVol = 50; - m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.m_SoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = SFX_PED_ON_FIRE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = 32 * SampleManager.GetSampleBaseFrequency(SFX_PED_ON_FIRE) / 25; @@ -9045,7 +9049,7 @@ cAudioManager::ProcessProjectiles() break; case WEAPONTYPE_ROCKET: emittingVol = 127; - m_sQueueSample.m_fSoundIntensity = 90.0f; + m_sQueueSample.m_SoundIntensity = 90.0f; m_sQueueSample.m_nSampleIndex = SFX_ROCKET_FLY; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_ROCKET_FLY); @@ -9058,9 +9062,9 @@ cAudioManager::ProcessProjectiles() m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_vecPos = CProjectileInfo::ms_apProjectile[i]->GetPosition(); distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); - if (distSquared < SQR(m_sQueueSample.m_fSoundIntensity)) { + if (distSquared < SQR(m_sQueueSample.m_SoundIntensity)) { m_sQueueSample.m_fDistance = Sqrt(distSquared); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = i; m_sQueueSample.m_bIs2D = FALSE; @@ -9100,7 +9104,7 @@ cAudioManager::ProcessEscalators() m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_nCounter = i; m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; @@ -9145,7 +9149,7 @@ cAudioManager::ProcessExtraSounds() SET_EMITTING_VOLUME(EMITTING_VOLUME); SET_LOOP_OFFSETS(SFX_ARCADE) m_sQueueSample.m_bReverbFlag = TRUE; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bRequireReflection = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; AddSampleToRequestedQueue(); @@ -9225,7 +9229,7 @@ cAudioManager::ProcessGarages() SET_EMITTING_VOLUME(90); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); @@ -9255,7 +9259,7 @@ cAudioManager::ProcessGarages() m_sQueueSample.m_nReleasingVolumeModificator = 4; SET_EMITTING_VOLUME(60); m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_bReleasingSoundFlag = TRUE; @@ -9299,7 +9303,7 @@ cAudioManager::ProcessFireHydrant() m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) - m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; + m_sQueueSample.m_SoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_bRequireReflection = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; @@ -9358,7 +9362,7 @@ cAudioManager::ProcessBridgeWarning() SET_EMITTING_VOLUME(100); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = 450.0f; + m_sQueueSample.m_SoundIntensity = 450.0f; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 8; m_sQueueSample.m_bReverbFlag = FALSE; @@ -9384,7 +9388,7 @@ cAudioManager::ProcessBridgeMotor() SET_EMITTING_VOLUME(MAX_VOLUME); SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = bridgeIntensity; + m_sQueueSample.m_SoundIntensity = bridgeIntensity; m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_bReverbFlag = FALSE; @@ -9418,7 +9422,7 @@ cAudioManager::ProcessBridgeOneShots() SET_EMITTING_VOLUME(MAX_VOLUME); RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_fSoundIntensity = bridgeIntensity; + m_sQueueSample.m_SoundIntensity = bridgeIntensity; m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_bReverbFlag = FALSE; m_sQueueSample.m_bRequireReflection = FALSE; diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 8e6ef4ff..92569f03 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -687,7 +687,6 @@ cAudioManager::AddDetailsToRequestedOrderList(uint8 sample) m_abSampleQueueIndexTable[m_nActiveSampleQueue][i] = sample; } -#ifdef GTA_PC void cAudioManager::AddReflectionsToRequestedQueue() { @@ -709,7 +708,7 @@ cAudioManager::AddReflectionsToRequestedQueue() } else { emittingVolume = (9 * m_sQueueSample.m_nVolume) / 16; } - m_sQueueSample.m_fSoundIntensity /= 2.f; + m_sQueueSample.m_SoundIntensity /= 2.f; int halfOldFreq = oldFreq >> 1; @@ -718,12 +717,12 @@ cAudioManager::AddReflectionsToRequestedQueue() m_afReflectionsDistances[i] = (m_anRandomTable[i % 4] % 3) * 100.f / 8.f; reflectionDistance = m_afReflectionsDistances[i]; - if (reflectionDistance > 0.0f && reflectionDistance < 100.f && reflectionDistance < m_sQueueSample.m_fSoundIntensity) { + if (reflectionDistance > 0.0f && reflectionDistance < 100.f && reflectionDistance < m_sQueueSample.m_SoundIntensity) { m_sQueueSample.m_nLoopsRemaining = CTimer::GetIsSlowMotionActive() ? (reflectionDistance * 800.f / 1029.f) : (reflectionDistance * 500.f / 1029.f); if (m_sQueueSample.m_nLoopsRemaining > 3) { m_sQueueSample.m_fDistance = m_afReflectionsDistances[i]; SET_EMITTING_VOLUME(emittingVolume); - m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); + m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_SoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume > emittingVolume / 16) { m_sQueueSample.m_nCounter = oldCounter + (i + 1) * 256; @@ -752,43 +751,44 @@ cAudioManager::AddReflectionsToRequestedQueue() void cAudioManager::UpdateReflections() { - CVector camPos = TheCamera.GetPosition(); + CVector camPos; CColPoint colpoint; CEntity *ent; if (m_FrameCounter % 8 == 0) { + camPos = TheCamera.GetPosition(); m_avecReflectionsPos[0] = camPos; m_avecReflectionsPos[0].y += 100.f; if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[0], colpoint, ent, true, false, false, true, false, true, true)) m_afReflectionsDistances[0] = Distance(camPos, colpoint.point); else m_afReflectionsDistances[0] = 100.0f; - } else if ((m_FrameCounter + 1) % 8 == 0) { + camPos = TheCamera.GetPosition(); m_avecReflectionsPos[1] = camPos; m_avecReflectionsPos[1].y -= 100.0f; if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[1], colpoint, ent, true, false, false, true, false, true, true)) m_afReflectionsDistances[1] = Distance(camPos, colpoint.point); else m_afReflectionsDistances[1] = 100.0f; - } else if ((m_FrameCounter + 2) % 8 == 0) { + camPos = TheCamera.GetPosition(); m_avecReflectionsPos[2] = camPos; m_avecReflectionsPos[2].x -= 100.0f; if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[2], colpoint, ent, true, false, false, true, false, true, true)) m_afReflectionsDistances[2] = Distance(camPos, colpoint.point); else m_afReflectionsDistances[2] = 100.0f; - } else if ((m_FrameCounter + 3) % 8 == 0) { + camPos = TheCamera.GetPosition(); m_avecReflectionsPos[3] = camPos; m_avecReflectionsPos[3].x += 100.0f; if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[3], colpoint, ent, true, false, false, true, false, true, true)) m_afReflectionsDistances[3] = Distance(camPos, colpoint.point); else m_afReflectionsDistances[3] = 100.0f; - } else if ((m_FrameCounter + 4) % 8 == 0) { + camPos = TheCamera.GetPosition(); camPos.y += 1.0f; m_avecReflectionsPos[4] = camPos; m_avecReflectionsPos[4].z += 100.0f; @@ -796,8 +796,8 @@ cAudioManager::UpdateReflections() m_afReflectionsDistances[4] = colpoint.point.z - camPos.z; else m_afReflectionsDistances[4] = 100.0f; - } else if ((m_FrameCounter + 5) % 8 == 0) { + camPos = TheCamera.GetPosition(); camPos.y -= 1.0f; m_avecReflectionsPos[5] = camPos; m_avecReflectionsPos[5].z += 100.0f; @@ -805,8 +805,8 @@ cAudioManager::UpdateReflections() m_afReflectionsDistances[5] = colpoint.point.z - camPos.z; else m_afReflectionsDistances[5] = 100.0f; - } else if ((m_FrameCounter + 6) % 8 == 0) { + camPos = TheCamera.GetPosition(); camPos.x -= 1.0f; m_avecReflectionsPos[6] = camPos; m_avecReflectionsPos[6].z += 100.0f; @@ -814,8 +814,8 @@ cAudioManager::UpdateReflections() m_afReflectionsDistances[6] = colpoint.point.z - camPos.z; else m_afReflectionsDistances[6] = 100.0f; - } else if ((m_FrameCounter + 7) % 8 == 0) { + camPos = TheCamera.GetPosition(); camPos.x += 1.0f; m_avecReflectionsPos[7] = camPos; m_avecReflectionsPos[7].z += 100.0f; @@ -825,7 +825,6 @@ cAudioManager::UpdateReflections() m_afReflectionsDistances[7] = 100.0f; } } -#endif // GTA_PC void cAudioManager::AddReleasingSounds() @@ -853,7 +852,7 @@ cAudioManager::AddReleasingSounds() } } if (!toProcess[i]) { - if (sample.m_nCounter <= 255 || !sample.m_nLoopsRemaining) { + if (sample.m_nCounter <= 255 || sample.m_nLoopsRemaining == 0) { if (sample.m_nReleasingVolumeDivider == 0) continue; if (sample.m_nLoopCount == 0) { @@ -995,7 +994,7 @@ cAudioManager::ProcessActiveQueues() TranslateEntity(&sample.m_vecPos, &position); #ifdef EXTERNAL_3D_SOUND SampleManager.SetChannel3DPosition(j, position.x, position.y, position.z); - SampleManager.SetChannel3DDistances(j, sample.m_fSoundIntensity, 0.25f * sample.m_fSoundIntensity); + SampleManager.SetChannel3DDistances(j, sample.m_SoundIntensity, 0.25f * sample.m_SoundIntensity); #else sample.m_nOffset = ComputePan(sample.m_fDistance, &position); SampleManager.SetChannelPan(j, sample.m_nOffset); @@ -1084,14 +1083,14 @@ cAudioManager::ProcessActiveQueues() usedX = x; usedY = 0.0f; usedZ = 0.0f; - m_asActiveSamples[k].m_fSoundIntensity = 100000.0f; + m_asActiveSamples[k].m_SoundIntensity = 100000.0f; } else { usedX = position.x; usedY = position.y; usedZ = position.z; } SampleManager.SetChannel3DPosition(k, usedX, usedY, usedZ); - SampleManager.SetChannel3DDistances(k, m_asActiveSamples[k].m_fSoundIntensity, 0.25f * m_asActiveSamples[k].m_fSoundIntensity); + SampleManager.SetChannel3DDistances(k, m_asActiveSamples[k].m_SoundIntensity, 0.25f * m_asActiveSamples[k].m_SoundIntensity); #endif SampleManager.StartChannel(k); } @@ -1140,7 +1139,7 @@ cAudioManager::ClearActiveSamples() m_asActiveSamples[i].m_nLoopEnd = -1; #endif m_asActiveSamples[i].m_fSpeedMultiplier = 0.0f; - m_asActiveSamples[i].m_fSoundIntensity = 200.0f; + m_asActiveSamples[i].m_SoundIntensity = 200.0f; m_asActiveSamples[i].m_nOffset = 63; m_asActiveSamples[i].m_bReleasingSoundFlag = FALSE; m_asActiveSamples[i].m_nCalculatedVolume = 0; @@ -1176,7 +1175,7 @@ cAudioManager::AdjustSamplesVolume() tSound *pSample = &m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i]]; if (!pSample->m_bIs2D) - pSample->m_nEmittingVolume = ComputeEmittingVolume(pSample->m_nEmittingVolume, pSample->m_fSoundIntensity, pSample->m_fDistance); + pSample->m_nEmittingVolume = ComputeEmittingVolume(pSample->m_nEmittingVolume, pSample->m_SoundIntensity, pSample->m_fDistance); } } diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 526df1f8..383644e0 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -27,10 +27,12 @@ public: uint8 m_nEmittingVolume; #endif float m_fSpeedMultiplier; - float m_fSoundIntensity; + float m_SoundIntensity; bool8 m_bReleasingSoundFlag; CVector m_vecPos; - bool8 m_bReverbFlag; +#ifndef GTA_PS2 + bool8 m_bReverbFlag; // TODO: ifdef all the occurrences +#endif uint8 m_nLoopsRemaining; bool8 m_bRequireReflection; // Used for oneshots uint8 m_nOffset; @@ -219,10 +221,8 @@ public: tAudioEntity m_asAudioEntities[NUM_AUDIOENTITIES]; int32 m_anAudioEntityIndices[NUM_AUDIOENTITIES]; int32 m_nAudioEntitiesTotal; -#ifdef GTA_PC CVector m_avecReflectionsPos[NUM_AUDIO_REFLECTIONS]; float m_afReflectionsDistances[NUM_AUDIO_REFLECTIONS]; -#endif cAudioScriptObjectManager m_sAudioScriptObjectManager; // miami @@ -301,10 +301,8 @@ public: void InterrogateAudioEntities(); // inlined void AddSampleToRequestedQueue(); void AddDetailsToRequestedOrderList(uint8 sample); // inlined in vc -#ifdef GTA_PC void AddReflectionsToRequestedQueue(); void UpdateReflections(); -#endif void AddReleasingSounds(); void ProcessActiveQueues(); void ClearRequestedQueue(); // inlined in vc @@ -341,7 +339,7 @@ public: void ProcessVehicleFlatTyre(cVehicleParams ¶ms); bool8 ProcessVehicleRoadNoise(cVehicleParams ¶ms); bool8 ProcessWetRoadNoise(cVehicleParams ¶ms); - void ProcessVehicleEngine(cVehicleParams ¶ms); + bool8 ProcessVehicleEngine(cVehicleParams ¶ms); void UpdateGasPedalAudio(CVehicle *veh, int vehType); void PlayerJustGotInCar(); void PlayerJustLeftCar(); From d6fbf9fbe775ea838e8e8d8d607b88562f1c695b Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 16 Aug 2021 10:02:29 +0300 Subject: [PATCH 16/16] PS2 audio reflections --- src/audio/AudioManager.cpp | 44 ++++++++++++++++++++++++++++++++++++++ src/audio/AudioManager.h | 19 ++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 92569f03..686b9206 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -755,6 +755,49 @@ cAudioManager::UpdateReflections() CColPoint colpoint; CEntity *ent; +#if GTA_VERSION < GTAVC_PC_10 + if (m_FrameCounter % 8 == 0) { + camPos = TheCamera.GetPosition(); + m_avecReflectionsPos[0] = camPos; + m_avecReflectionsPos[0].y += 50.0f; + if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[0], colpoint, ent, true, false, false, true, false, true, true)) + m_afReflectionsDistances[0] = Distance(camPos, colpoint.point); + else + m_afReflectionsDistances[0] = 50.0f; + } else if ((m_FrameCounter + 1) % 8 == 0) { + camPos = TheCamera.GetPosition(); + m_avecReflectionsPos[1] = camPos; + m_avecReflectionsPos[1].y -= 50.0f; + if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[1], colpoint, ent, true, false, false, true, false, true, true)) + m_afReflectionsDistances[1] = Distance(camPos, colpoint.point); + else + m_afReflectionsDistances[1] = 50.0f; + } else if ((m_FrameCounter + 2) % 8 == 0) { + camPos = TheCamera.GetPosition(); + m_avecReflectionsPos[2] = camPos; + m_avecReflectionsPos[2].x -= 50.0f; + if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[2], colpoint, ent, true, false, false, true, false, true, true)) + m_afReflectionsDistances[2] = Distance(camPos, colpoint.point); + else + m_afReflectionsDistances[2] = 50.0f; + } else if ((m_FrameCounter + 3) % 8 == 0) { + camPos = TheCamera.GetPosition(); + m_avecReflectionsPos[3] = camPos; + m_avecReflectionsPos[3].x += 50.0f; + if (CWorld::ProcessLineOfSight(camPos, m_avecReflectionsPos[3], colpoint, ent, true, false, false, true, false, true, true)) + m_afReflectionsDistances[3] = Distance(camPos, colpoint.point); + else + m_afReflectionsDistances[3] = 50.0f; + } else if ((m_FrameCounter + 4) % 8 == 0) { + camPos = TheCamera.GetPosition(); + m_avecReflectionsPos[4] = camPos; + m_avecReflectionsPos[4].z += 50.0f; + if (CWorld::ProcessVerticalLine(camPos, m_avecReflectionsPos[4].z, colpoint, ent, true, false, false, false, true, false, nil)) + m_afReflectionsDistances[4] = colpoint.point.z - camPos.z; + else + m_afReflectionsDistances[4] = 50.0f; + } +#else if (m_FrameCounter % 8 == 0) { camPos = TheCamera.GetPosition(); m_avecReflectionsPos[0] = camPos; @@ -824,6 +867,7 @@ cAudioManager::UpdateReflections() else m_afReflectionsDistances[7] = 100.0f; } +#endif } void diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 383644e0..c52eef8f 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -184,6 +184,24 @@ public: VALIDATE_SIZE(cVehicleParams, 0x1C); +#if GTA_VERSION < GTAVC_PC_10 +enum { + /* + REFLECTION_YMAX = 0, top + REFLECTION_YMIN = 1, bottom + REFLECTION_XMIN = 2, left + REFLECTION_XMAX = 3, right + REFLECTION_ZMAX = 4, + */ + + REFLECTION_TOP = 0, + REFLECTION_BOTTOM, + REFLECTION_LEFT, + REFLECTION_RIGHT, + REFLECTION_UP, + MAX_REFLECTIONS, +}; +#else enum { REFLECTION_NORTH = 0, REFLECTION_SOUTH, @@ -195,6 +213,7 @@ enum { REFLECTION_CEIL_EAST, MAX_REFLECTIONS, }; +#endif enum PLAY_STATUS { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED }; enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED };