// // script/commands_camera.cpp // // Copyright (C) 1999-2011 Rockstar Games. All Rights Reserved. // #include "script/wrapper.h" #include "fwanimation/directorcomponentsyncedscene.h" #include "animation/debug/AnimViewer.h" #include "camera/CamInterface.h" #include "camera/cinematic/CinematicDirector.h" #include "camera/cinematic/camera/mounted/CinematicMountedCamera.h" #include "camera/cinematic/context/CinematicInVehicleContext.h" #include "camera/cinematic/context/CinematicInVehicleOverriddenFirstPersonContext.h" #include "camera/cinematic/context/CinematicScriptContext.h" #include "camera/debug/DebugDirector.h" #include "camera/cutscene/CutsceneDirector.h" #include "camera/debug/FreeCamera.h" #include "camera/gameplay/GameplayDirector.h" #include "camera/gameplay/aim/ThirdPersonAimCamera.h" #include "camera/gameplay/aim/FirstPersonShooterCamera.h" #include "camera/gameplay/follow/FollowPedCamera.h" #include "camera/helpers/ControlHelper.h" #include "camera/helpers/FrameInterpolator.h" #include "camera/helpers/FrameShaker.h" #include "camera/helpers/AnimatedFrameShaker.h" #include "camera/replay/ReplayDirector.h" #include "camera/scripted/BaseSplineCamera.h" #include "camera/scripted/CustomTimedSplineCamera.h" #include "camera/scripted/ScriptDirector.h" #include "camera/scripted/ScriptedCamera.h" #include "camera/scripted/ScriptedFlyCamera.h" #include "camera/syncedscene/SyncedSceneDirector.h" #include "camera/system/CameraManager.h" #include "camera/viewports/ViewportManager.h" #include "frontend/PauseMenu.h" #include "peds/ped.h" #include "peds/pedpopulation.h" #include "renderer/PostProcessFX.h" #include "script/script_channel.h" #include "script/Handlers/GameScriptResources.h" #include "script/script_helper.h" #include "task/Animation/TaskScriptedAnimation.h" #include "vehicles/vehiclepopulation.h" #include "control/replay/replay.h" CAMERA_OPTIMISATIONS() const s32 INVALID_CAM_INDEX = -1; #if __BANK #define REGISTER_CAMERA_SCRIPT_COMMAND(FORMAT, ...) camManager::DebugRegisterScriptCommand(__FUNCTION__, FORMAT, __VA_ARGS__) #define REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS() camManager::DebugRegisterScriptCommand(__FUNCTION__, "") #else #define REGISTER_CAMERA_SCRIPT_COMMAND(FORMAT, ...) #define REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS() #endif //SCRIPT_DEBUGGING namespace camera_commands { camBaseCamera* GetCameraFromIndex(int cameraIndex, const char* ASSERT_ONLY(commandName)) { camBaseCamera* camera = camBaseCamera::GetCameraAtPoolIndex(cameraIndex); SCRIPT_ASSERT_TWO_STRINGS(camera, commandName, "- Camera does not exist"); return camera; } void CommandRenderScriptCams(bool bSetActive, bool bInterp, int iDuration, bool bShouldLockInterpolationSourceFrame, bool bShouldApplyAcrossAllThreads, int RenderOptions) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); scriptcameraDebugf3("FC: %d - CommandRenderScriptCams( bSetActive(%d), bInterp (%d), iDuration (%d), bShouldLockInterpolationSourceFrame(%d), bShouldApplyAcrossAllThreads(%d), %s )", fwTimer::GetFrameCount(), bSetActive, bInterp, iDuration, bShouldLockInterpolationSourceFrame, bShouldApplyAcrossAllThreads, CTheScripts::GetCurrentScriptNameAndProgramCounter()); const u32 interpolationDuration = bInterp ? static_cast(Max(iDuration, 0)) : 0; //These options will get reset when the update runs camInterface::GetScriptDirector().SetRenderOptions(RenderOptions); if(bSetActive) { camInterface::GetScriptDirector().Render(interpolationDuration, bShouldLockInterpolationSourceFrame); } else if(bShouldApplyAcrossAllThreads) { //NOTE: This should only be exercised by scripts that absolutely require such global behaviour, as this can result in conflicts between //concurrent script threads. camInterface::GetScriptDirector().ForceStopRendering(false, interpolationDuration, bShouldLockInterpolationSourceFrame); } else { camInterface::GetScriptDirector().StopRendering(interpolationDuration, bShouldLockInterpolationSourceFrame); } } void CommandStopRenderingScriptCamsUsingCatchUp(bool bShouldApplyAcrossAllThreads, float distanceToBlend, int blendType, int RenderOptions) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); //These options will get reset when the update runs camInterface::GetScriptDirector().SetRenderOptions(RenderOptions); scriptcameraDebugf3("FC: %d - CommandStopRenderingScriptCamsUsingCatchUp( bShouldApplyAcrossAllThreads(%d), distanceToBlend (%f), blendType (%d) )", fwTimer::GetFrameCount(), bShouldApplyAcrossAllThreads, distanceToBlend, blendType); if(bShouldApplyAcrossAllThreads) { //NOTE: This should only be exercised by scripts that absolutely require such global behaviour, // as this can result in conflicts between concurrent script threads. camInterface::GetScriptDirector().ForceStopRendering(true, 0, false, distanceToBlend, blendType); } else { camInterface::GetScriptDirector().StopRendering(true, 0, false, distanceToBlend, blendType); } } int CommandCreateCam(const char* CameraName, bool bActivate) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); CScriptResource_Camera camera(CameraName, bActivate); // cameras are referenced using their real pool index, this is inconsistent with the other resources. Everything should use the resource id. return CTheScripts::GetCurrentGtaScriptHandler()->RegisterScriptResourceAndGetRef(camera); } int CommandCreateCameraFromHash(int CameraHash, bool bActivate) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); CScriptResource_Camera camera(CameraHash, bActivate); // cameras are referenced using their real pool index, this is inconsistent with the other resources. Everything should use the resource id. return CTheScripts::GetCurrentGtaScriptHandler()->RegisterScriptResourceAndGetRef(camera); } int CommandCreateCameraWithParams(int CameraHash, const scrVector &scrCamPos, const scrVector &scrCamRot, float fCamFov, bool bActivate, int RotOrder) //add pos, rot and fov { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); int CameraIndex = CommandCreateCameraFromHash(CameraHash, bActivate); Vector3 vPos (scrCamPos); Vector3 vRot (scrCamRot); camInterface::GetScriptDirector().SetCameraFrameParameters(CameraIndex, vPos, vRot * DtoR, fCamFov, 0, camFrameInterpolator::LINEAR, camFrameInterpolator::LINEAR, RotOrder); // cameras are referenced using their real pool index, this is inconsistent with the other resources. Everything should use the resource id. return CameraIndex; } int CommandCreateCamWithParams(const char* CameraName, const scrVector &scrCamPos, const scrVector &scrCamRot, float fCamFov, bool bActivate, int RotOrder) //add pos, rot and fov { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); int CameraIndex = CommandCreateCam(CameraName, bActivate); Vector3 vPos (scrCamPos); Vector3 vRot (scrCamRot); camInterface::GetScriptDirector().SetCameraFrameParameters(CameraIndex, vPos, vRot * DtoR, fCamFov, 0, camFrameInterpolator::LINEAR, camFrameInterpolator::LINEAR, RotOrder); // cameras are referenced using their real pool index, this is inconsistent with the other resources. Everything should use the resource id. return CameraIndex; } void CommandDestroyCam(int CameraIndex, bool bShouldApplyAcrossAllThreads) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); // cameras are referenced using their real pool index, this is inconsistent with the other resources. Everything should use the resource id. if(bShouldApplyAcrossAllThreads) { //Destroy this cameras, no matter which script thread owns it. //NOTE: This should only be exercised by scripts that absolutely require such global behaviour, as this can result in conflicts between //concurrent script threads. CTheScripts::GetScriptHandlerMgr().RemoveScriptResource(CGameScriptResource::SCRIPT_RESOURCE_CAMERA, CameraIndex); } else { //Only destroy the camera if it's associated with the current script thread. CTheScripts::GetCurrentGtaScriptHandler()->RemoveScriptResource(CGameScriptResource::SCRIPT_RESOURCE_CAMERA, CameraIndex); } } void CommandDestroyAllCams(bool bShouldApplyAcrossAllThreads) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(bShouldApplyAcrossAllThreads) { //Destroy all script-controlled cameras, no matter which script thread owns them. //NOTE: This should only be exercised by scripts that absolutely require such global behaviour, as this can result in conflicts between //concurrent script threads. CTheScripts::GetScriptHandlerMgr().RemoveAllScriptResourcesOfType(CGameScriptResource::SCRIPT_RESOURCE_CAMERA); } else { //Only destroy the cameras associated with the current script thread. CTheScripts::GetCurrentGtaScriptHandler()->RemoveAllScriptResourcesOfType(CGameScriptResource::SCRIPT_RESOURCE_CAMERA); } } bool CommandDoesCamExist(int CameraIndex) { camBaseCamera* pCamera = camBaseCamera::GetCameraAtPoolIndex(CameraIndex); return (pCamera!=NULL); } void CommandSetCamActive(int CameraIndex, bool bActiveState) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_ACTIVE"); if(pCamera) { if (SCRIPT_VERIFY (camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_ACTIVE - Camera is not a script controllable ")) { if(bActiveState) { camInterface::GetScriptDirector().ActivateCamera(CameraIndex); //Inform the script director that a camera it may own is being activated. } else { camInterface::GetScriptDirector().DeactivateCamera(CameraIndex); //Inform the script director that a camera it may own is being deactivated. } } } } bool CommandIsCamActive(int CameraIndex) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "IS_CAM_ACTIVE"); if (pCamera) { if(camInterface::GetScriptDirector().IsCameraActive(CameraIndex)) { return true; } #if __BANK else if (pCamera->GetIsClassId(camFreeCamera::GetStaticClassId()) && camInterface::GetDebugDirector().IsFreeCamActive()) { return true; } #endif // __BANK } return false; } bool CommandIsCamRendering (int CameraIndex) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "IS_CAM_RENDERING"); if(pCamera) { if (SCRIPT_VERIFY (camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"IS_CAM_RENDERING - Camera is not a script controllable " )) { const bool isRendering = camInterface::IsDominantRenderedCamera(*pCamera); return isRendering; } } return false; } int CommandGetRenderingCam () { int iCamIndex = INVALID_CAM_INDEX; const camBaseCamera* pCamera = camInterface::GetDominantRenderedCamera(); if (pCamera) { int tempCamIndex = pCamera->GetPoolIndex(); if (camInterface::GetScriptDirector().IsCameraScriptControllable(tempCamIndex)) { iCamIndex = tempCamIndex; } } return iCamIndex; } scrVector CommandGetCamCoord(int CameraIndex) { Vector3 vPos(VEC3_ZERO); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_COORD"); if(pCamera) { vPos = pCamera->GetFrame().GetPosition(); } return vPos; } scrVector CommandGetCamRotation(int CameraIndex, int RotOrder) { Vector3 vRot(VEC3_ZERO); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_ROT"); if(pCamera) { const Matrix34& worldMatrix = pCamera->GetFrame().GetWorldMatrix(); vRot = CScriptEulers::MatrixToEulers(worldMatrix, static_cast(RotOrder)); vRot *= RtoD; } return vRot; } float CommandGetCamFov(int CameraIndex) { float fov = 0.0f; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_FOV"); if(pCamera) { fov = pCamera->GetFrame().GetFov(); } return fov; } float CommandGetCamNearClip(int CameraIndex) { float nearClip = 0.0f; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_NEAR_CLIP"); if(pCamera) { nearClip = pCamera->GetFrame().GetNearClip(); } return nearClip; } float CommandGetCamFarClip(int CameraIndex) { float farClip = 0.0f; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_FAR_CLIP"); if(pCamera) { farClip = pCamera->GetFrame().GetFarClip(); } return farClip; } float CommandGetCamNearDof(int CameraIndex) { float nearDof = 0.0f; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_NEAR_DOF"); if(pCamera) { nearDof = pCamera->GetFrame().GetNearInFocusDofPlane(); } return nearDof; } float CommandGetCamFarDof(int CameraIndex) { float farDof = 0.0f; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_FAR_DOF"); if(pCamera) { farDof = pCamera->GetFrame().GetFarInFocusDofPlane(); } return farDof; } float CommandGetCamDofStrength(int CameraIndex) { float dofStrength = 0.0f; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_DOF_STRENGTH"); if(pCamera) { dofStrength = pCamera->GetFrame().GetDofStrength(); } return dofStrength; } void CommandGetCamDofPlanes(int CameraIndex, float& nearOutOfFocusPlane, float& nearInFocusPlane, float& farInFocusPlane, float& farOutOfFocusPlane) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_DOF_PLANES"); if(pCamera) { Vector4 dofPlanes; pCamera->GetFrame().ComputeDofPlanes(dofPlanes); nearOutOfFocusPlane = dofPlanes[camFrame::NEAR_OUT_OF_FOCUS_DOF_PLANE]; nearInFocusPlane = dofPlanes[camFrame::NEAR_IN_FOCUS_DOF_PLANE]; farInFocusPlane = dofPlanes[camFrame::FAR_IN_FOCUS_DOF_PLANE]; farOutOfFocusPlane = dofPlanes[camFrame::FAR_OUT_OF_FOCUS_DOF_PLANE]; } else { nearOutOfFocusPlane = nearInFocusPlane = farInFocusPlane = farOutOfFocusPlane = 0.0f; } } bool CommandGetCamUseShallowDofMode(int CameraIndex) { bool shouldUseShallowDof = false; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_USE_SHALLOW_DOF_MODE"); if(pCamera) { shouldUseShallowDof = pCamera->GetFrame().GetFlags().IsFlagSet(camFrame::Flag_ShouldUseShallowDof); } return shouldUseShallowDof; } float CommandGetCamMotionBlurStrength(int CameraIndex) { float motionBlurStrength = 0.0f; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_MOTION_BLUR_STRENGTH"); if(pCamera) { motionBlurStrength = pCamera->GetFrame().GetMotionBlurStrength(); } return motionBlurStrength; } void CommandSetCamParams (int CameraIndex, const scrVector &scrCamPos, const scrVector &scrCamRot, float fCamFov, int duration, int graphTypePos, int graphTypeRot, int RotOrder) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vPos (scrCamPos); Vector3 vRot (scrCamRot); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_PARAMS"); if(pCamera) { if (SCRIPT_VERIFY (camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_PARAMS - Camera is not a script controllable " )) { camInterface::GetScriptDirector().SetCameraFrameParameters(CameraIndex, vPos, vRot * DtoR, fCamFov, duration, graphTypePos, graphTypeRot, RotOrder); } } } void CommandSetCamCoord(int CameraIndex, const scrVector &scrVecNewCoors) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vPos (scrVecNewCoors); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_COORD"); if(pCamera) { if (SCRIPT_VERIFY (camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_COORD - Camera is not a script controllable " )) { //Terminate any existing interpolation, as the script wants to cut to the new position. pCamera->StopInterpolating(); camFrame& cameraFrame = pCamera->GetFrameNonConst(); cameraFrame.SetPosition(vPos); //The camera position is being modified, so we must report a cut. It is unlikely that a script would manually animate a camera //using this interface. cameraFrame.GetFlags().SetFlag(camFrame::Flag_HasCutPosition); } } } void CommandSetCamRotation(int CameraIndex, const scrVector &scrVecNewRot, int RotOrder) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_ROT"); if(pCamera) { if (SCRIPT_VERIFY (camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_ROT - Camera is not a script controllable " )) { Vector3 vRot(scrVecNewRot); Matrix34 worldMatrix; CScriptEulers::MatrixFromEulers(worldMatrix, vRot * DtoR, static_cast(RotOrder)); //Terminate any existing interpolation, as the script wants to cut to the new rotation. pCamera->StopInterpolating(); camFrame& cameraFrame = pCamera->GetFrameNonConst(); cameraFrame.SetWorldMatrix(worldMatrix); //The camera orientation is being modified, so we must report a cut. It is unlikely that a script would manually animate a camera //using this interface. cameraFrame.GetFlags().SetFlag(camFrame::Flag_HasCutOrientation); } } } void CommandSetCamFov(int CameraIndex, float fov) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_FOV"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_FOV - Camera is not a script controllable ")) { //Terminate any existing interpolation, as the script wants to cut to the new FOV. pCamera->StopInterpolating(); pCamera->GetFrameNonConst().SetFov(fov); } } } void CommandSetCamNearClip(int CameraIndex, float nearClip) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_NEAR_CLIP"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_NEAR_CLIP - Camera is not a script controllable ")) { cameraDebugf3("%u SET_CAM_NEAR_CLIP %i %.3f %s", fwTimer::GetFrameCount(), CameraIndex, nearClip, CTheScripts::GetCurrentScriptNameAndProgramCounter()); pCamera->GetFrameNonConst().SetNearClip(nearClip); } } } void CommandSetCamFarClip(int CameraIndex, float farClip) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_FAR_CLIP"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_FAR_CLIP - Camera is not a script controllable ")) { pCamera->GetFrameNonConst().SetFarClip(farClip); if(pCamera->GetIsClassId(camAnimatedCamera::GetStaticClassId())) { camAnimatedCamera* pAnimatedCamera = static_cast(pCamera); pAnimatedCamera->SetScriptShouldOverrideFarClip(true); } } } } void CommandForceCamFarClip(int CameraIndex, float farClip) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "FORCE_CAM_FAR_CLIP"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "FORCE_CAM_FAR_CLIP - Camera is not a script controllable ")) { pCamera->GetFrameNonConst().SetFarClip(farClip); if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* pScriptedCamera = static_cast(pCamera); pScriptedCamera->SetShouldOverrideFarClip(true); } else if(pCamera->GetIsClassId(camAnimatedCamera::GetStaticClassId())) { camAnimatedCamera* pAnimatedCamera = static_cast(pCamera); pAnimatedCamera->SetScriptShouldOverrideFarClip(true); } } } } void CommandSetCamMotionBlurStrength(int CameraIndex, float strength) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_MOTION_BLUR_STRENGTH"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_MOTION_BLUR_STRENGTH - Camera is not a script controllable ")) { pCamera->GetFrameNonConst().SetMotionBlurStrength(strength); } } } void CommandSetCamNearDof(int CameraIndex, float nearDof) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_NEAR_DOF"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_NEAR_DOF - Camera is not a script controllable ")) { pCamera->GetFrameNonConst().SetNearInFocusDofPlane(nearDof); } } } void CommandSetCamFarDof(int CameraIndex, float farDof) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_FAR_DOF"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_FAR_DOF - Camera is not a script controllable ")) { pCamera->GetFrameNonConst().SetFarInFocusDofPlane(farDof); } } } void CommandSetCamDofStrength(int CameraIndex, float dofStrength) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_DOF_STRENGTH"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_DOF_STRENGTH - Camera is not a script controllable ")) { pCamera->GetFrameNonConst().SetDofStrength(dofStrength); } } } void CommandSetCamDofPlanes(int CameraIndex, float nearOutOfFocusPlane, float nearInFocusPlane, float farInFocusPlane, float farOutOfFocusPlane) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_DOF_PLANES"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_DOF_PLANES - Camera is not a script controllable ")) { Vector4 dofPlanes; dofPlanes[camFrame::NEAR_OUT_OF_FOCUS_DOF_PLANE] = nearOutOfFocusPlane; dofPlanes[camFrame::NEAR_IN_FOCUS_DOF_PLANE] = nearInFocusPlane; dofPlanes[camFrame::FAR_IN_FOCUS_DOF_PLANE] = farInFocusPlane; dofPlanes[camFrame::FAR_OUT_OF_FOCUS_DOF_PLANE] = farOutOfFocusPlane; pCamera->GetFrameNonConst().SetDofPlanes(dofPlanes); } } } void CommandSetCamUseShallowDofMode(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_USE_SHALLOW_DOF_MODE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_USE_SHALLOW_DOF_MODE - Camera is not a script controllable ")) { pCamera->GetFrameNonConst().GetFlags().ChangeFlag(camFrame::Flag_ShouldUseShallowDof, state); } } } //Use the high-quality DOF effect that handles four planes. void CommandUseHiDof() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetScriptDirector().SetHighQualityDofThisUpdate(true); } void CommandUseHiDofOnSyncedSceneThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetSyncedSceneDirector().SetHighQualityDofThisUpdate(true); } void CommandSetDofOverriddenFocusDistance(int CameraIndex, float distance) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_DOF_OVERRIDDEN_FOCUS_DISTANCE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_DOF_OVERRIDDEN_FOCUS_DISTANCE - Camera is not a script controllable ")) { distance = Clamp(distance, 0.0f, 99999.0f); if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { static_cast(pCamera)->SetOverriddenDofFocusDistance(distance); } else if(pCamera->GetIsClassId(camAnimatedCamera::GetStaticClassId())) { static_cast(pCamera)->SetOverriddenDofFocusDistance(distance); } } } } void CommandSetDofOverriddenFocusDistanceBlendLevel(int CameraIndex, float blendLevel) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_DOF_OVERRIDDEN_FOCUS_DISTANCE_BLEND_LEVEL"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_DOF_OVERRIDDEN_FOCUS_DISTANCE_BLEND_LEVEL - Camera is not a script controllable ")) { blendLevel = Clamp(blendLevel, 0.0f, 1.0f); if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { static_cast(pCamera)->SetOverriddenDofFocusDistanceBlendLevel(blendLevel); } else if(pCamera->GetIsClassId(camAnimatedCamera::GetStaticClassId())) { static_cast(pCamera)->SetOverriddenDofFocusDistanceBlendLevel(blendLevel); } } } } camDepthOfFieldSettingsMetadata* GetOverriddenDepthOfFieldSettingsFromCameraIndex(int CameraIndex, const char* commandName) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = NULL; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, commandName); if(pCamera) { if(SCRIPT_VERIFY_TWO_STRINGS(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), commandName, " - Camera is not a script controllable ")) { if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { overriddenDofSettings = static_cast(pCamera)->GetOverriddenDofSettings(); } else if(pCamera->GetIsClassId(camAnimatedCamera::GetStaticClassId())) { overriddenDofSettings = static_cast(pCamera)->GetOverriddenDofSettings(); } SCRIPT_ASSERT_TWO_STRINGS(overriddenDofSettings, commandName, " - Camera has no depth of field settings to be overridden"); } } return overriddenDofSettings; } void CommandSetDofFocusDistanceGridScaling(int CameraIndex, float gridScalingX, float gridScalingY) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_FOCUS_DISTANCE_GRID_SCALING"); if(overriddenDofSettings) { gridScalingX = Clamp(gridScalingX, 0.0f, 1.0f); gridScalingY = Clamp(gridScalingY, 0.0f, 1.0f); const Vector2 gridScaling(gridScalingX, gridScalingY); overriddenDofSettings->m_FocusDistanceGridScaling.Set(gridScaling); } } void CommandSetDofSubjectMagnificationPowerFactorNearFar(int CameraIndex, float powerFactorNear, float powerFactorFar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_SUBJECT_MAGNIFICATION_POWER_FACTOR_NEAR_FAR"); if(overriddenDofSettings) { powerFactorNear = Clamp(powerFactorNear, 0.0f, 1.0f); powerFactorFar = Clamp(powerFactorFar, 0.0f, 1.0f); const Vector2 powerFactorNearFar(powerFactorNear, powerFactorFar); overriddenDofSettings->m_SubjectMagnificationPowerFactorNearFar.Set(powerFactorNearFar); } } void CommandSetDofMaxPixelDepth(int CameraIndex, float depth) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_MAX_PIXEL_DEPTH"); if(overriddenDofSettings) { overriddenDofSettings->m_MaxPixelDepth = Clamp(depth, 0.0f, 99999.0f); } } void CommandSetDofPixelDepthPowerFactor(int CameraIndex, float powerFactor) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_PIXEL_DEPTH_POWER_FACTOR"); if(overriddenDofSettings) { overriddenDofSettings->m_PixelDepthPowerFactor = Clamp(powerFactor, 0.0f, 1.0f); } } void CommandSetDofFNumberOfLens(int CameraIndex, float fNumber) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_FNUMBER_OF_LENS"); if(overriddenDofSettings) { overriddenDofSettings->m_FNumberOfLens = Clamp(fNumber, 0.5f, 256.0f); } } void CommandSetDofFocalLengthMultiplier(int CameraIndex, float multiplier) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_FOCAL_LENGTH_MULTIPLIER"); if(overriddenDofSettings) { overriddenDofSettings->m_FocalLengthMultiplier = Clamp(multiplier, 0.1f, 10.0f); } } void CommandSetDofFocusDistanceBias(int CameraIndex, float distanceBias) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_FOCUS_DISTANCE_BIAS"); if(overriddenDofSettings) { overriddenDofSettings->m_FocusDistanceBias = Clamp(distanceBias, -100.0f, 100.0f); } } void CommandSetDofMaxNearInFocusDistance(int CameraIndex, float distance) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_MAX_NEAR_IN_FOCUS_DISTANCE"); if(overriddenDofSettings) { overriddenDofSettings->m_MaxNearInFocusDistance = Clamp(distance, 0.0f, 99999.0f); } } void CommandSetDofMaxNearInFocusDistanceBlendLevel(int CameraIndex, float blendLevel) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_MAX_NEAR_IN_FOCUS_DISTANCE_BLEND_LEVEL"); if(overriddenDofSettings) { overriddenDofSettings->m_MaxNearInFocusDistanceBlendLevel = Clamp(blendLevel, 0.0f, 1.0f); } } void CommandSetDofMaxBlurRadiusAtNearInFocusLimit(int CameraIndex, float radius) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_MAX_BLUR_RADIUS_AT_NEAR_IN_FOCUS_LIMIT"); if(overriddenDofSettings) { overriddenDofSettings->m_MaxBlurRadiusAtNearInFocusLimit = Clamp(radius, 0.0f, 30.0f); } } void CommandSetDofFocusDistanceIncreaseSpringConstant(int CameraIndex, float springConstant) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_FOCUS_DISTANCE_INCREASE_SPRING_CONSTANT"); if(overriddenDofSettings) { overriddenDofSettings->m_FocusDistanceIncreaseSpringConstant = Clamp(springConstant, 0.0f, 1000.0f); } } void CommandSetDofFocusDistanceDecreaseSpringConstant(int CameraIndex, float springConstant) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_FOCUS_DISTANCE_DECREASE_SPRING_CONSTANT"); if(overriddenDofSettings) { overriddenDofSettings->m_FocusDistanceDecreaseSpringConstant = Clamp(springConstant, 0.0f, 1000.0f); } } void CommandSetDofShouldFocusOnLookAtTarget(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_SHOULD_FOCUS_ON_LOOK_AT_TARGET"); if(overriddenDofSettings) { overriddenDofSettings->m_ShouldFocusOnLookAtTarget = state; } } void CommandSetDofShouldFocusOnAttachParent(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_SHOULD_FOCUS_ON_ATTACH_PARENT"); if(overriddenDofSettings) { overriddenDofSettings->m_ShouldFocusOnAttachParent = state; } } void CommandSetDofShouldKeepLookAtTargetInFocus(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_SHOULD_KEEP_LOOK_AT_TARGET_IN_FOCUS"); if(overriddenDofSettings) { overriddenDofSettings->m_ShouldKeepLookAtTargetInFocus = state; } } void CommandSetDofShouldKeepAttachParentInFocus(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_SHOULD_KEEP_ATTACH_PARENT_IN_FOCUS"); if(overriddenDofSettings) { overriddenDofSettings->m_ShouldKeepAttachParentInFocus = state; } } void CommandSetDofShouldMeasurePostAlphaPixelDepth(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camDepthOfFieldSettingsMetadata* overriddenDofSettings = GetOverriddenDepthOfFieldSettingsFromCameraIndex(CameraIndex, "SET_CAM_DOF_SHOULD_MEASURE_POST_ALPHA_PIXEL_DEPTH"); if(overriddenDofSettings) { overriddenDofSettings->m_ShouldMeasurePostAlphaPixelDepth = state; } } void CommandAttachCamToEntity(int CameraIndex, int EntityIndex, const scrVector &scrCamOffset, bool bRelativeOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 VecCamOffset (scrCamOffset); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "ATTACH_CAM_TO_ENTITY"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "ATTACH_CAM_TO_ENTITY - Camera is not script controlled" )) { const CEntity *pEntity = CTheScripts::GetEntityToQueryFromGUID(EntityIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pEntity) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->AttachTo(pEntity); scriptedCamera->SetAttachBoneTag(-1); scriptedCamera->SetAttachOffset(VecCamOffset); scriptedCamera->SetAttachOffsetRelativeToMatrixState(bRelativeOffset); } } } } } void CommandAttachCamToPedBone(int CameraIndex, int PedIndex, int BoneTag, const scrVector &scrCamOffset, bool bRelativeOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 VecCamOffset (scrCamOffset); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "ATTACH_CAM_TO_PED_BONE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "ATTACH_CAM_TO_PED_BONE - Camera is not script controlled" )) { const CPed *pPed = CTheScripts::GetEntityToQueryFromGUID(PedIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pPed) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->AttachTo(pPed); scriptedCamera->SetAttachBoneTag(BoneTag); scriptedCamera->SetAttachOffset(VecCamOffset); scriptedCamera->SetAttachOffsetRelativeToMatrixState(bRelativeOffset); } } } } } void CommandHardAttachCamToPedBone(int CameraIndex, int PedIndex, int BoneTag, const scrVector &scrCamRotationOffset, const scrVector &scrCamOffset, bool bRelativeOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 VecCamOffset(scrCamOffset); Vector3 VecCamRotationOffset(scrCamRotationOffset); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "HARD_ATTACH_CAM_TO_PED_BONE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "HARD_ATTACH_CAM_TO_PED_BONE - Camera is not script controlled" )) { const CPed *pPed = CTheScripts::GetEntityToQueryFromGUID(PedIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pPed) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->AttachTo(pPed); scriptedCamera->SetAttachBoneTag(BoneTag, true); scriptedCamera->SetAttachRotationOffset(VecCamRotationOffset); scriptedCamera->SetAttachOffset(VecCamOffset); scriptedCamera->SetAttachOffsetRelativeToMatrixState(bRelativeOffset); } } } } } void CommandHardAttachCamToEntity(int CameraIndex, int EntityIndex, const scrVector &scrCamRotationOffset, const scrVector &scrCamOffset, bool bRelativeOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 VecCamOffset(scrCamOffset); Vector3 VecCamRotationOffset(scrCamRotationOffset); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "HARD_ATTACH_CAM_TO_ENTITY"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "HARD_ATTACH_CAM_TO_ENTITY - Camera is not script controlled" )) { const CEntity *pEntity = CTheScripts::GetEntityToQueryFromGUID(EntityIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pEntity) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->AttachTo(pEntity); scriptedCamera->SetAttachBoneTag(-1, true); scriptedCamera->SetAttachRotationOffset(VecCamRotationOffset); scriptedCamera->SetAttachOffset(VecCamOffset); scriptedCamera->SetAttachOffsetRelativeToMatrixState(bRelativeOffset); } } } } } void CommandAttachCamToVehicleBone(int CameraIndex, int VehicleIndex, int vehicleBone, bool bHardAttachment, const scrVector &scrCamRotationOffset, const scrVector &scrCamOffset, bool bRelativeOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 VecCamOffset(scrCamOffset); Vector3 VecCamRotationOffset(scrCamRotationOffset); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "ATTACH_CAM_TO_VEHICLE_BONE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "ATTACH_CAM_TO_VEHICLE_BONE - Camera is not script controlled" )) { const CVehicle *pVehicle = CTheScripts::GetEntityToQueryFromGUID(VehicleIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pVehicle) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->AttachTo(pVehicle); scriptedCamera->SetAttachBoneTag(vehicleBone, bHardAttachment); scriptedCamera->SetAttachRotationOffset(VecCamRotationOffset); scriptedCamera->SetAttachOffset(VecCamOffset); scriptedCamera->SetAttachOffsetRelativeToMatrixState(bRelativeOffset); } } } } } void CommandDetachCam(int CameraIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "DETTACH_CAM"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"DETTACH_CAM - Camera is not script controlled" )) { if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->AttachTo(NULL); } } } } // roll void CommandSetCamInheritRollObject(int CameraIndex, int ObjectIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_INHERIT_OBJECT_ROLL"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"SET_CAM_INHERIT_OBJECT_ROLL - Camera is not script controlled" )) { const CObject* pObject = CTheScripts::GetEntityToQueryFromGUID(ObjectIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pObject) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->SetRollTarget(pObject); } } } } } void CommandSetCamInheritRollVehicle(int CameraIndex, int VehicleIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_INHERIT_VEHICLE_ROLL"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"SET_CAM_INHERIT_VEHICLE_ROLL - Camera is not script controlled" )) { const CVehicle* pVehicle = CTheScripts::GetEntityToQueryFromGUID(VehicleIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pVehicle) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->SetRollTarget(pVehicle); } } } } } void CommandStopInheritedRoll (int CameraIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "STOP_CAM_INHERIT_ROLL"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"STOP_CAM_INHERIT_ROLL - Camera is not script controlled" )) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->ClearRollTarget(); } } } } //Pointing void CommandPointCamAtCoord(int CameraIndex, const scrVector &scrVecCoors) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vecPos (scrVecCoors); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "POINT_CAM_AT_COORD"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"POINT_CAM_AT_COORD - Camera is not script controlled" )) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->LookAt(vecPos); } } } } void CommandPointCamAtCam(int LookingCameraIndex, int LookedAtCameraIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pLookingCamera = GetCameraFromIndex(LookingCameraIndex, "POINT_CAM_AT_CAM"); camBaseCamera* pLookedAtCamera = GetCameraFromIndex(LookedAtCameraIndex, "POINT_CAM_AT_CAM"); if(pLookingCamera && pLookedAtCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(LookingCameraIndex),"POINT_CAM_AT_CAM - Camera is not script controlled" )) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(LookedAtCameraIndex),"POINT_CAM_AT_CAM - Camera is not script controlled" )) { if(pLookingCamera->GetIsClassId(camScriptedCamera::GetStaticClassId()) && pLookedAtCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedLookingCamera = static_cast(pLookingCamera); scriptedLookingCamera->LookAt(pLookedAtCamera); } } } } } void CommandPointCamAtEntity(int CameraIndex, int EntityIndex, const scrVector &scrCamOffset, bool bRelativeOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vecOffset (scrCamOffset); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "POINT_CAM_AT_ENTITY"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"POINT_CAM_AT_ENTITY - Camera is not script controlled" )) { const CEntity *pEntity = CTheScripts::GetEntityToQueryFromGUID(EntityIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pEntity) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->LookAt(pEntity); scriptedCamera->SetLookAtBoneTag(-1); scriptedCamera->SetLookAtOffset(vecOffset); scriptedCamera->SetLookAtOffsetRelativeToMatrixState(bRelativeOffset); } } } } } void CommandPointCamAtPedBone(int CameraIndex, int PedIndex, int BoneTag, const scrVector &scrCamOffset, bool bRelativeOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vecOffset (scrCamOffset); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "POINT_CAM_AT_PED_BONE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"POINT_CAM_AT_PED_BONE - Camera is not script controlled" )) { const CPed* pPed = CTheScripts::GetEntityToQueryFromGUID(PedIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if (pPed) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->LookAt(pPed); scriptedCamera->SetLookAtBoneTag(BoneTag); scriptedCamera->SetLookAtOffset(vecOffset); scriptedCamera->SetLookAtOffsetRelativeToMatrixState(bRelativeOffset); } } } } } void CommandStopCamPointing(int CameraIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "STOP_CAM_POINTING"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"STOP_CAM_POINTING - Camera is not script controlled" )) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->ClearLookAtTarget(); } } } } void CommandSetCamAffectsAiming(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_AFFECTS_AIMING"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_AFFECTS_AIMING - Camera is not script controlled")) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->SetShouldAffectAiming(state); } } } } void CommandSetCamControlsMiniMapHeading(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_CONTROLS_MINI_MAP_HEADING"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_CONTROLS_MINI_MAP_HEADING - Camera is not script controlled")) { if(pCamera) { if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->SetShouldControlMiniMapHeading(state); } else if(pCamera->GetIsClassId(camAnimatedCamera::GetStaticClassId())) { camAnimatedCamera* animatedCamera = static_cast(pCamera); animatedCamera->SetShouldControlMiniMapHeading(state); } } } } } void CommandSetCamIsInsideVehicle(int CameraIndex, bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_IS_INSIDE_VEHICLE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_IS_INSIDE_VEHICLE - Camera is not script controlled")) { if(pCamera) { if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->SetIsInsideVehicle(state); } } } } } void CommandSetCustomMaxNearClip(int CameraIndex, float customMaxNearClip) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_CUSTOM_MAX_NEAR_CLIP"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_CUSTOM_MAX_NEAR_CLIP - Camera is not script controlled")) { if(pCamera) { if(pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->SetCustomMaxNearClip(customMaxNearClip); } } } } } void CommandAllowMotionBlurDecay(int CameraIndex, bool enable) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "ALLOW_MOTION_BLUR_DECAY"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "ALLOW_MOTION_BLUR_DECAY - Camera is not script controlled" )) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { pCamera->AllowMotionBlurDecay(enable); } } } } void CommandSetCamDebugName(int BANK_ONLY(CameraIndex), const char* BANK_ONLY(szDebugName)) { #if __BANK REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_DEBUG_NAME"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_DEBUG_NAME - Camera is not script controlled")) { if(pCamera && pCamera->GetIsClassId(camScriptedCamera::GetStaticClassId())) { camScriptedCamera* scriptedCamera = static_cast(pCamera); scriptedCamera->SetDebugName(szDebugName); } } } #endif // __BANK } int CommandGetDebugCam() { camBaseCamera* freeCam = (camBaseCamera*)camInterface::GetDebugDirector().GetFreeCam(); if (SCRIPT_VERIFY(freeCam, "GET_DEBUG_CAM - Failed to get the Debug cam see a coder")) { return freeCam->GetPoolIndex(); } else { return 0; } } void CommandSetDebugCamActive(bool state, bool shouldIgnoreDebugPadCameraToggle) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); //NOTE: The debug pad camera toggle can only be ignored when the free camera is being activated by script. camInterface::GetDebugDirector().SetFreeCamActiveState(state); camInterface::GetDebugDirector().SetShouldIgnoreDebugPadCameraToggle(state ? shouldIgnoreDebugPadCameraToggle : false); } //new spline void CommandAddCamSplineNode(int CameraIndex, const scrVector &scrVecPos, const scrVector &scrVecRot, int iDuration, int Flags, int RotOrder) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vPos (scrVecPos); Vector3 vRot (scrVecRot); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "ADD_CAM_SPLINE_NODE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"ADD_CAM_SPLINE_NODE - Camera is not script controlled" )) { if (SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"ADD_CAM_SPLINE_NODE - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); splineCamera->AddNodeWithOrientation(vPos, (vRot * DtoR), static_cast(iDuration), (camSplineNode::eFlags)Flags, RotOrder); } } } } void CommandAddCamSplineNodeUsingCameraFrame(int CameraIndex, int SourceCameraIndex, int iDuration, int Flags) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pSourceCamera = GetCameraFromIndex(SourceCameraIndex, "ADD_CAM_SPLINE_NODE_USING_CAMERA_FRAME"); camBaseCamera* pDestinationCamera = GetCameraFromIndex(CameraIndex, "ADD_CAM_SPLINE_NODE_USING_CAMERA_FRAME"); if(pSourceCamera && pDestinationCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"ADD_CAM_SPLINE_NODE_USING_CAMERA_FRAME - Camera is not script controlled" )) { if (SCRIPT_VERIFY(pDestinationCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"ADD_CAM_SPLINE_NODE_USING_CAMERA_FRAME - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pDestinationCamera); const camFrame& sourceFrame = pSourceCamera->GetFrame(); splineCamera->AddNode(sourceFrame, static_cast(iDuration), (camSplineNode::eFlags)Flags); } } } } void CommandAddCamSplineNodeUsingCamera(int CameraIndex, int SourceCameraIndex, int iDuration, int Flags) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pSourceCamera = GetCameraFromIndex(SourceCameraIndex, "ADD_CAM_SPLINE_NODE_USING_CAMERA"); camBaseCamera* pDestinationCamera = GetCameraFromIndex(CameraIndex, "ADD_CAM_SPLINE_NODE_USING_CAMERA"); if(pSourceCamera && pDestinationCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"ADD_CAM_SPLINE_NODE_USING_CAMERA - Camera is not script controlled" )) { if (SCRIPT_VERIFY(pDestinationCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"ADD_CAM_SPLINE_NODE_USING_CAMERA - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pDestinationCamera); splineCamera->AddNode(pSourceCamera, static_cast(iDuration), (camSplineNode::eFlags)Flags); } } } } void CommandAddCamSplineNodeUsingGameplayFrame(int CameraIndex, int iDuration, int Flags) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME - Camera is not script controlled" )) { if (SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); splineCamera->AddNode(camInterface::GetGameplayDirector(), static_cast(iDuration), (camSplineNode::eFlags)Flags); } } } } void CommandSetCamSplinePhase(int CameraIndex, float phase) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_SPLINE_PHASE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"SET_CAM_SPLINE_PHASE - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"SET_CAM_SPLINE_PHASE - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); splineCamera->SetPhase(phase); } } } } float CommandGetCamSplinePhase(int CameraIndex) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_SPLINE_PHASE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"GET_CAM_SPLINE_PHASE - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"GET_CAM_SPLINE_PHASE - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); return splineCamera->GetPhase(NULL); } } } return 0.0f; } float CommandGetCamSplineNodePhase(int CameraIndex) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_SPLINE_NODE_PHASE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"GET_CAM_SPLINE_NODE_PHASE - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"GET_CAM_SPLINE_NODE_PHASE - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); return splineCamera->GetNodePhase(); } } } return 0.0f; } int CommandGetCamSplineNodeIndex(int CameraIndex) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "GET_CAM_SPLINE_NODE_INDEX"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"GET_CAM_SPLINE_NODE_INDEX - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"GET_CAM_SPLINE_NODE_INDEX - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); return (int)splineCamera->GetCurrentNode(); } } } return (int)0; } void CommandSetCamSplineDuration(int CameraIndex, int Duration) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_SPLINE_CAM_DURATION"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"SET_SPLINE_CAM_DURATION - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()) ,"SET_SPLINE_CAM_DURATION - Cam is not a spline camera" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); return splineCamera->SetDuration(Duration); } } } } void CommandSetCamSplineSmoothingStyle(int CameraIndex, int Smoothing) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_SPLINE_SMOOTHING_STYLE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"SET_CAM_SPLINE_SMOOTHING_STYLE - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()),"SET_CAM_SPLINE_SMOOTHING_STYLE - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); splineCamera->SetSmoothingStyle((camBaseSplineCamera::eSmoothingStyle) Smoothing); } } } } void CommandSetCamSplineNodeEase(int CameraIndex, int NodeIndex, int Flags, float Scale) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if (SCRIPT_VERIFY(NodeIndex >= 0, "SET_CAM_SPLINE_NODE_EASE - NodeIndex must be >= 0") && SCRIPT_VERIFY(Flags >= 0, "SET_CAM_SPLINE_NODE_EASE - Flags must be >= 0")) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_SPLINE_NODE_EASE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_SPLINE_NODE_EASE - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()), "SET_CAM_SPLINE_NODE_EASE - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); if (SCRIPT_VERIFY(NodeIndex < splineCamera->GetNumNodes(), "SET_CAM_SPLINE_NODE_EASE - NodeIndex must be < number of nodes")) { splineCamera->SetEase((u32)NodeIndex, (u32)Flags, Scale); } } } } } } void CommandSetCamSplineNodeVelocityScale(int CameraIndex, int NodeIndex, float Scale) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if (SCRIPT_VERIFY(NodeIndex >= 0, "SET_CAM_SPLINE_NODE_EASE - NodeIndex must be >= 0")) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_SPLINE_NODE_VELOCITY_SCALE"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_SPLINE_NODE_VELOCITY_SCALE - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()), "SET_CAM_SPLINE_NODE_VELOCITY_SCALE - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); if (SCRIPT_VERIFY(NodeIndex < splineCamera->GetNumNodes(), "SET_CAM_SPLINE_NODE_VELOCITY_SCALE - NodeIndex must be < number of nodes")) { if (SCRIPT_VERIFY(Scale >= -1.0f && Scale <= 1.0f, "SET_CAM_SPLINE_NODE_VELOCITY_SCALE - Scale must be between -1 and 1 (inclusive)")) { splineCamera->SetVelocityScale((u32)NodeIndex, Scale); } } } } } } } void CommandOverrideCamSplineVelocity(int CameraIndex, int Entry, float Start, float Speed) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if (SCRIPT_VERIFY(Entry >= 0, "OVERRIDE_CAM_SPLINE_VELOCITY - Entry must be >= 0") && SCRIPT_VERIFY(Entry < MAX_VEL_CHANGES, "OVERRIDE_CAM_SPLINE_VELOCITY - Entry must be >= 0")) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "OVERRIDE_CAM_SPLINE_VELOCITY"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "OVERRIDE_CAM_SPLINE_VELOCITY - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camCustomTimedSplineCamera::GetStaticClassId()), "OVERRIDE_CAM_SPLINE_VELOCITY - Cam is not a timed spline cam" )) { camCustomTimedSplineCamera* timedSplineCamera = static_cast(pCamera); if (SCRIPT_VERIFY(Start < (float)timedSplineCamera->GetNumNodes(), "OVERRIDE_CAM_SPLINE_VELOCITY - Start must be < number of nodes")) { timedSplineCamera->OverrideVelocity((u32)Entry, Start, Speed); } } } } } } void CommandOverrideCamSplineMotionBlur(int CameraIndex, int Entry, float BlurStart, float MotionBlur) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if (SCRIPT_VERIFY(Entry >= 0, "OVERRIDE_CAM_SPLINE_MOTION_BLUR - Entry must be >= 0") && SCRIPT_VERIFY(Entry < MAX_BLUR_CHANGES, "OVERRIDE_CAM_SPLINE_MOTION_BLUR - Entry must be >= 0")) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "OVERRIDE_CAM_SPLINE_MOTION_BLUR"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "OVERRIDE_CAM_SPLINE_MOTION_BLUR - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camCustomTimedSplineCamera::GetStaticClassId()), "OVERRIDE_CAM_SPLINE_MOTION_BLUR - Cam is not a timed spline cam" )) { camCustomTimedSplineCamera* timedSplineCamera = static_cast(pCamera); if (SCRIPT_VERIFY(BlurStart < (float)timedSplineCamera->GetNumNodes(), "OVERRIDE_CAM_SPLINE_MOTION_BLUR - Start must be < number of nodes")) { timedSplineCamera->OverrideMotionBlur((u32)Entry, BlurStart, MotionBlur); } } } } } } void CommandSetCamSplineNodeExtraFlags(int CameraIndex, int NodeIndex, int Flags) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if (SCRIPT_VERIFY(NodeIndex >= 0, "SET_CAM_SPLINE_NODE_FORCE_LINEAR - NodeIndex must be >= 0")) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_SPLINE_NODE_FORCE_LINEAR"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_SPLINE_NODE_FORCE_LINEAR - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()), "SET_CAM_SPLINE_NODE_FORCE_LINEAR - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); if (SCRIPT_VERIFY(NodeIndex < splineCamera->GetNumNodes(), "SET_CAM_SPLINE_NODE_FORCE_LINEAR - NodeIndex must be < number of nodes")) { splineCamera->ForceLinearBlend( (u32)NodeIndex, (Flags & camSplineNode::FORCE_LINEAR) != 0); splineCamera->ForceCut( (u32)NodeIndex, (Flags & camSplineNode::FORCE_CUT) != 0); splineCamera->ForcePause( (u32)NodeIndex, (Flags & camSplineNode::FORCE_PAUSE) != 0); splineCamera->ForceLevel( (u32)NodeIndex, (Flags & camSplineNode::FORCE_LEVEL) != 0); } } } } } } bool CommandIsCamSplinePaused(int CameraIndex) { camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "IS_CAM_SPLINE_PAUSED"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "IS_CAM_SPLINE_PAUSED - Camera is not script controlled" )) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId()), "IS_CAM_SPLINE_PAUSED - Cam is not a named spline cam" )) { camBaseSplineCamera* splineCamera = static_cast(pCamera); return splineCamera->IsPaused(); } } } return false; } // interp void CommandSetCamActiveWithInterp (int CameraIndexDest, int CameraIndexSource, int iDuration, int graphTypePos, int graphTypeRot ) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); CommandSetCamActive(CameraIndexDest, true); camBaseCamera* sourceCamera = camBaseCamera::GetCameraAtPoolIndex(CameraIndexSource); camBaseCamera* destinationCamera = camBaseCamera::GetCameraAtPoolIndex(CameraIndexDest); if (SCRIPT_VERIFY (sourceCamera, "SET_CAM_ACTIVE_WITH_INTERP - Source camera does not exist") && SCRIPT_VERIFY (destinationCamera, "SET_CAM_ACTIVE_WITH_INTERP - Destination camera does not exist")) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndexDest),"SET_CAM_ACTIVE_WITH_INTERP - Destination camera is not script controlled" ) && SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndexSource),"SET_CAM_ACTIVE_WITH_INTERP - Source Camera is not script controlled" ) ) { camFrameInterpolator* sourceCameraFrameInterpolator = sourceCamera->GetFrameInterpolator(); if(sourceCameraFrameInterpolator && (sourceCameraFrameInterpolator->GetSourceCamera() == destinationCamera)) { //The interpolation source camera is currently interpolating from our new destination camera, so we must lock the existing //interpolation to a static (destination-relative) frame. Otherwise we would get a circular reference that can result in //camera glitches. sourceCameraFrameInterpolator->SetSourceCamera(NULL); } destinationCamera->InterpolateFromCamera(*sourceCamera, iDuration); camFrameInterpolator* interpolator = destinationCamera->GetFrameInterpolator(); if(interpolator) { interpolator->SetCurveTypeForFrameComponent(camFrame::CAM_FRAME_COMPONENT_POS, (camFrameInterpolator::eCurveTypes)graphTypePos); interpolator->SetCurveTypeForFrameComponent(camFrame::CAM_FRAME_COMPONENT_MATRIX, (camFrameInterpolator::eCurveTypes)graphTypeRot); } } } } bool CommandIsCamInterpolating(int CameraIndex) { bool isInterpolating = false; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "IS_CAM_INTERPOLATING"); if(pCamera) { if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex),"IS_CAM_INTERPOLATING - Camera is not script controlled" )) { if(pCamera->GetIsClassId(camBaseSplineCamera::GetStaticClassId())) { camBaseSplineCamera* splineCamera = static_cast(pCamera); isInterpolating = !splineCamera->HasReachedEnd(); } else { isInterpolating = pCamera->IsInterpolating(); } } } return isInterpolating; } bool CommandIsInterpolatingFromScriptCams() { const bool isInterpolatingOut = (camInterface::GetScriptDirector().GetRenderState() == camBaseDirector::RS_INTERPOLATING_OUT); return isInterpolatingOut; } bool CommandIsInterpolatingToScriptCams() { const bool isInterpolatingIn = (camInterface::GetScriptDirector().GetRenderState() == camBaseDirector::RS_INTERPOLATING_IN); return isInterpolatingIn; } void CommandSetGameplayCamAltitudeFovScalingState(bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetPersistentHighAltitudeFovScalingState(state); } void CommandDisableGameplayCamAltitudeFovScalingThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().DisableHighAltitudeFovScalingThisUpdate(); } bool CommandIsGameplayCamLookingBehind() { const bool isLookingBehind = camInterface::GetGameplayDirector().IsLookingBehind(); return isLookingBehind; } void CommandSetIgnoreCollisionForEntityThisUpdate(int index) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); const CEntity* pEntity = CTheScripts::GetEntityToQueryFromGUID(index, CTheScripts::GUID_ASSERT_FLAG_ENTITY_EXISTS); if(pEntity) { camInterface::GetGameplayDirector().SetScriptEntityToIgnoreCollisionThisUpdate(pEntity); } } void CommandDisableCamCollisionForObject(int index) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); CObject* pObject = CTheScripts::GetEntityToModifyFromGUID(index, CTheScripts::GUID_ASSERT_FLAG_ENTITY_EXISTS); if(pObject) { phInst* pObjectPhysicsInst = pObject->GetCurrentPhysicsInst(); if(pObjectPhysicsInst) { phArchetype* pObjectArchetype = pObjectPhysicsInst->GetArchetype(); if(pObjectArchetype) { pObjectArchetype->RemoveIncludeFlags(ArchetypeFlags::GTA_CAMERA_TEST); } } } } void CommandBypassCameraCollisionBuoyancyTestThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camThirdPersonCamera* pThirdPersonCamera = camInterface::GetGameplayDirector().GetThirdPersonCamera(); if(pThirdPersonCamera) { pThirdPersonCamera->BypassBuoyancyThisUpdate(); } } void CommandSetGameplayCamEntityToLimitFocusOverBoundingSphereThisUpdate(int index) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); const CEntity* entity = CTheScripts::GetEntityToQueryFromGUID(index, CTheScripts::GUID_ASSERT_FLAG_ENTITY_EXISTS); if(entity) { camInterface::GetGameplayDirector().SetScriptEntityToLimitFocusOverBoundingSphereThisUpdate(entity); } } void CommandDisableFirstPersonCameraWaterClippingTestThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().ScriptDisableWaterClippingTestThisUpdate(); } //shake void CommandShakeCam(int CameraIndex, const char* ShakeName, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SHAKE_CAM"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SHAKE_CAM - Camera is not script controlled")) { pCamera->StopShaking(); #if __BANK camInterface::GetScriptDirector().DebugSetScriptDisabledShake(); #endif // __BANK SCRIPT_VERIFY_TWO_STRINGS(pCamera->Shake(ShakeName, fAmplitudeScalar), "SHAKE_CAM - Failed to create the requested shake: ", ShakeName); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeName(ShakeName); camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } } } void CommandAnimatedShakeCam(int CameraIndex, const char* AnimDictName, const char* AnimClipName, const char* ShakeName, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "ANIMATED_SHAKE_CAM"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "ANIMATED_SHAKE_CAM - Camera is not script controlled")) { pCamera->StopShaking(); #if __BANK camInterface::GetScriptDirector().DebugSetScriptDisabledShake(); #endif // __BANK SCRIPT_VERIFY_TWO_STRINGS(pCamera->Shake(AnimDictName, AnimClipName, ShakeName, fAmplitudeScalar), "ANIMATED_SHAKE_CAM - Failed to create the requested shake using anim: ", AnimClipName); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeName(ShakeName); camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } } } bool CommandIsCamShaking(int CameraIndex) { bool isShaking = false; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "IS_CAM_SHAKING"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "IS_CAM_SHAKING - Camera is not script controlled")) { isShaking = pCamera->IsShaking(); } } return isShaking; } void CommandSetCamShakeAmplitude(int CameraIndex, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_CAM_SHAKE_AMPLITUDE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_SHAKE_AMPLITUDE - Camera is not script controlled")) { SCRIPT_VERIFY(pCamera->SetShakeAmplitude(fAmplitudeScalar), "SET_CAM_SHAKE_AMPLITUDE - Camera is not shaking"); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } } } void CommandStopCamShaking(int CameraIndex, bool shouldStopImmediately) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "STOP_CAM_SHAKING"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "STOP_CAM_SHAKING - Camera is not script controlled")) { pCamera->StopShaking(shouldStopImmediately); #if __BANK camInterface::GetScriptDirector().DebugSetScriptDisabledShake(); #endif // __BANK } } } void CommandShakeScriptGlobal(const char* ShakeName, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); SCRIPT_VERIFY_TWO_STRINGS(camInterface::GetScriptDirector().Shake(ShakeName, fAmplitudeScalar), "SHAKE_SCRIPT_GLOBAL - Failed to create the requested shake: ", ShakeName); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeName(ShakeName); camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } void CommandAnimatedShakeScriptGlobal(const char* AnimDictName, const char* AnimClipName, const char* ShakeName, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); SCRIPT_VERIFY_TWO_STRINGS(camInterface::GetScriptDirector().Shake(AnimDictName, AnimClipName, ShakeName, fAmplitudeScalar), "ANIMATED_SHAKE_SCRIPT_GLOBAL - Failed to create the requested shake: ", AnimClipName); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeName(ShakeName); camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } bool CommandIsScriptGlobalShaking() { const bool isShaking = camInterface::GetScriptDirector().IsShaking(); return isShaking; } void CommandSetScriptGlobalShakeAmplitude(float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); SCRIPT_VERIFY(camInterface::GetScriptDirector().SetShakeAmplitude(fAmplitudeScalar), "SET_SCRIPT_GLOBAL_SHAKE_AMPLITUDE - The script director is not shaking"); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } void CommandStopScriptGlobalShaking(bool shouldStopImmediately) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetScriptDirector().StopShaking(shouldStopImmediately); #if __BANK camInterface::GetScriptDirector().DebugSetScriptDisabledShake(); #endif // __BANK } void CommandTriggerVehiclePartBrokenCameraShake(int vehicleIndex, int vehiclePart, float amplitude) { REGISTER_CAMERA_SCRIPT_COMMAND("vehicleIndex(%d) vehiclePart(%d) amplitude(%.2f)", vehicleIndex, vehiclePart, amplitude); const CVehicle* vehicle = CTheScripts::GetEntityToModifyFromGUID(vehicleIndex, CTheScripts::GUID_ASSERT_FLAGS_INCLUDE_CLONES); if(SCRIPT_VERIFY(vehicle, "Invalid vehicle index passed to the TRIGGER_VEHICLE_PART_BROKEN_CAMERA_SHAKE native")) { vehiclePart += VEH_EXTRA_1 - 1; if (SCRIPT_VERIFY(vehiclePart >= VEH_EXTRA_1 && vehiclePart <= VEH_LAST_EXTRA, "TRIGGER_VEHICLE_PART_BROKEN_CAMERA_SHAKE - Extra is outside range")) { camInterface::GetGameplayDirector().RegisterVehiclePartBroken(*vehicle, static_cast(vehiclePart), Max(0.0f, amplitude)); } } } //camera animation void GetAnimInfoFromControlFlags(int nControlFlags, u32& iFlags) { bool bLooped = (nControlFlags & BIT(AF_LOOPING)) ? true : false; // Animation is looped if it has to play for a certain length of time if ( (bLooped) /*&&(bHoldLastFrame == false)*/ ) { iFlags |= APF_ISLOOPED; } } bool CommandPlayCamAnim(int CameraIndex, const char* animName, const char* animDictName, const scrVector &scrVecOriginPosition, const scrVector &scrVecOriginRotation, int iflags, int RotOrder) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); bool hasSucceeded = false; if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "PLAY_CAM_ANIM - Camera is not script controlled")) { const crClip* clip = fwAnimManager::GetClipIfExistsByName(animDictName, animName); if (SCRIPT_VERIFYF(clip, "PLAY_CAM_ANIM - Couldn't find animation \"%s\\%s\". Has it been loaded?", animDictName, animName)) { u32 iAnimFlags = 0; GetAnimInfoFromControlFlags(iflags, iAnimFlags); Matrix34 sceneOrigin; CScriptEulers::MatrixFromEulers(sceneOrigin, Vector3(scrVecOriginRotation) * DtoR, static_cast(RotOrder)); sceneOrigin.d = Vector3(scrVecOriginPosition); hasSucceeded = camInterface::GetScriptDirector().AnimateCamera(CameraIndex, animDictName, *clip, sceneOrigin, -1, iAnimFlags); } } return hasSucceeded; } bool CommandPlaySynchronizedCamAnim(int CameraIndex, int sceneId, const char* animName, const char* animDictName) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); bool hasSucceeded = false; if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "PLAY_SYNCHRONIZED_CAM_ANIM - Camera is not script controlled")) { if (SCRIPT_VERIFY(fwAnimDirectorComponentSyncedScene::IsValidSceneId(static_cast(sceneId)), "PLAY_SYNCHRONIZED_CAM_ANIM - Invalid scene ID!")) { const crClip* clip = fwAnimManager::GetClipIfExistsByName(animDictName, animName); if (SCRIPT_VERIFYF(clip, "PLAY_SYNCHRONIZED_CAM_ANIM - Couldn't find animation \"%s\\%s\". Has it been loaded?", animDictName, animName)) { Matrix34 sceneOrigin; fwAnimDirectorComponentSyncedScene::GetSyncedSceneOrigin(static_cast(sceneId), sceneOrigin); hasSucceeded = camInterface::GetScriptDirector().AnimateCamera(CameraIndex, animDictName, *clip, sceneOrigin, sceneId); } } } return hasSucceeded; } bool CommandIsCamPlayingAnim(int CameraIndex, const char* animName, const char* animDictName) { bool isPlaying = false; if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "IS_CAM_PLAYING_ANIM - Camera is not script controlled")) { const crClip* clip = fwAnimManager::GetClipIfExistsByName(animDictName, animName); if (SCRIPT_VERIFYF(clip, "IS_CAM_PLAYING_ANIM - Couldn't find animation \"%s\\%s\". Has it been loaded?", animDictName, animName)) { isPlaying = camInterface::GetScriptDirector().IsCameraPlayingAnimation(CameraIndex, animDictName, *clip); } } return isPlaying; } void CommandSetCamAnimCurrentPhase(int CameraIndex, float phase) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_CAM_ANIM_CURRENT_PHASE - Camera is not script controlled")) { if (SCRIPT_VERIFY((phase >= 0.0f), "SET_CAM_ANIM_CURRENT_PHASE - phase should be greater than or equal to 0.0") && SCRIPT_VERIFY((phase <= 1.0f), "SET_CAM_ANIM_CURRENT_PHASE - phase should be less than or equal to 1.0")) { camInterface::GetScriptDirector().SetCameraAnimationPhase(CameraIndex, phase); } } } float CommandGetCamAnimCurrentPhase(int CameraIndex) { float phase = 0.0f; if (SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "GET_CAM_ANIM_CURRENT_PHASE - Camera is not script controlled")) { phase = camInterface::GetScriptDirector().GetCameraAnimationPhase(CameraIndex); } return phase; } //Scene Transition - deprecated! void CommandStartSceneTransition(int UNUSED_PARAM(CameraIndex), const scrVector &UNUSED_PARAM(vStartPos), const scrVector &UNUSED_PARAM(vEndPos)) { cameraAssertf(false, "START_CAM_TRANSITION is deprecated!"); } bool CommandIsCameraTransitioning(int UNUSED_PARAM(CameraIndex)) { cameraAssertf(false, "IS_CAMERA_TRANSITIONING is deprecated!"); return false; } float CommandGetCamTransitionPhase(int UNUSED_PARAM(CameraIndex)) { cameraAssertf(false, "GET_CAM_TRANSITION_PHASE is deprecated!"); return 0.0f; } //Scripted fly camera void CommandSetFlyCamHorizontalResponse(int CameraIndex, float maxSpeed, float maxAcceleration, float maxDeceleration) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_FLY_CAM_HORIZONTAL_RESPONSE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_FLY_CAM_HORIZONTAL_RESPONSE - Camera is not script controlled")) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camScriptedFlyCamera::GetStaticClassId()), "SET_FLY_CAM_HORIZONTAL_RESPONSE - Camera is not a scripted fly camera")) { camScriptedFlyCamera* pScriptedFlyCamera = static_cast(pCamera); camScriptedFlyCameraMetadata& metadata = pScriptedFlyCamera->GetMetadata(); metadata.m_HorizontalTranslationInputResponse.m_MaxAcceleration = maxAcceleration; metadata.m_HorizontalTranslationInputResponse.m_MaxDeceleration = maxDeceleration; metadata.m_HorizontalTranslationInputResponse.m_MaxSpeed = maxSpeed; } } } } void CommandSetFlyCamVerticalResponse(int CameraIndex, float maxSpeed, float maxAcceleration, float maxDeceleration) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_FLY_CAM_VERTICAL_RESPONSE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_FLY_CAM_VERTICAL_RESPONSE - Camera is not script controlled")) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camScriptedFlyCamera::GetStaticClassId()), "SET_FLY_CAM_VERTICAL_RESPONSE - Camera is not a scripted fly camera")) { camScriptedFlyCamera* pScriptedFlyCamera = static_cast(pCamera); camScriptedFlyCameraMetadata& metadata = pScriptedFlyCamera->GetMetadata(); metadata.m_VerticalTranslationInputResponse.m_MaxAcceleration = maxAcceleration; metadata.m_VerticalTranslationInputResponse.m_MaxDeceleration = maxDeceleration; metadata.m_VerticalTranslationInputResponse.m_MaxSpeed = maxSpeed; } } } } void CommandSetFlyCamMaxHeight(int CameraIndex, float maxHeight) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_FLY_CAM_MAX_HEIGHT"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_FLY_CAM_MAX_HEIGHT - Camera is not script controlled")) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camScriptedFlyCamera::GetStaticClassId()), "SET_FLY_CAM_MAX_HEIGHT - Camera is not a scripted fly camera")) { camScriptedFlyCamera* pScriptedFlyCamera = static_cast(pCamera); camScriptedFlyCameraMetadata& metadata = pScriptedFlyCamera->GetMetadata(); metadata.m_MaxHeight = maxHeight; } } } } void CommandSetFlyCamCoordAndConstrain(int CameraIndex, const scrVector &position) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_FLY_CAM_COORD_AND_CONSTRAIN"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_FLY_CAM_COORD_AND_CONSTRAIN - Camera is not script controlled")) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camScriptedFlyCamera::GetStaticClassId()), "SET_FLY_CAM_COORD_AND_CONSTRAIN - Camera is not a scripted fly camera")) { Vector3 vOverridePos(position); camScriptedFlyCamera* pScriptedFlyCamera = static_cast(pCamera); pScriptedFlyCamera->SetScriptPosition(vOverridePos); } } } } void CommandSetFlyCamVerticalControlsThisUpdate(int CameraIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "SET_FLY_CAM_VERTICAL_CONTROLS_THIS_UPDATE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "SET_FLY_CAM_VERTICAL_CONTROLS_THIS_UPDATE - Camera is not script controlled")) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camScriptedFlyCamera::GetStaticClassId()), "SET_FLY_CAM_VERTICAL_CONTROLS_THIS_UPDATE - Camera is not a scripted fly camera")) { camScriptedFlyCamera* pScriptedFlyCamera = static_cast(pCamera); pScriptedFlyCamera->SetVerticalControlThisUpdate(true); } } } } bool CommandWasFlyCamConstrainedOnPreviousUpdate(int CameraIndex) { bool wasConstrained = false; camBaseCamera* pCamera = GetCameraFromIndex(CameraIndex, "WAS_FLY_CAM_CONSTRAINED_ON_PREVIOUS_UDPATE"); if(pCamera) { if(SCRIPT_VERIFY(camInterface::GetScriptDirector().IsCameraScriptControllable(CameraIndex), "WAS_FLY_CAM_CONSTRAINED_ON_PREVIOUS_UDPATE - Camera is not script controlled")) { if(SCRIPT_VERIFY(pCamera->GetIsClassId(camScriptedFlyCamera::GetStaticClassId()), "WAS_FLY_CAM_CONSTRAINED_ON_PREVIOUS_UDPATE - Camera is not a scripted fly camera")) { camScriptedFlyCamera* pScriptedFlyCamera = static_cast(pCamera); wasConstrained = pScriptedFlyCamera->WasConstrained(); } } } return wasConstrained; } //Fade bool CommandIsScreenFadingIn() { return (camInterface::IsFadingIn()); } bool CommandIsScreenFadingOut() { return (camInterface::IsFadingOut()); } bool CommandIsScreenFadedOut() { return (camInterface::IsFadedOut()); } bool CommandIsScreenFadedIn() { return (camInterface::IsFadedIn()); } void CommandDoScreenFadeIn(int fadeTime) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); #if __BANK char DebugString[64]; sprintf(DebugString, "DO_SCREEN_FADE_IN %d ms", fadeTime); CScriptDebug::SetContentsOfFadeCommandTextWidget(DebugString); #endif #if GTA_REPLAY && !__FINAL if( CReplayMgr::IsReplayInControlOfWorld()) { scriptAssertf( 0, "CommandDoScreenFadeIn: Called during replay %s", CTheScripts::GetCurrentScriptNameAndProgramCounter()); } #endif //GTA_REPLAY // Handle Fade Ins, as an extra precaution, for our position tracking, as we'll need some safety there camInterface::FadeIn(fadeTime); } void CommandDoScreenFadeOut(int fadeTime) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); // stop opening the frontend if the script initiates a fade //CFrontEnd::StopOpeningFrontend(); #if __BANK char DebugString[64]; sprintf(DebugString, "DO_SCREEN_FADE_OUT %d ms", fadeTime); CScriptDebug::SetContentsOfFadeCommandTextWidget(DebugString); #endif #if GTA_REPLAY && !__FINAL if( CReplayMgr::IsReplayInControlOfWorld()) { scriptAssertf( 0, "CommandDoScreenFadeOut: Called during replay %s", CTheScripts::GetCurrentScriptNameAndProgramCounter()); } #endif //GTA_REPLAY // Handle fade outs, because these are always going to cause awkwardness camInterface::FadeOut(fadeTime); } //wide screen void CommandSetWidescreenBorders(bool bSet, int duration) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); gVpMan.SetWidescreenBorders(bSet, duration); } bool CommandAreWidescreenBordersActive() { return gVpMan.AreWidescreenBordersActive(); } //Game Cam scrVector CommandGetGameplayCamCoord () { return camInterface::GetGameplayDirector().GetFrame().GetPosition(); } scrVector CommandGetGameplayCamRot (int RotOrder) { const Matrix34& worldMatrix = camInterface::GetGameplayDirector().GetFrame().GetWorldMatrix(); Vector3 vRot = CScriptEulers::MatrixToEulers(worldMatrix, static_cast(RotOrder)); vRot *= RtoD; return vRot; } float CommandGetGameplayCamFov () { return camInterface::GetGameplayDirector().GetFrame().GetFov(); } void CommandSetGameplayCamMotionBlurScalingThisUpdate(float scaling) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); scaling = Max(scaling, 0.0f); //Do not allow negative scaling to be specified by script. camInterface::GetGameplayDirector().SetScriptControlledMotionBlurScalingThisUpdate(scaling); } void CommandSetGameplayCamMaxMotionBlurStrengthThisUpdate(float maxStrength) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); maxStrength = Clamp(maxStrength, 0.0f, 1.0f); //Clamp the script input to the valid range for motion blur strength. camInterface::GetGameplayDirector().SetScriptControlledMaxMotionBlurStrengthThisUpdate(maxStrength); } float CommandGetGameplayCamRelativeHeading() { float heading = camInterface::GetGameplayDirector().GetRelativeCameraHeading(); heading *= RtoD; return heading; } void CommandSetGameplayCamRelativeHeading(float fCamHeading) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); scriptcameraDebugf3("FC: %d - CommandSetGameplayCamRelativeHeading( fCamHeading(%f) )", fwTimer::GetFrameCount(), fCamHeading); const float relativeHeadingToApply = fwAngle::LimitRadianAngleSafe(fCamHeading * DtoR); camInterface::GetGameplayDirector().SetUseScriptHeading(relativeHeadingToApply); // If we're rendering a cinematic mounted camera (e.g. in vehicle POV) we want to force the relative heading to what script are setting (instead of cloning the gameplay camera heading) const camBaseDirector* renderedDirector = camInterface::GetDominantRenderedDirector(); const bool isCinematicDirector = renderedDirector && renderedDirector->GetIsClassId(camCinematicDirector::GetStaticClassId()); if(isCinematicDirector) { camCinematicMountedCamera* firstPersonVehicleCamera = camInterface::GetCinematicDirector().GetFirstPersonVehicleCamera(); if(firstPersonVehicleCamera) { firstPersonVehicleCamera->SetUseScriptHeading(relativeHeadingToApply); } } } float CommandGetGameplayCamRelativePitch() { float pitch = camInterface::GetGameplayDirector().GetRelativeCameraPitch(); pitch *= RtoD; return pitch; } void CommandSetGameplayCamRelativePitch(float fCamPitch, float smoothRate) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); scriptcameraDebugf3("FC: %d - CommandSetGameplayCamRelativePitch( fCamPitch(%f), smoothRate(%f) )", fwTimer::GetFrameCount(), fCamPitch, smoothRate); const float relativePitchToApply = Clamp(fCamPitch * DtoR, -HALF_PI, HALF_PI); camInterface::GetGameplayDirector().SetUseScriptPitch(relativePitchToApply, smoothRate ); //we intentionally don't set the pitch for the camCinematicMountedCamera because it might affect existing script code that //rely on this function on doing nothing for POVs. //If script want to set the heading and pitch on any gameplay camera (including POVs) it should use the function below CommandForceCameraRelativeHeadingAndPitch } void CommandResetGameplayCamFullAttachParentTransformTimer() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camThirdPersonCamera* thirdPersonCamera = camInterface::GetGameplayDirector().GetThirdPersonCamera(); if(thirdPersonCamera) { thirdPersonCamera->ResetFullAttachParentMatrixForRelativeOrbitTimer(); } } void CommandForceCameraRelativeHeadingAndPitch(float fHeading, float fPitch, float fPitchSmoothRate) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); scriptcameraDebugf3("FC: %d - CommandForceCameraRelativeHeadingAndPitch( fHeading(%f), fPitch(%f), fPitchSmoothRate(%f) )", fwTimer::GetFrameCount(), fHeading, fPitch, fPitchSmoothRate); const float relativeHeadingToApply = fwAngle::LimitRadianAngleSafe(fHeading * DtoR); camInterface::GetGameplayDirector().SetUseScriptHeading(relativeHeadingToApply); const float relativePitchToApply = Clamp(fPitch * DtoR, -HALF_PI, HALF_PI); camInterface::GetGameplayDirector().SetUseScriptPitch(relativePitchToApply, fPitchSmoothRate); //Get the cinematic director and check it is rendering a first person vehicle camera camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); camCinematicMountedCamera* firstPersonVehicleCamera = cinematicDirector.GetFirstPersonVehicleCamera(); if(firstPersonVehicleCamera) { firstPersonVehicleCamera->SetUseScriptHeading(relativeHeadingToApply); firstPersonVehicleCamera->SetUseScriptPitch(relativePitchToApply); } } void CommandForceBonnetCameraRelativeHeadingAndPitch(float fHeading, float fPitch) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); const float relativeHeadingToApply = fwAngle::LimitRadianAngleSafe(fHeading * DtoR); const float relativePitchToApply = Clamp(fPitch * DtoR, -HALF_PI, HALF_PI); //Get the cinematic director and check it is rendering a first person vehicle camera camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); //check the bonnet camera camCinematicMountedCamera* bonnetVehicleCamera = cinematicDirector.GetBonnetVehicleCamera(); if(bonnetVehicleCamera) { bonnetVehicleCamera->SetUseScriptHeading(relativeHeadingToApply); bonnetVehicleCamera->SetUseScriptPitch(relativePitchToApply); } } void CommandSetFirstPersonShooterCameraHeading(float heading) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetFirstPersonShooterCameraHeading( heading * DtoR ); } void CommandSetFirstPersonShooterCameraPitch(float pitch) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); const float relativePitchToApply = Clamp(pitch * DtoR, -HALF_PI, HALF_PI); camInterface::GetGameplayDirector().SetFirstPersonShooterCameraPitch( relativePitchToApply ); } void CommandSetScriptedCameraIsFirstPersonThisFrame(bool isFirstPersonThisFrame) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); #if FPS_MODE_SUPPORTED camInterface::SetScriptedCameraIsFirstPersonThisFrame(isFirstPersonThisFrame); #endif } void CommandSetFollowCamIgnoreAttachParentMovementThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetShouldFollowCameraIgnoreAttachParentMovementThisUpdateForScript(); } bool CommandIsGameFollowPedCamActive() { bool isActive = camInterface::GetGameplayDirector().IsFollowingPed(); return isActive; } bool CommandSetFollowPedCamThisUpdate(const char* cameraName, int interpolationDuration) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(!SCRIPT_VERIFY(cameraName, "SET_FOLLOW_PED_CAM_THIS_UPDATE - NULL camera name")) { return false; } const u32 cameraNameHash = atStringHash(cameraName); tGameplayCameraSettings settings(NULL, cameraNameHash, interpolationDuration); const bool hasSucceeded = camInterface::GetGameplayDirector().SetScriptOverriddenFollowPedCameraSettingsThisUpdate(settings); SCRIPT_ASSERT_TWO_STRINGS(hasSucceeded, "SET_FOLLOW_PED_CAM_THIS_UPDATE has failed. Is this camera name valid: ", cameraName); return hasSucceeded; } int CommandGetFollowPedCamViewMode() { const int viewMode = camControlHelper::GetViewModeForContext(camControlHelperMetadataViewMode::ON_FOOT); return viewMode; } void CommandSetFollowPedCamViewMode(int viewMode) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); ASSERT_ONLY(const bool hasSucceeded =) camControlHelper::SetViewModeForContext(camControlHelperMetadataViewMode::ON_FOOT, viewMode); SCRIPT_ASSERT(hasSucceeded, "SET_FOLLOW_PED_CAM_VIEW_MODE failed, is the view mode valid?"); } bool CommandIsGameFollowVehicleCamActive() { bool isActive = camInterface::GetGameplayDirector().IsFollowingVehicle(); return isActive; } bool CommandSetFollowVehicleCamThisUpdate(const char* cameraName, int interpolationDuration) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(!SCRIPT_VERIFY(cameraName, "SET_FOLLOW_VEHICLE_CAM_THIS_UPDATE - NULL camera name")) { return false; } const u32 cameraNameHash = atStringHash(cameraName); tGameplayCameraSettings settings(NULL, cameraNameHash, interpolationDuration); const bool hasSucceeded = camInterface::GetGameplayDirector().SetScriptOverriddenFollowVehicleCameraSettingsThisUpdate(settings); SCRIPT_ASSERT_TWO_STRINGS(hasSucceeded, "SET_FOLLOW_VEHICLE_CAM_THIS_UPDATE has failed. Is this camera name valid: ", cameraName); return hasSucceeded; } void CommandSetFollowVehicleCamHighAngleModeThisUpdate(bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptOverriddenFollowVehicleCameraHighAngleModeThisUpdate(state); } void CommandSetFollowVehicleCamHighAngleModeEveryUpdate(bool ShouldOverride, bool OverriddenState) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptOverriddenFollowVehicleCameraHighAngleModeEveryUpdate(ShouldOverride, OverriddenState); } ////////////////////////////////////////////////////////////////////////// // Table games camera API bool CommandSetTableGamesCameraThisUpdate(int cameraNameHash) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); const atHashString cameraName((u32)cameraNameHash); if (!SCRIPT_VERIFY(cameraName.IsNotNull(), "SET_TABLE_GAMES_CAMERA_THIS_UPDATE - NULL camera name")) { return false; } tGameplayCameraSettings settings(nullptr, cameraName.GetHash(), 0); //interpolation duration is red from the camera metadata. const bool hasSucceeded = camInterface::GetGameplayDirector().SetScriptOverriddenTableGamesCameraSettingsThisUpdate(settings); SCRIPT_ASSERT_TWO_STRINGS(hasSucceeded, "SET_TABLE_GAMES_CAMERA_THIS_UPDATE has failed. Is this camera name valid: %s", SAFE_CSTRING(cameraName.GetCStr())); return hasSucceeded; } bool CommandIsTableGamesCameraActive() { return camInterface::GetGameplayDirector().IsTableGamesCameraRunning(); } ////////////////////////////////////////////////////////////////////////// //Deprecated! Replaced by CommandSetFollowVehicleCamViewMode void CommandSetGameFollowVehicleCamZoomLevel(int viewMode) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); //NOTE: The new view modes now match the legacy zoom levels, so it is not necessary to map the enum. ASSERT_ONLY(const bool hasSucceeded =) camControlHelper::SetViewModeForContext(camControlHelperMetadataViewMode::IN_VEHICLE, viewMode); SCRIPT_ASSERT(hasSucceeded, "SET_FOLLOW_VEHICLE_CAM_ZOOM_LEVEL failed, is the view mode valid?"); } int CommandGetFollowVehicleCamViewMode() { const int viewMode = camControlHelper::GetViewModeForContext(camControlHelperMetadataViewMode::IN_VEHICLE); return viewMode; } void CommandSetFollowVehicleCamViewMode(int viewMode) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); ASSERT_ONLY(const bool hasSucceeded =) camControlHelper::SetViewModeForContext(camControlHelperMetadataViewMode::IN_VEHICLE, viewMode); SCRIPT_ASSERT(hasSucceeded, "SET_FOLLOW_VEHICLE_CAM_VIEW_MODE failed, is the view mode valid?"); } int CommandGetCamViewModeForContext(int context) { const int viewMode = camControlHelper::GetViewModeForContext(context); return viewMode; } void CommandSetCamViewModeForContext(int context, int viewMode) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); ASSERT_ONLY(const bool hasSucceeded =) camControlHelper::SetViewModeForContext(context, viewMode); SCRIPT_ASSERT(hasSucceeded, "SET_CAM_VIEW_MODE_FOR_CONTEXT failed, are the context and view mode valid?"); } int CommandGetCamActiveViewModeContext() { const int viewModeContext = camInterface::GetGameplayDirector().GetActiveViewModeContext(); return viewModeContext; } void CommandUseVehicleCamStuntSettingsThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().ScriptRequestVehicleCamStuntSettingsThisUpdate(); } void CommandUseDedicatedStuntCameraThisUpdate(const char* stuntCameraName) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().ScriptRequestDedicatedStuntCameraThisUpdate(stuntCameraName); } void CommandForceVehicleCamStuntSettingsThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().ScriptForceVehicleCamStuntSettingsThisUpdate(); } void CommandSetFollowVehicleCamSeatThisUpdate(int seatIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().ScriptOverrideFollowVehicleCameraSeatThisUpdate(seatIndex); } bool CommandIsGameAimCamActive() { const bool isActive = camInterface::GetGameplayDirector().IsAiming(); return isActive; } bool CommandIsGameAimCamActiveInAccurateMode() { const camThirdPersonAimCamera* camera = camInterface::GetGameplayDirector().GetThirdPersonAimCamera(); const bool isInAccurateMode = camera && camera->IsInAccurateMode(); return isInAccurateMode; } bool CommandIsGameFirstPersonAimCamActive() { const bool isActive = camInterface::GetGameplayDirector().IsFirstPersonAiming(); return isActive; } void CommandDisableGameAimCamThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); CPed* followPed = const_cast(camInterface::FindFollowPed()); if(followPed && followPed->IsLocalPlayer()) { CPlayerInfo* playerInfo = followPed->GetPlayerInfo(); if(playerInfo) { playerInfo->GetPlayerResetFlags().SetFlag(CPlayerResetFlags::PRF_DISABLE_AIM_CAMERA); } } } //Deprecated! We no longer maintain a separate view mode for on foot aiming. int CommandGetPedAimCamViewMode() { return camControlHelperMetadataViewMode::THIRD_PERSON_MEDIUM; } //Deprecated! We no longer maintain a separate view mode for on foot aiming. void CommandSetPedAimCamViewMode(int UNUSED_PARAM(viewMode)) { } float CommandGetGameFirstPersonAimCamZoomFactor() { const float zoomFactor = camControlHelper::GetZoomFactor(); return zoomFactor; } void CommandSetGameFirstPersonAimCamZoomFactor(float zoomFactor) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camControlHelper::SetZoomFactor(zoomFactor); } void CommandSetGameFirstPersonAimCamZoomFactorLimitsThisUpdate(float minZoomFactor, float maxZoomFactor) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camControlHelper::OverrideZoomFactorLimits(minZoomFactor, maxZoomFactor); } void CommandSetGameFirstPersonAimCamNearClipThisUpdate(float NearClip) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); cameraDebugf3("%u SET_FIRST_PERSON_AIM_CAM_NEAR_CLIP_THIS_UPDATE %.3f %s", fwTimer::GetFrameCount(), NearClip, CTheScripts::GetCurrentScriptNameAndProgramCounter()); camInterface::GetGameplayDirector().SetScriptOverriddenFirstPersonAimCameraNearClipThisUpdate(NearClip); } void CommandSetGameThirdPersonAimCamNearClipThisUpdate(float NearClip) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); cameraDebugf3("%u SET_THIRD_PERSON_AIM_CAM_NEAR_CLIP_THIS_UPDATE %.3f %s", fwTimer::GetFrameCount(), NearClip, CTheScripts::GetCurrentScriptNameAndProgramCounter()); camInterface::GetGameplayDirector().SetScriptOverriddenThirdPersonAimCameraNearClipThisUpdate(NearClip); } void CommandSetGameFirstPersonAimCamRelativeHeadingLimitsThisUpdate(float minRelativeHeading, float maxRelativeHeading) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); const float minRelativeHeadingToApply = fwAngle::LimitRadianAngleSafe(minRelativeHeading * DtoR); const float maxRelativeHeadingToApply = fwAngle::LimitRadianAngleSafe(maxRelativeHeading * DtoR); Vector2 limits(minRelativeHeadingToApply, maxRelativeHeadingToApply); camInterface::GetGameplayDirector().SetScriptOverriddenFirstPersonAimCameraRelativeHeadingLimitsThisUpdate(limits); } void CommandSetGameFirstPersonAimCamRelativePitchLimitsThisUpdate(float minRelativePitch, float maxRelativePitch) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); minRelativePitch = Clamp(minRelativePitch, -90.0f, 90.0f); maxRelativePitch = Clamp(maxRelativePitch, -90.0f, 90.0f); Vector2 limits(minRelativePitch, maxRelativePitch); limits.Scale(DtoR); camInterface::GetGameplayDirector().SetScriptOverriddenFirstPersonAimCameraRelativePitchLimitsThisUpdate(limits); } void CommandSetAllowCustomVehicleDriveByCamThisUpdate(bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetShouldAllowCustomVehicleDriveByCamerasThisUpdate(state); } void CommandForceTightSpaceCustomFramingThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); cameraDebugf3("Script is forcing the tight space custom framing this update"); camInterface::GetGameplayDirector().ScriptForceUseTightSpaceCustomFramingThisUpdate(); } bool CommandIsSphereVisible( const scrVector &scrVecCoors, float radius) { Vector3 vCoors (scrVecCoors); return camInterface::IsSphereVisibleInGameViewport(vCoors, radius); } void CommandShakeGameplayCam(const char* ShakeName, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().Shake(ShakeName, fAmplitudeScalar); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeName(ShakeName); camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } bool CommandIsGameplayCamShaking() { bool isShaking = camInterface::GetGameplayDirector().IsShaking(); return isShaking; } void CommandSetGameplayCamShakeAmplitude(float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetShakeAmplitude(fAmplitudeScalar); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } void CommandStopGameplayCamShaking(bool shouldStopImmediately) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().StopShaking(shouldStopImmediately); #if __BANK camInterface::GetScriptDirector().DebugSetScriptDisabledShake(); #endif // __BANK } void CommandBypassCutsceneCamRenderingThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCutsceneDirector().BypassRenderingThisUpdate(); } void CommandShakeCutsceneCam(const char* ShakeName, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCutsceneDirector().Shake(ShakeName, fAmplitudeScalar); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeName(ShakeName); camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } bool CommandIsCutsceneCamShaking() { bool isShaking = camInterface::GetCutsceneDirector().IsShaking(); return isShaking; } void CommandSetCutsceneCamShakeAmplitude(float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCutsceneDirector().SetShakeAmplitude(fAmplitudeScalar); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } void CommandStopCutsceneCamShaking(bool shouldStopImmediately) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCutsceneDirector().StopShaking(shouldStopImmediately); #if __BANK camInterface::GetScriptDirector().DebugSetScriptDisabledShake(); #endif // __BANK } void CommandSetCutsceneCamFarClipThisUpdate(float farClip) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); //NOTE: This functionality is multiplayer-only, as the single player game is now locked. if(NetworkInterface::IsGameInProgress()) { camInterface::GetCutsceneDirector().OverrideFarClipThisUpdate(farClip); } } void CommandSetGameplayCamFollowPedThisUpdate(int pedIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); const CPed* ped = CTheScripts::GetEntityToQueryFromGUID(pedIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); cameraDebugf2("SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE: pedIndex %d pedName %s pedPosition <%.3f,%.3f,%.3f>", pedIndex, ped? ped->GetModelName() : "INVALID PED", ped ? VEC3V_ARGS(ped->GetMatrix().d()) : VEC3V_ARGS(Vec3V(V_ZERO))); if(ped) { camInterface::SetScriptControlledFollowPedThisUpdate(ped); } } bool CommandIsGameplayCamRendering() { const camGameplayDirector& gameplayDirector = camInterface::GetGameplayDirector(); const bool isRendering = camInterface::IsDominantRenderedDirector(gameplayDirector); return isRendering; } //Cinematic void CommandSetCinematicButtonActive(bool bActive) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().SetCinematicButtonDisabledByScriptState(!bActive); } bool CommandIsCinematicCamRendering() { const camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); const bool isRendering = camInterface::IsDominantRenderedDirector(cinematicDirector); return isRendering; } void CommandShakeCinematicCam(const char* ShakeName, float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().Shake(ShakeName, fAmplitudeScalar); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeName(ShakeName); camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } bool CommandIsCinematicCamShaking() { bool isShaking = camInterface::GetCinematicDirector().IsShaking(); return isShaking; } void CommandSetCinematicCamShakeAmplitude(float fAmplitudeScalar) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().SetShakeAmplitude(fAmplitudeScalar); #if __BANK camInterface::GetScriptDirector().DebugSetScriptEnabledShakeAmplitude(fAmplitudeScalar); #endif // __BANK } void CommandStopCinematicCamShaking(bool shouldStopImmediately) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().StopShaking(shouldStopImmediately); #if __BANK camInterface::GetScriptDirector().DebugSetScriptDisabledShake(); #endif // __BANK } void CommandDisableCinematicBonnetCameraThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().DisableFirstPersonInVehicleThisUpdate(); } void CommandDisableCinematicVehicleIdleModeThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().DisableVehicleIdleModeThisUpdate(); } void CommandInvalidateCinematicVehicleIdleMode() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().InvalidateCinematicVehicleIdleMode(); } bool CommandIsCinematicIdleCamRendering() { return camInterface::GetCinematicDirector().IsRenderingCinematicIdleCamera(); } void CommandDisableCinematicSlowModeThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().DisableCinematicSlowMoThisUpdate(); } bool CommandIsBonnetCinematicCamRendering() { // Note: this also returns true for point of view cinematic mounted cameras. return camInterface::GetCinematicDirector().IsRenderingCinematicMountedCamera(); } bool CommandIsCinematicCamInputActive() { return camInterface::GetCinematicDirector().IsCinematicInputActive(); } bool CommandIsCinematicFirstPersonVehicleInteriorCamRendering() { return camInterface::GetCinematicDirector().IsRenderingCinematicPointOfViewCamera(); } void CommandInvalidateIdleCam() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().InvalidateIdleCamera(); } void CommandCreateCinematicShot(int ShotRef, int Duration, int AttachEntityIndex, int LookAtEntityIndex) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); camBaseCinematicContext* pContext = cinematicDirector.FindContext(camCinematicScriptContext::GetStaticClassId()); if(pContext) { camCinematicScriptContext* pScriptContext = static_cast(pContext); scrThreadId scriptThreadId = CTheScripts::GetCurrentGtaScriptThread()->GetThreadId(); const CEntity* pAttachEntity = NULL; const CEntity* pLookAtEntity = NULL; if(AttachEntityIndex != NULL_IN_SCRIPTING_LANGUAGE) { pAttachEntity = CTheScripts::GetEntityToQueryFromGUID(AttachEntityIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if(!scriptVerifyf(pAttachEntity, "COMMAND_CREATE_CINEMATIC_SHOT: Attach entity is null %s", CTheScripts::GetCurrentScriptNameAndProgramCounter())) { return; } } if(LookAtEntityIndex != NULL_IN_SCRIPTING_LANGUAGE) { pLookAtEntity = CTheScripts::GetEntityToQueryFromGUID(LookAtEntityIndex, CTheScripts::GUID_ASSERT_FLAGS_NO_DEAD_CHECK); if(!scriptVerifyf(pLookAtEntity, "COMMAND_CREATE_CINEMATIC_SHOT: Look at entity is null %s", CTheScripts::GetCurrentScriptNameAndProgramCounter())) { return; } } if(!pScriptContext->CreateScriptCinematicShot((u32)ShotRef, Duration, scriptThreadId, pAttachEntity, pLookAtEntity)) { scriptAssertf( 0, "CREATE_CINEMATIC_SHOT: %s: Failed to create a cinematic shot: %d", CTheScripts::GetCurrentScriptNameAndProgramCounter(), ShotRef); } } } bool CommandIsCinematicShotActive(int ShotRef) { camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); camBaseCinematicContext* pContext = cinematicDirector.FindContext(camCinematicScriptContext::GetStaticClassId()); bool IsActive = false; if(pContext->IsValid()) { camCinematicScriptContext* pScriptContext = static_cast(pContext); if(pScriptContext) { IsActive = pScriptContext->IsScriptCinematicShotActive((u32)ShotRef); } } return IsActive; } void CommandStopCinematicShot(int ShotRef) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); camBaseCinematicContext* pContext = cinematicDirector.FindContext(camCinematicScriptContext::GetStaticClassId()); if(pContext->IsValid()) { camCinematicScriptContext* pScriptContext = static_cast(pContext); if(pScriptContext) { scrThreadId scriptThreadId = CTheScripts::GetCurrentGtaScriptThread()->GetThreadId(); if(!pScriptContext->DeleteCinematicShot((u32)ShotRef, scriptThreadId)) { scriptAssertf(0,"STOP_CINEMATIC_SHOT: %s: Failed to delete cinematic shot %d", CTheScripts::GetCurrentScriptNameAndProgramCounter(), ShotRef ); } } } } bool CommandIsCinematicShotRendering(int ShotRef) { camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); camBaseCinematicContext* pContext = cinematicDirector.FindContext(camCinematicScriptContext::GetStaticClassId()); bool IsRendering = false; if(pContext) { const camCinematicScriptContext* pScriptContext = static_cast(pContext); if(pScriptContext->IsValid()) { const camBaseCinematicShot* pShot = static_cast(pScriptContext->GetCurrentShot()); if(pShot && pShot->GetNameHash () == (u32)ShotRef) { const camBaseCamera* renderedCamera = camInterface::GetDominantRenderedCamera(); if(renderedCamera && pContext->GetCurrentShotsCamera() && renderedCamera == pContext->GetCurrentShotsCamera()) { IsRendering = true; } } } } return IsRendering; } void CommandScriptForceCinematicRenderingThisUpdate(bool OverrideCinematicInput) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().SetScriptOverridesCinematicInputThisFrame(OverrideCinematicInput); } void CommandSetCinematicNewsChannelActiveThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().SetCanActivateNewsChannelContext(true); } void CommandCinematicMissionCreatorFailContextActiveThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().SetCanActivateMissionCreatorFailContext(true); } void CommandSetCinematicModeActive(bool Active) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().SetCinematicLatchedStateForScript(Active); } bool CommandRegisterRaceCheckPoint(const scrVector &scrVecCoors) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vCoors (scrVecCoors); camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); camBaseCinematicContext* pContext = cinematicDirector.FindContext(camCinematicScriptedRaceCheckPointContext::GetStaticClassId()); if(pContext) { camCinematicScriptedRaceCheckPointContext* pScriptContext = static_cast(pContext); if(pScriptContext) { return pScriptContext->RegisterPosition(vCoors); } } return false; } bool CommandIsInVehicleMobilePhoneCameraRendering() { bool IsRendering = false; const camBaseCamera* renderedCamera = camInterface::GetDominantRenderedCamera(); camCinematicDirector& cinematicDirector = camInterface::GetCinematicDirector(); //First check the custom first-person context that is conventionally used for the mobile phone camera in a vehicle. camBaseCinematicContext* pContext = cinematicDirector.FindContext(camCinematicInVehicleOverriddenFirstPersonContext::GetStaticClassId()); if(pContext) { const camCinematicInVehicleOverriddenFirstPersonContext* pFirstPersonContext = static_cast(pContext); if(pFirstPersonContext) { if(pFirstPersonContext->IsValid()) { const camBaseCinematicShot* pShot = static_cast(pFirstPersonContext->GetCurrentShot()); if(pShot) { if(renderedCamera && pContext->GetCurrentShotsCamera() && renderedCamera == pContext->GetCurrentShotsCamera()) { IsRendering = true; } } } } } if(!IsRendering) { //Otherwise, check the context that is used to render a first-person POV shot for passengers in certain vehicles within Multiplayer. pContext = cinematicDirector.FindContext(camCinematicInVehicleMultiplayerPassengerContext::GetStaticClassId()); if(pContext) { const camCinematicInVehicleMultiplayerPassengerContext* pMultiplayerPassengerContext = static_cast(pContext); if(pMultiplayerPassengerContext) { if(pMultiplayerPassengerContext->IsValid()) { const camBaseCinematicShot* pShot = static_cast(pMultiplayerPassengerContext->GetCurrentShot()); if(pShot) { if(renderedCamera && pContext->GetCurrentShotsCamera() && renderedCamera == pContext->GetCurrentShotsCamera()) { IsRendering = true; } } } } } } return IsRendering; } void CommandIgnoreMenuPreferenceForBonnetCameraThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetCinematicDirector().IgnoreMenuPreferenceForBonnetCameraThisUpdate(); } //Hint //legacy void CommandSetGameplayHintRelativePitch(float UNUSED_PARAM(relativePitch), float UNUSED_PARAM(smoothRate)) { //camInterface::GetGameplayDirector().GetHintHelper().SetDesiredRelativePitch(relativePitch * DtoR, smoothRate); } void CommandSetGameplayHintFov(float fFov) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(fFov >= g_MinFov && fFov <= g_MaxFov) { camInterface::GetGameplayDirector().SetScriptHintFov(fFov); } } void CommandSetGameplayHintFollowDistanceScalar(float Distance) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptHintDistanceScalar(Distance); } void CommandSetGameplayHintBaseOrbitPitchOffset(float fOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptHintBaseOrbitPitchOffset(fOffset); } void CommandSetGameplayHintCameraRelativeSideOffsetAdditive(float fOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptHintCameraRelativeSideOffsetAdditive(fOffset); } void CommandSetGameplayHintCameraRelativeVerticalOffsetAdditive(float fOffset) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptHintCameraRelativeVerticalOffsetAdditive(fOffset); } void CommandSetGameplayHintCameraBlendToFollowPedMediumViewMode(bool state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptHintCameraBlendToFollowPedMediumViewMode(state); } void CommandSetGameplayCoordHint(const scrVector &scrVecCoors,int dwellDuration, int interpolateInDuration, int interpolateOutDuration, int HintType) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vCoors (scrVecCoors); camInterface::GetGameplayDirector().StartHinting(vCoors, interpolateInDuration, dwellDuration, interpolateOutDuration, HintType); } void CommandSetGameplayEntityHint(int EntityIndex, const scrVector &scrOffset, bool bRelativeOffset, int dwellDuration, int interpolateInDuration, int interpolateOutDuration, int HintType) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 OffsetCoords (scrOffset); CEntity* pEntity = CTheScripts::GetEntityToModifyFromGUID(EntityIndex, CTheScripts::GUID_ASSERT_FLAGS_INCLUDE_CLONES); if (pEntity) { camInterface::GetGameplayDirector().StartHinting(pEntity, OffsetCoords , bRelativeOffset , interpolateInDuration, dwellDuration, interpolateOutDuration, HintType); } } bool CommandIsGameplayHintActive() { if (!camInterface::GetGameplayDirector().IsCodeHintActive() && camInterface::GetGameplayDirector().IsHintActive()) { return true; } return false; } bool CommandIsCodeGameplayHintActive() { return camInterface::GetGameplayDirector().IsCodeHintActive(); } void CommandStopGameplayHint(bool bStopImmediately) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(!camInterface::GetGameplayDirector().IsCodeHintActive() BANK_ONLY(&& !camInterface::GetGameplayDirector().IsDebugHintActive())) { camInterface::GetGameplayDirector().StopHinting(bStopImmediately); } } void CommandStopCodeGamePlayHint(bool bStopImmediately) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(camInterface::GetGameplayDirector().IsCodeHintActive()) { camInterface::GetGameplayDirector().StopHinting(bStopImmediately); } } void CommandStopGameplayHintBeingCancelledUsingRightStick(bool UNUSED_PARAM(bCanCancel)) { //Deprecated. //camInterface::GetGameplayDirector().SetStopHintBeingCancelled(bCanCancel); } void CommmandBlockCodeHintThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().BlockCodeHintThisUpdate(); } //Cached frame scrVector CommandGetRenderedCamCoord() { return camInterface::GetPos(); } scrVector CommandGetRenderedCamRot (int RotOrder) { Vector3 vRot(VEC3_ZERO); const Matrix34& worldMatrix = camInterface::GetMat(); vRot = CScriptEulers::MatrixToEulers(worldMatrix, static_cast(RotOrder)); vRot *= RtoD; return vRot; } scrVector CommandGetRenderedRemotePlayerCamRot(int PlayerIndex, int RotOrder) { Vector3 vRot(VEC3_ZERO); CPed *pPlayerPed = CTheScripts::FindNetworkPlayerPed(PlayerIndex); if(pPlayerPed) { SCRIPT_ASSERT(!pPlayerPed->IsLocalPlayer(), "GET_FINAL_RENDERED_REMOTE_PLAYER_CAM_ROT - Can't call this on the local player!"); if(!pPlayerPed->IsLocalPlayer()) { Matrix34 worldMatrix; NetworkInterface::GetRemotePlayerCameraMatrix(pPlayerPed, worldMatrix); vRot = CScriptEulers::MatrixToEulers(worldMatrix, static_cast(RotOrder)); vRot *= RtoD; } } return vRot; } float CommandGetRenderedCamFov() { return camInterface::GetFov(); } float CommandGetRenderedRemotePlayerCamFov(int PlayerIndex) { CPed *pPlayerPed = CTheScripts::FindNetworkPlayerPed(PlayerIndex); if(pPlayerPed) { SCRIPT_ASSERT(!pPlayerPed->IsLocalPlayer(), "GET_FINAL_RENDERED_REMOTE_PLAYER_CAM_FOV - Can't call this on the local player!"); if(!pPlayerPed->IsLocalPlayer()) { return NetworkInterface::GetRemotePlayerCameraFov(pPlayerPed); } } return g_DefaultFov; } float CommandGetRenderedCamNearClip() { return camInterface::GetNear(); } float CommandGetRenderedCamFarClip() { return camInterface::GetFar(); } float CommandGetRenderedCamNearDof() { return camInterface::GetNearDof(); } float CommandGetRenderedCamFarDof() { return camInterface::GetFarDof(); } float CommandGetRenderedCamMotionBlurStrength() { return camInterface::GetMotionBlurStrength(); } void CommandUseScriptCamForAmbientPopulationOriginThisFrame(bool bVehicles, bool bPeds) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(camInterface::GetScriptDirector().IsRendering()) { if(bVehicles) CVehiclePopulation::SetScriptCamPopulationOriginOverride(); if(bPeds) CPedPopulation::SetScriptCamPopulationOriginOverride(); } } void CommandSetFollowPedCamLadderAlignThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camFollowPedCamera* followPedCamera = camInterface::GetGameplayDirector().GetFollowPedCamera(); if(followPedCamera) { followPedCamera->SetScriptForceLadder(true); } } void CommandSetThirdPersonOrbitDistanceThisUpdate(float minDistance, float maxDistance) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector2 limits(minDistance, maxDistance); camInterface::GetGameplayDirector().SetScriptOverriddenThirdPersonCameraOrbitDistanceLimitsThisUpdate(limits); } void CommandSetThirdPersonRelativePitchThisUpdate(float minRelativePitch, float maxRelativePitch) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); minRelativePitch = Clamp(minRelativePitch, -90.0f, 90.0f); maxRelativePitch = Clamp(maxRelativePitch, -90.0f, 90.0f); Vector2 limits(minRelativePitch, maxRelativePitch); limits.Scale(DtoR); camInterface::GetGameplayDirector().SetScriptOverriddenThirdPersonCameraRelativePitchLimitsThisUpdate(limits); } void CommandSetThirdPersonRelativeHeadingThisUpdate(float minRelativeHeading, float maxRelativeHeading) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); minRelativeHeading = Clamp(minRelativeHeading, -180.0f, 180.0f); maxRelativeHeading = Clamp(maxRelativeHeading, -180.0f, 180.0f); Vector2 limits(minRelativeHeading, maxRelativeHeading); limits.Scale(DtoR); camInterface::GetGameplayDirector().SetScriptOverriddenThirdPersonCameraRelativeHeadingLimitsThisUpdate(limits); } void CommandSetInVehicleCameraStateThisUpdate(int VehicleIndex, int CamInVehicleState ) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if(CamInVehicleState != camGameplayDirector::OUTSIDE_VEHICLE) { CVehicle* pVehicle = CTheScripts::GetEntityToModifyFromGUID(VehicleIndex, CTheScripts::GUID_ASSERT_FLAGS_INCLUDE_CLONES); if(pVehicle) { camInterface::GetGameplayDirector().SetScriptOverriddenVehicleExitEntryState(pVehicle, CamInVehicleState); } else { return; } } else { camInterface::GetGameplayDirector().SetScriptOverriddenVehicleExitEntryState(NULL, CamInVehicleState); } } void CommandDisableOnFootFirstPersonViewThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); FPS_MODE_SUPPORTED_ONLY( camInterface::GetGameplayDirector().DisableFirstPersonThisUpdate(NULL, true); ) } void CommandDisableFirstPersonFlashEffectThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); FPS_MODE_SUPPORTED_ONLY( camManager::SuppressFirstPersonFlashEffectsThisFrame(true); ) } void CommandForceThirdPersonAferAimingBlendThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().ForceAfterAimingBlendThisUpdate(); } void CommandDisableThirdPersonAferAimingBlendThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().DisableAfterAimingBlendThisUpdate(); } void CommandBlockFirstPersonOrientationResetThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camFirstPersonShooterCamera* firstPersonShooterCamera = camInterface::GetGameplayDirector().GetFirstPersonShooterCamera(); if(firstPersonShooterCamera) { firstPersonShooterCamera->SetScriptPreventingOrientationResetWhenRenderingAnotherCamera(); } } //to be removed void CommandSetGameplayPedHint( int PedIndex, const scrVector &scrOffset, bool bRelativeOffset, int dwellDuration, int interpolateInDuration, int interpolateOutDuration ) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vOffset (scrOffset); CPed* pPed = CTheScripts::GetEntityToModifyFromGUID(PedIndex, CTheScripts::GUID_ASSERT_FLAGS_INCLUDE_CLONES); if (pPed) { camInterface::GetGameplayDirector().StartHinting(pPed, vOffset , bRelativeOffset , interpolateInDuration, dwellDuration, interpolateOutDuration, 0); } } //to be removed void CommandSetGameplayVehicleHint(int VehicleIndex, const scrVector &scrOffset, bool bRelativeOffset, int dwellDuration, int interpolateInDuration, int interpolateOutDuration ) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vOffset (scrOffset); CVehicle* pVehicle = CTheScripts::GetEntityToModifyFromGUID(VehicleIndex, CTheScripts::GUID_ASSERT_FLAGS_INCLUDE_CLONES); if (pVehicle) { camInterface::GetGameplayDirector().StartHinting(pVehicle, vOffset , bRelativeOffset , interpolateInDuration, dwellDuration, interpolateOutDuration, 0); } } //to be removed void CommandSetGameplayObjectHint(int ObjectIndex , const scrVector &scrOffset, bool bRelativeOffset, int dwellDuration, int interpolateInDuration, int interpolateOutDuration) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); Vector3 vOffset (scrOffset); CObject* pObject = CTheScripts::GetEntityToModifyFromGUID(ObjectIndex, CTheScripts::GUID_ASSERT_FLAGS_INCLUDE_CLONES); if (pObject) { camInterface::GetGameplayDirector().StartHinting(pObject, vOffset , bRelativeOffset , interpolateInDuration, dwellDuration, interpolateOutDuration, 0); } } int CommandGetFocusPedOnScreen(float maxValidDistance, int screenPositionTestBoneTag, float maxScreenWidthRatioAroundCentreForTestBone, float maxScreenHeightRatioAroundCentreForTestBone, float minRelativeHeadingScore, float maxScreenCentreScoreBoost, float maxScreenRatioAroundCentreForScoreBoost, int losTestBoneTag1, int losTestBoneTag2) { CPed* focusPed = camInterface::ComputeFocusPedOnScreen(maxValidDistance, screenPositionTestBoneTag, maxScreenWidthRatioAroundCentreForTestBone, maxScreenHeightRatioAroundCentreForTestBone, minRelativeHeadingScore, maxScreenCentreScoreBoost, maxScreenRatioAroundCentreForScoreBoost, losTestBoneTag1, losTestBoneTag2); int focusPedIndex = focusPed ? CTheScripts::GetGUIDFromEntity(*focusPed) : 0; return focusPedIndex; } void CommandDisableNearClipScanThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::DisableNearClipScanThisUpdate(); } void CommandSetCamDeathFailEffectState(s32 state) { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::SetDeathFailEffectState(state); } void CommandStartCameraCapture(int BANK_ONLY(cameraIndex), const char* BANK_ONLY(animName)) { #if __BANK REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camBaseCamera* pCamera = GetCameraFromIndex(cameraIndex, "START_CAMERA_CAPTURE"); if (pCamera) { camBaseCamera::Pool *pBaseCameraPool = camBaseCamera::GetPool(); if(SCRIPT_VERIFY(pBaseCameraPool, "START_CAMERA_CAPTURE - Could not get specified camera!")) { for(int i = 0; i < pBaseCameraPool->GetSize(); i ++) { if(pCamera == pBaseCameraPool->GetSlot(i)) { cameraIndex = i; break; } } if(SCRIPT_VERIFY(pCamera == pBaseCameraPool->GetSlot(cameraIndex), "START_CAMERA_CAPTURE")) { if (SCRIPT_VERIFY(animName && strlen(animName) > 0, "START_CAMERA_CAPTURE - No anim name was specified!")) { if (SCRIPT_VERIFY(!CAnimViewer::m_bCameraCapture_Started, "START_CAMERA_CAPTURE - Camera capture is already running!")) { CAnimViewer::CameraCapture_Start(cameraIndex, animName); } } } } } #endif } void CommandStopCameraCapture() { #if __BANK REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); if (SCRIPT_VERIFY(CAnimViewer::m_bCameraCapture_Started, "STOP_CAMERA_CAPTURE - Camera capture has not been started!")) { CAnimViewer::CameraCapture_Stop(); } #endif } void CommandSetFirstPersonFlashEffectType(s32 type) { #if FPS_MODE_SUPPORTED REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetScriptDirector().SetFirstPersonFlashEffectType((u32)type); #endif //FPS_MODE_SUPPORTED } void CommandSetFirstPersonFlashEffectVehicleModelName(const char * pName) { #if FPS_MODE_SUPPORTED REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetScriptDirector().SetFirstPersonFlashEffectVehicleModelHash(atStringHash(pName)); #endif //FPS_MODE_SUPPORTED } void CommandSetFirstPersonFlashEffectVehicleModelHash(int modelHash) { #if FPS_MODE_SUPPORTED REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetScriptDirector().SetFirstPersonFlashEffectVehicleModelHash((u32)modelHash); #endif //FPS_MODE_SUPPORTED } bool CommandIsAllowedIndependentCameraModes() { #if FPS_MODE_SUPPORTED const bool bAllowIndependentViewModes = (CPauseMenu::GetMenuPreference( PREF_FPS_PERSISTANT_VIEW ) == TRUE); return bAllowIndependentViewModes; #else return true; #endif } void CommandPreventCollisionSettingsForTripleHeadInInteriorsThisUpdate() { REGISTER_CAMERA_SCRIPT_COMMAND_NO_ARGS(); camInterface::GetGameplayDirector().SetScriptPreventCollisionSettingsForTripleHeadInInteriorsThisUpdate(); } float CommandReplayGetMaxDistanceAllowedFromPlayer() { #if GTA_REPLAY return camInterface::GetReplayDirector().GetMaxDistanceAllowedFromPlayer(); #else return 0.0f; #endif } // // -------------------------------------------------------------------- // void SetupScriptCommands() { //Render cams SCR_REGISTER_SECURE(RENDER_SCRIPT_CAMS,0x850d4ef3d40fb068, CommandRenderScriptCams); SCR_REGISTER_SECURE(STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP,0xbaea2321313356d0, CommandStopRenderingScriptCamsUsingCatchUp); //create/destroy SCR_REGISTER_SECURE(CREATE_CAM,0xb93a4265cb0f5b1f, CommandCreateCam); SCR_REGISTER_SECURE(CREATE_CAM_WITH_PARAMS,0x6729fa3af971be2a, CommandCreateCamWithParams); SCR_REGISTER_SECURE(CREATE_CAMERA,0xae96f9aff21228dc, CommandCreateCameraFromHash); SCR_REGISTER_SECURE(CREATE_CAMERA_WITH_PARAMS,0x1bcec0b1056bd6ac, CommandCreateCameraWithParams); SCR_REGISTER_SECURE(DESTROY_CAM,0x588ddcb644c6486a, CommandDestroyCam); SCR_REGISTER_SECURE(DESTROY_ALL_CAMS,0x4b248030f70a5d8b, CommandDestroyAllCams); SCR_REGISTER_SECURE(DOES_CAM_EXIST,0x876b1078e90c91cb, CommandDoesCamExist); //activate cam SCR_REGISTER_SECURE(SET_CAM_ACTIVE,0xdd786b89b15aa63f, CommandSetCamActive); SCR_REGISTER_SECURE(IS_CAM_ACTIVE,0xa24fda4986456697, CommandIsCamActive); SCR_REGISTER_SECURE(IS_CAM_RENDERING,0x4b0b4e357722c507, CommandIsCamRendering); SCR_REGISTER_SECURE(GET_RENDERING_CAM,0x0065a2cb8ececaf1, CommandGetRenderingCam); //frame parameters SCR_REGISTER_SECURE(GET_CAM_COORD,0x97a9bb81c66772b5, CommandGetCamCoord); SCR_REGISTER_SECURE(GET_CAM_ROT,0xe42645792657f001, CommandGetCamRotation); SCR_REGISTER_SECURE(GET_CAM_FOV,0x703cb0b4057dddf5, CommandGetCamFov); SCR_REGISTER_SECURE(GET_CAM_NEAR_CLIP,0x998fe8dab2221f27, CommandGetCamNearClip); SCR_REGISTER_SECURE(GET_CAM_FAR_CLIP,0x9953cc74efa4f571, CommandGetCamFarClip); SCR_REGISTER_SECURE(GET_CAM_NEAR_DOF,0xc2612d223d915a1c, CommandGetCamNearDof); SCR_REGISTER_SECURE(GET_CAM_FAR_DOF,0x1abe956c93973baa, CommandGetCamFarDof); SCR_REGISTER_SECURE(GET_CAM_DOF_STRENGTH,0x06d153c0b99b6128, CommandGetCamDofStrength); SCR_REGISTER_UNUSED(GET_CAM_DOF_PLANES,0xa914246d4f8a957c, CommandGetCamDofPlanes); SCR_REGISTER_UNUSED(GET_CAM_USE_SHALLOW_DOF_MODE,0xd119f6b1fb0b65b6, CommandGetCamUseShallowDofMode); SCR_REGISTER_UNUSED(GET_CAM_MOTION_BLUR_STRENGTH,0xf1ccbbc140a5d518, CommandGetCamMotionBlurStrength); SCR_REGISTER_SECURE(SET_CAM_PARAMS,0x15f5db94f871e803, CommandSetCamParams); SCR_REGISTER_SECURE(SET_CAM_COORD,0xdee4f5f0b93be664, CommandSetCamCoord); SCR_REGISTER_SECURE(SET_CAM_ROT,0x93150d31ce38fe75, CommandSetCamRotation); SCR_REGISTER_SECURE(SET_CAM_FOV,0x0a18c027350d3c19, CommandSetCamFov); SCR_REGISTER_SECURE(SET_CAM_NEAR_CLIP,0x74789da66781db64, CommandSetCamNearClip); SCR_REGISTER_SECURE(SET_CAM_FAR_CLIP,0xac79343a28cea8e0, CommandSetCamFarClip); SCR_REGISTER_SECURE(FORCE_CAM_FAR_CLIP,0xd9b532b49a80dfe1, CommandForceCamFarClip); SCR_REGISTER_SECURE(SET_CAM_MOTION_BLUR_STRENGTH,0x8e55b7fed2291f41, CommandSetCamMotionBlurStrength); //depth of field SCR_REGISTER_SECURE(SET_CAM_NEAR_DOF,0x1d809c24759a3fed, CommandSetCamNearDof); SCR_REGISTER_SECURE(SET_CAM_FAR_DOF,0xe13ce1cd336ffac9, CommandSetCamFarDof); SCR_REGISTER_SECURE(SET_CAM_DOF_STRENGTH,0xd6a650055b44902e, CommandSetCamDofStrength); SCR_REGISTER_SECURE(SET_CAM_DOF_PLANES,0xe5744a8f282963ce, CommandSetCamDofPlanes); SCR_REGISTER_SECURE(SET_CAM_USE_SHALLOW_DOF_MODE,0xcaadf41aa439a01f, CommandSetCamUseShallowDofMode); SCR_REGISTER_SECURE(SET_USE_HI_DOF,0x44908cda9d1050c9, CommandUseHiDof); SCR_REGISTER_SECURE(SET_USE_HI_DOF_ON_SYNCED_SCENE_THIS_UPDATE, 0x731a880555da3647, CommandUseHiDofOnSyncedSceneThisUpdate); SCR_REGISTER_SECURE(SET_CAM_DOF_OVERRIDDEN_FOCUS_DISTANCE,0x1bf7583954f8933d, CommandSetDofOverriddenFocusDistance); SCR_REGISTER_SECURE(SET_CAM_DOF_OVERRIDDEN_FOCUS_DISTANCE_BLEND_LEVEL,0x718303d9313f7a97, CommandSetDofOverriddenFocusDistanceBlendLevel); SCR_REGISTER_UNUSED(SET_CAM_DOF_FOCUS_DISTANCE_GRID_SCALING,0xe9ac8c191ff37e64, CommandSetDofFocusDistanceGridScaling); SCR_REGISTER_UNUSED(SET_CAM_DOF_SUBJECT_MAGNIFICATION_POWER_FACTOR_NEAR_FAR,0x432e7a511de8170c, CommandSetDofSubjectMagnificationPowerFactorNearFar); SCR_REGISTER_UNUSED(SET_CAM_DOF_MAX_PIXEL_DEPTH,0xe8cd4c1732381e72, CommandSetDofMaxPixelDepth); SCR_REGISTER_UNUSED(SET_CAM_DOF_PIXEL_DEPTH_POWER_FACTOR,0xddbcf51529e88a3f, CommandSetDofPixelDepthPowerFactor); SCR_REGISTER_SECURE(SET_CAM_DOF_FNUMBER_OF_LENS,0x5ac409e1be1df384, CommandSetDofFNumberOfLens); SCR_REGISTER_SECURE(SET_CAM_DOF_FOCAL_LENGTH_MULTIPLIER,0xd3a34fb28d95d754, CommandSetDofFocalLengthMultiplier); SCR_REGISTER_SECURE(SET_CAM_DOF_FOCUS_DISTANCE_BIAS,0x6610a3e15c9aba9b, CommandSetDofFocusDistanceBias); SCR_REGISTER_SECURE(SET_CAM_DOF_MAX_NEAR_IN_FOCUS_DISTANCE,0xd4bc9962fda90b40, CommandSetDofMaxNearInFocusDistance); SCR_REGISTER_SECURE(SET_CAM_DOF_MAX_NEAR_IN_FOCUS_DISTANCE_BLEND_LEVEL,0x6344c0c82c899078, CommandSetDofMaxNearInFocusDistanceBlendLevel); SCR_REGISTER_UNUSED(SET_CAM_DOF_MAX_BLUR_RADIUS_AT_NEAR_IN_FOCUS_LIMIT,0xace748c80de5bf76, CommandSetDofMaxBlurRadiusAtNearInFocusLimit); SCR_REGISTER_UNUSED(SET_CAM_DOF_FOCUS_DISTANCE_INCREASE_SPRING_CONSTANT,0xa91ec7a1aa4dbc17, CommandSetDofFocusDistanceIncreaseSpringConstant); SCR_REGISTER_UNUSED(SET_CAM_DOF_FOCUS_DISTANCE_DECREASE_SPRING_CONSTANT,0x3ce8a2efc3febd6d, CommandSetDofFocusDistanceDecreaseSpringConstant); SCR_REGISTER_UNUSED(SET_CAM_DOF_SHOULD_FOCUS_ON_LOOK_AT_TARGET,0xdc1142c71eefffd2, CommandSetDofShouldFocusOnLookAtTarget); SCR_REGISTER_UNUSED(SET_CAM_DOF_SHOULD_FOCUS_ON_ATTACH_PARENT,0xf460dab6f0323c0a, CommandSetDofShouldFocusOnAttachParent); SCR_REGISTER_UNUSED(SET_CAM_DOF_SHOULD_KEEP_LOOK_AT_TARGET_IN_FOCUS,0xfcc9acbd7bfa65a0, CommandSetDofShouldKeepLookAtTargetInFocus); SCR_REGISTER_UNUSED(SET_CAM_DOF_SHOULD_KEEP_ATTACH_PARENT_IN_FOCUS,0x813b285667a55baf, CommandSetDofShouldKeepAttachParentInFocus); SCR_REGISTER_UNUSED(SET_CAM_DOF_SHOULD_MEASURE_POST_ALPHA_PIXEL_DEPTH,0x0264fdab5f244cc5, CommandSetDofShouldMeasurePostAlphaPixelDepth); //attach SCR_REGISTER_SECURE(ATTACH_CAM_TO_ENTITY,0x3fb84450a94cb528, CommandAttachCamToEntity); SCR_REGISTER_SECURE(ATTACH_CAM_TO_PED_BONE,0xb6b6ac43334c34a7, CommandAttachCamToPedBone); SCR_REGISTER_SECURE(HARD_ATTACH_CAM_TO_PED_BONE,0x1cc06cd0e210ff39, CommandHardAttachCamToPedBone); SCR_REGISTER_SECURE(HARD_ATTACH_CAM_TO_ENTITY,0x383a38da6b16db3a, CommandHardAttachCamToEntity); SCR_REGISTER_SECURE(ATTACH_CAM_TO_VEHICLE_BONE,0xbe3ecd06b6bdf192, CommandAttachCamToVehicleBone); SCR_REGISTER_SECURE(DETACH_CAM,0xdf900bcbc752c62a, CommandDetachCam); //roll SCR_REGISTER_UNUSED(SET_CAM_INHERIT_ROLL_OBJECT,0x465a41a2097c11f0, CommandSetCamInheritRollObject); SCR_REGISTER_SECURE(SET_CAM_INHERIT_ROLL_VEHICLE,0x8fd169d152a83209, CommandSetCamInheritRollVehicle); //point SCR_REGISTER_SECURE(POINT_CAM_AT_COORD,0x46045ff49485808b, CommandPointCamAtCoord); SCR_REGISTER_SECURE(POINT_CAM_AT_ENTITY,0x98a99a554b458431, CommandPointCamAtEntity); SCR_REGISTER_SECURE(POINT_CAM_AT_PED_BONE,0x4940b67d34c2f6c1, CommandPointCamAtPedBone); SCR_REGISTER_UNUSED(POINT_CAM_AT_CAM,0x3482608561b83d01, CommandPointCamAtCam); SCR_REGISTER_SECURE(STOP_CAM_POINTING,0x45e6cc1354100c1b, CommandStopCamPointing); //miscellaneous camera-specific commands SCR_REGISTER_SECURE(SET_CAM_AFFECTS_AIMING,0x156db56766eded12, CommandSetCamAffectsAiming); SCR_REGISTER_SECURE(SET_CAM_CONTROLS_MINI_MAP_HEADING,0x8d32379ec749b177, CommandSetCamControlsMiniMapHeading); SCR_REGISTER_SECURE(SET_CAM_IS_INSIDE_VEHICLE,0x225b8233719be2b5, CommandSetCamIsInsideVehicle); SCR_REGISTER_UNUSED(SET_CAM_CUSTOM_MAX_NEAR_CLIP,0x1df22d878d47fb84, CommandSetCustomMaxNearClip); SCR_REGISTER_SECURE(ALLOW_MOTION_BLUR_DECAY,0x7bd08352b65a3135, CommandAllowMotionBlurDecay); SCR_REGISTER_SECURE(SET_CAM_DEBUG_NAME,0x3e93523104b9387c, CommandSetCamDebugName); //debug SCR_REGISTER_SECURE(GET_DEBUG_CAM,0xbc265d4ea63ebdd3, CommandGetDebugCam); SCR_REGISTER_UNUSED(SET_DEBUG_CAM_ACTIVE,0xd1614197be2ad548, CommandSetDebugCamActive); //spline SCR_REGISTER_SECURE(ADD_CAM_SPLINE_NODE,0x8be9d374da4bb99b, CommandAddCamSplineNode); SCR_REGISTER_SECURE(ADD_CAM_SPLINE_NODE_USING_CAMERA_FRAME,0x396c6b684ead1b8f, CommandAddCamSplineNodeUsingCameraFrame); SCR_REGISTER_SECURE(ADD_CAM_SPLINE_NODE_USING_CAMERA,0x6c12d23212020231, CommandAddCamSplineNodeUsingCamera); SCR_REGISTER_SECURE(ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME,0x5a43b6c214087091, CommandAddCamSplineNodeUsingGameplayFrame); SCR_REGISTER_SECURE(SET_CAM_SPLINE_PHASE,0x59489d17dc49b7b3, CommandSetCamSplinePhase); SCR_REGISTER_SECURE(GET_CAM_SPLINE_PHASE,0x3f65eb34e4c562f2, CommandGetCamSplinePhase); SCR_REGISTER_SECURE(GET_CAM_SPLINE_NODE_PHASE,0xa55408dfc92148e7, CommandGetCamSplineNodePhase); SCR_REGISTER_SECURE(SET_CAM_SPLINE_DURATION,0x4bcdeab65827c4e2, CommandSetCamSplineDuration); SCR_REGISTER_SECURE(SET_CAM_SPLINE_SMOOTHING_STYLE,0xadb0920102000613, CommandSetCamSplineSmoothingStyle); SCR_REGISTER_SECURE(GET_CAM_SPLINE_NODE_INDEX,0x0631106d8d29716a, CommandGetCamSplineNodeIndex); SCR_REGISTER_SECURE(SET_CAM_SPLINE_NODE_EASE,0x4617238b97beacf4, CommandSetCamSplineNodeEase); SCR_REGISTER_SECURE(SET_CAM_SPLINE_NODE_VELOCITY_SCALE,0xa1d493603e8d15b4, CommandSetCamSplineNodeVelocityScale); SCR_REGISTER_SECURE(OVERRIDE_CAM_SPLINE_VELOCITY,0xa20e6cdd67dc817d, CommandOverrideCamSplineVelocity); SCR_REGISTER_SECURE(OVERRIDE_CAM_SPLINE_MOTION_BLUR,0x3437c3a2be385970, CommandOverrideCamSplineMotionBlur); SCR_REGISTER_SECURE(SET_CAM_SPLINE_NODE_EXTRA_FLAGS,0xcc1998034eecce71, CommandSetCamSplineNodeExtraFlags); SCR_REGISTER_SECURE(IS_CAM_SPLINE_PAUSED,0xfb493c3d9e4e7ec9, CommandIsCamSplinePaused); //interp SCR_REGISTER_SECURE(SET_CAM_ACTIVE_WITH_INTERP,0x889b4f9d52e23dee, CommandSetCamActiveWithInterp); SCR_REGISTER_SECURE(IS_CAM_INTERPOLATING,0x52522e25010580a1, CommandIsCamInterpolating); //Shake SCR_REGISTER_SECURE(SHAKE_CAM,0x9bae3263d9b1fcb9, CommandShakeCam); SCR_REGISTER_SECURE(ANIMATED_SHAKE_CAM,0xbfd7467b93e06b26, CommandAnimatedShakeCam); SCR_REGISTER_SECURE(IS_CAM_SHAKING,0x629b37af59212703, CommandIsCamShaking); SCR_REGISTER_SECURE(SET_CAM_SHAKE_AMPLITUDE,0x1342e9e0cde9b323, CommandSetCamShakeAmplitude); SCR_REGISTER_SECURE(STOP_CAM_SHAKING,0x80b66ef081475250, CommandStopCamShaking); SCR_REGISTER_SECURE(SHAKE_SCRIPT_GLOBAL,0x7b6613dcaa2c2c29, CommandShakeScriptGlobal); SCR_REGISTER_SECURE(ANIMATED_SHAKE_SCRIPT_GLOBAL,0x0d38c39fb4abd855, CommandAnimatedShakeScriptGlobal); SCR_REGISTER_SECURE(IS_SCRIPT_GLOBAL_SHAKING,0xe9331aea6c1820c9, CommandIsScriptGlobalShaking); SCR_REGISTER_UNUSED(SET_SCRIPT_GLOBAL_SHAKE_AMPLITUDE,0x7885a971a16a5e27, CommandSetScriptGlobalShakeAmplitude); SCR_REGISTER_SECURE(STOP_SCRIPT_GLOBAL_SHAKING,0x8564f0807a5c1cd6, CommandStopScriptGlobalShaking); SCR_REGISTER_SECURE(TRIGGER_VEHICLE_PART_BROKEN_CAMERA_SHAKE,0x6ffb2bece4cf4ed7, CommandTriggerVehiclePartBrokenCameraShake); //Camera animation SCR_REGISTER_SECURE(PLAY_CAM_ANIM,0x8b28384f571e6da9, CommandPlayCamAnim); SCR_REGISTER_SECURE(IS_CAM_PLAYING_ANIM,0x4d85bfc31f7d8d41, CommandIsCamPlayingAnim); SCR_REGISTER_SECURE(SET_CAM_ANIM_CURRENT_PHASE,0xa35860e818eac5b7, CommandSetCamAnimCurrentPhase); SCR_REGISTER_SECURE(GET_CAM_ANIM_CURRENT_PHASE,0x7fdd65163647de8e, CommandGetCamAnimCurrentPhase); SCR_REGISTER_SECURE(PLAY_SYNCHRONIZED_CAM_ANIM,0x7b8ce3a05613f41c, CommandPlaySynchronizedCamAnim); //Scene Transition - deprecated! SCR_REGISTER_UNUSED(START_CAM_TRANSITION,0x5e6e0f6b80397c1d, CommandStartSceneTransition); SCR_REGISTER_UNUSED(IS_CAM_TRANSITIONING,0xe7ab8fa2bdb507c1, CommandIsCameraTransitioning); SCR_REGISTER_UNUSED(GET_CAM_TRANSITION_PHASE,0xebea23a22c057b10, CommandGetCamTransitionPhase); //Scripted fly camera SCR_REGISTER_SECURE(SET_FLY_CAM_HORIZONTAL_RESPONSE,0xaea1bfac30053852, CommandSetFlyCamHorizontalResponse); SCR_REGISTER_SECURE(SET_FLY_CAM_VERTICAL_RESPONSE,0xa2382ebb79e01e67, CommandSetFlyCamVerticalResponse); SCR_REGISTER_SECURE(SET_FLY_CAM_MAX_HEIGHT,0x3099b89127273567, CommandSetFlyCamMaxHeight); SCR_REGISTER_SECURE(SET_FLY_CAM_COORD_AND_CONSTRAIN,0x9eb45aa8353bd0b7, CommandSetFlyCamCoordAndConstrain); SCR_REGISTER_SECURE(SET_FLY_CAM_VERTICAL_CONTROLS_THIS_UPDATE,0x1aadc2d44870c7d9, CommandSetFlyCamVerticalControlsThisUpdate); SCR_REGISTER_SECURE(WAS_FLY_CAM_CONSTRAINED_ON_PREVIOUS_UDPATE,0x7f45f5de364061c3, CommandWasFlyCamConstrainedOnPreviousUpdate); //Fade SCR_REGISTER_SECURE(IS_SCREEN_FADED_OUT,0xa829c9a2767ac8ef, CommandIsScreenFadedOut); SCR_REGISTER_SECURE(IS_SCREEN_FADED_IN,0xe9e8955a780dda01, CommandIsScreenFadedIn); SCR_REGISTER_SECURE(IS_SCREEN_FADING_OUT,0xcb1ef1e7b77adf4c, CommandIsScreenFadingOut); SCR_REGISTER_SECURE(IS_SCREEN_FADING_IN,0xecd40fef3cf43bdb, CommandIsScreenFadingIn); SCR_REGISTER_SECURE(DO_SCREEN_FADE_IN,0x5a7acd1cdf509b0d, CommandDoScreenFadeIn); SCR_REGISTER_SECURE(DO_SCREEN_FADE_OUT,0x859006db870314c5, CommandDoScreenFadeOut); //Widescreen SCR_REGISTER_SECURE(SET_WIDESCREEN_BORDERS,0x43f21fa00a1ce779, CommandSetWidescreenBorders); SCR_REGISTER_SECURE(ARE_WIDESCREEN_BORDERS_ACTIVE,0xd0bf3d2e961ae546, CommandAreWidescreenBordersActive); //Gameplay SCR_REGISTER_SECURE(GET_GAMEPLAY_CAM_COORD,0xcb284f809b594322, CommandGetGameplayCamCoord); SCR_REGISTER_SECURE(GET_GAMEPLAY_CAM_ROT,0x9c0ed16b4f524508, CommandGetGameplayCamRot); SCR_REGISTER_SECURE(GET_GAMEPLAY_CAM_FOV,0x372e271fe8a97311, CommandGetGameplayCamFov); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE,0xe776d70a603c3c81, CommandSetGameplayCamMotionBlurScalingThisUpdate); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE,0x97e56574a6aa6c7d, CommandSetGameplayCamMaxMotionBlurStrengthThisUpdate); SCR_REGISTER_SECURE(GET_GAMEPLAY_CAM_RELATIVE_HEADING,0x02ac46bf770385c4, CommandGetGameplayCamRelativeHeading); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_RELATIVE_HEADING,0x94953c3ff0664f66, CommandSetGameplayCamRelativeHeading); SCR_REGISTER_SECURE(GET_GAMEPLAY_CAM_RELATIVE_PITCH,0xd5b0bdc980eeb92f, CommandGetGameplayCamRelativePitch); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_RELATIVE_PITCH,0x080c97b891e2f3aa, CommandSetGameplayCamRelativePitch); SCR_REGISTER_SECURE(RESET_GAMEPLAY_CAM_FULL_ATTACH_PARENT_TRANSFORM_TIMER, 0x7295c203dd659dfe, CommandResetGameplayCamFullAttachParentTransformTimer); SCR_REGISTER_SECURE(FORCE_CAMERA_RELATIVE_HEADING_AND_PITCH,0x3f606b4abc46c107, CommandForceCameraRelativeHeadingAndPitch); SCR_REGISTER_SECURE(FORCE_BONNET_CAMERA_RELATIVE_HEADING_AND_PITCH,0x23fc9abda1de4638, CommandForceBonnetCameraRelativeHeadingAndPitch); SCR_REGISTER_SECURE(SET_FIRST_PERSON_SHOOTER_CAMERA_HEADING,0xe9aef8b7b1101b11, CommandSetFirstPersonShooterCameraHeading); SCR_REGISTER_SECURE(SET_FIRST_PERSON_SHOOTER_CAMERA_PITCH,0x4419cdfe572ac96b, CommandSetFirstPersonShooterCameraPitch); SCR_REGISTER_SECURE(SET_SCRIPTED_CAMERA_IS_FIRST_PERSON_THIS_FRAME,0x4b6a8fc4666f4a3b, CommandSetScriptedCameraIsFirstPersonThisFrame); SCR_REGISTER_SECURE(SHAKE_GAMEPLAY_CAM,0x87ca6430083e790d, CommandShakeGameplayCam); SCR_REGISTER_SECURE(IS_GAMEPLAY_CAM_SHAKING,0xf8f3d410542c80db, CommandIsGameplayCamShaking); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_SHAKE_AMPLITUDE,0x0ed8565383e33da1, CommandSetGameplayCamShakeAmplitude); SCR_REGISTER_SECURE(STOP_GAMEPLAY_CAM_SHAKING,0x84cf415aeab83b93, CommandStopGameplayCamShaking); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE,0xb50594b7e6670f73, CommandSetGameplayCamFollowPedThisUpdate); SCR_REGISTER_SECURE(IS_GAMEPLAY_CAM_RENDERING,0x66def7450747437a, CommandIsGameplayCamRendering); SCR_REGISTER_SECURE(IS_INTERPOLATING_FROM_SCRIPT_CAMS,0x4709488c1d867377, CommandIsInterpolatingFromScriptCams); SCR_REGISTER_SECURE(IS_INTERPOLATING_TO_SCRIPT_CAMS,0xe19e89b5fb4d4646, CommandIsInterpolatingToScriptCams); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_ALTITUDE_FOV_SCALING_STATE,0x3d1809e67cb9f79c, CommandSetGameplayCamAltitudeFovScalingState); SCR_REGISTER_SECURE(DISABLE_GAMEPLAY_CAM_ALTITUDE_FOV_SCALING_THIS_UPDATE,0x129dd42d09aac47e, CommandDisableGameplayCamAltitudeFovScalingThisUpdate); SCR_REGISTER_SECURE(IS_GAMEPLAY_CAM_LOOKING_BEHIND,0x594cc97203485127, CommandIsGameplayCamLookingBehind); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_IGNORE_ENTITY_COLLISION_THIS_UPDATE,0xa457f1126998c0ba, CommandSetIgnoreCollisionForEntityThisUpdate); SCR_REGISTER_SECURE(DISABLE_CAM_COLLISION_FOR_OBJECT,0x31380d810d48740a, CommandDisableCamCollisionForObject); SCR_REGISTER_SECURE(BYPASS_CAMERA_COLLISION_BUOYANCY_TEST_THIS_UPDATE,0x84b840750bfb7a66, CommandBypassCameraCollisionBuoyancyTestThisUpdate); SCR_REGISTER_SECURE(SET_GAMEPLAY_CAM_ENTITY_TO_LIMIT_FOCUS_OVER_BOUNDING_SPHERE_THIS_UPDATE,0x2d17c0f0a5e54afe, CommandSetGameplayCamEntityToLimitFocusOverBoundingSphereThisUpdate); SCR_REGISTER_SECURE(DISABLE_FIRST_PERSON_CAMERA_WATER_CLIPPING_TEST_THIS_UPDATE,0xd15ac77625fb5d5a, CommandDisableFirstPersonCameraWaterClippingTestThisUpdate); SCR_REGISTER_SECURE(SET_FOLLOW_CAM_IGNORE_ATTACH_PARENT_MOVEMENT_THIS_UPDATE,0x328ba0168a94602f, CommandSetFollowCamIgnoreAttachParentMovementThisUpdate); SCR_REGISTER_SECURE(IS_SPHERE_VISIBLE,0x0318e2ee6fb4563f, CommandIsSphereVisible); SCR_REGISTER_SECURE(IS_FOLLOW_PED_CAM_ACTIVE,0x72b75b6d474267d5, CommandIsGameFollowPedCamActive); SCR_REGISTER_SECURE(SET_FOLLOW_PED_CAM_THIS_UPDATE,0x8753a341a596975f, CommandSetFollowPedCamThisUpdate); SCR_REGISTER_SECURE(USE_SCRIPT_CAM_FOR_AMBIENT_POPULATION_ORIGIN_THIS_FRAME,0xa26c67a816927cc7, CommandUseScriptCamForAmbientPopulationOriginThisFrame); SCR_REGISTER_SECURE(SET_FOLLOW_PED_CAM_LADDER_ALIGN_THIS_UPDATE,0x5076c4358fbdaac7, CommandSetFollowPedCamLadderAlignThisUpdate); SCR_REGISTER_SECURE(SET_THIRD_PERSON_CAM_RELATIVE_HEADING_LIMITS_THIS_UPDATE,0xab5ee05015513abe, CommandSetThirdPersonRelativeHeadingThisUpdate); SCR_REGISTER_SECURE(SET_THIRD_PERSON_CAM_RELATIVE_PITCH_LIMITS_THIS_UPDATE,0x0e2d809fe9af80ae, CommandSetThirdPersonRelativePitchThisUpdate); SCR_REGISTER_SECURE(SET_THIRD_PERSON_CAM_ORBIT_DISTANCE_LIMITS_THIS_UPDATE,0x940fc4e949dd00d0, CommandSetThirdPersonOrbitDistanceThisUpdate); SCR_REGISTER_SECURE(SET_IN_VEHICLE_CAM_STATE_THIS_UPDATE,0xc605c03d36b56591, CommandSetInVehicleCameraStateThisUpdate); SCR_REGISTER_SECURE(DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE,0xa84144d1edbb6d54, CommandDisableOnFootFirstPersonViewThisUpdate); SCR_REGISTER_SECURE(DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE,0x1109811fc4df0865, CommandDisableFirstPersonFlashEffectThisUpdate); SCR_REGISTER_UNUSED(FORCE_THIRD_PERSON_AFTER_AIMING_BLEND_THIS_UPDATE,0x1a37fd458784ae4c, CommandForceThirdPersonAferAimingBlendThisUpdate); SCR_REGISTER_UNUSED(DISABLE_THIRD_PERSON_AFTER_AIMING_BLEND_THIS_UPDATE,0x4c356901bdb72d7c, CommandDisableThirdPersonAferAimingBlendThisUpdate); SCR_REGISTER_SECURE(BLOCK_FIRST_PERSON_ORIENTATION_RESET_THIS_UPDATE,0x39469160703c61ae, CommandBlockFirstPersonOrientationResetThisUpdate); //Start deprecated //NOTE: The new view modes now match the legacy zoom levels, so it is not necessary to map the enum. SCR_REGISTER_SECURE(GET_FOLLOW_PED_CAM_ZOOM_LEVEL,0x64d620290bf268a3, CommandGetFollowPedCamViewMode); //End deprecated SCR_REGISTER_SECURE(GET_FOLLOW_PED_CAM_VIEW_MODE,0x2b1d7439c26d5642, CommandGetFollowPedCamViewMode); SCR_REGISTER_SECURE(SET_FOLLOW_PED_CAM_VIEW_MODE,0xc9c7ccc4f117b115, CommandSetFollowPedCamViewMode); SCR_REGISTER_SECURE(IS_FOLLOW_VEHICLE_CAM_ACTIVE,0xfe62696f731c151b, CommandIsGameFollowVehicleCamActive); SCR_REGISTER_UNUSED(SET_FOLLOW_VEHICLE_CAM_THIS_UPDATE,0x79ee85ac07304324, CommandSetFollowVehicleCamThisUpdate); SCR_REGISTER_SECURE(SET_FOLLOW_VEHICLE_CAM_HIGH_ANGLE_MODE_THIS_UPDATE,0xd299feeb1b4dedc6, CommandSetFollowVehicleCamHighAngleModeThisUpdate); SCR_REGISTER_SECURE(SET_FOLLOW_VEHICLE_CAM_HIGH_ANGLE_MODE_EVERY_UPDATE,0x43b6850b58d1022c, CommandSetFollowVehicleCamHighAngleModeEveryUpdate); ////////////////////////////////////////////////////////////////////////// // Table Games Camera API SCR_REGISTER_SECURE(SET_TABLE_GAMES_CAMERA_THIS_UPDATE,0x01727103dd974710, CommandSetTableGamesCameraThisUpdate); SCR_REGISTER_UNUSED(IS_TABLE_GAMES_CAMERA_ACTIVE,0x23a755c9532e976a, CommandIsTableGamesCameraActive); ////////////////////////////////////////////////////////////////////////// //Start deprecated //NOTE: The new view modes now match the legacy zoom levels, so it is not necessary to map the enum. SCR_REGISTER_SECURE(GET_FOLLOW_VEHICLE_CAM_ZOOM_LEVEL,0x964cd83935ad0ed1, CommandGetFollowVehicleCamViewMode); SCR_REGISTER_SECURE(SET_FOLLOW_VEHICLE_CAM_ZOOM_LEVEL,0x842b2a274564caf5, CommandSetGameFollowVehicleCamZoomLevel); //End deprecated SCR_REGISTER_SECURE(GET_FOLLOW_VEHICLE_CAM_VIEW_MODE,0x5e29b0cf10cecb34, CommandGetFollowVehicleCamViewMode); SCR_REGISTER_SECURE(SET_FOLLOW_VEHICLE_CAM_VIEW_MODE,0xed74a3aa53be3520, CommandSetFollowVehicleCamViewMode); SCR_REGISTER_SECURE(GET_CAM_VIEW_MODE_FOR_CONTEXT,0x4de6a646afb7cf5c, CommandGetCamViewModeForContext); SCR_REGISTER_SECURE(SET_CAM_VIEW_MODE_FOR_CONTEXT,0x4b1c22133022d7d3, CommandSetCamViewModeForContext); SCR_REGISTER_SECURE(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT,0x47e529da87615548, CommandGetCamActiveViewModeContext); SCR_REGISTER_SECURE(USE_VEHICLE_CAM_STUNT_SETTINGS_THIS_UPDATE,0x016cdcb99a127243, CommandUseVehicleCamStuntSettingsThisUpdate); SCR_REGISTER_SECURE(USE_DEDICATED_STUNT_CAMERA_THIS_UPDATE,0xa9fc4ab61148c611, CommandUseDedicatedStuntCameraThisUpdate); SCR_REGISTER_SECURE(FORCE_VEHICLE_CAM_STUNT_SETTINGS_THIS_UPDATE,0x0394892bda1f1eda, CommandForceVehicleCamStuntSettingsThisUpdate); SCR_REGISTER_SECURE(SET_FOLLOW_VEHICLE_CAM_SEAT_THIS_UPDATE,0x65498c8065adcc5d, CommandSetFollowVehicleCamSeatThisUpdate); SCR_REGISTER_SECURE(IS_AIM_CAM_ACTIVE,0x2358ae4c940cf1df, CommandIsGameAimCamActive); SCR_REGISTER_SECURE(IS_AIM_CAM_ACTIVE_IN_ACCURATE_MODE,0x19abd41af27cd2a7, CommandIsGameAimCamActiveInAccurateMode); SCR_REGISTER_SECURE(IS_FIRST_PERSON_AIM_CAM_ACTIVE,0x28ff2c2261b6cba1, CommandIsGameFirstPersonAimCamActive); SCR_REGISTER_SECURE(DISABLE_AIM_CAM_THIS_UPDATE,0x7c6105654788a17b, CommandDisableGameAimCamThisUpdate); SCR_REGISTER_UNUSED(GET_PED_AIM_CAM_VIEW_MODE,0x1df54e09bd6ce2f0, CommandGetPedAimCamViewMode); SCR_REGISTER_UNUSED(SET_PED_AIM_CAM_VIEW_MODE,0x3a08e7e6adf155d2, CommandSetPedAimCamViewMode); SCR_REGISTER_SECURE(GET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR,0x8e277ef62b1e0bdf, CommandGetGameFirstPersonAimCamZoomFactor); SCR_REGISTER_SECURE(SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR,0xec426a0c147ec075, CommandSetGameFirstPersonAimCamZoomFactor); SCR_REGISTER_SECURE(SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR_LIMITS_THIS_UPDATE,0x369ee77cbbd732b2, CommandSetGameFirstPersonAimCamZoomFactorLimitsThisUpdate); SCR_REGISTER_SECURE(SET_FIRST_PERSON_AIM_CAM_RELATIVE_HEADING_LIMITS_THIS_UPDATE,0xd9a8ad65089229ce, CommandSetGameFirstPersonAimCamRelativeHeadingLimitsThisUpdate); SCR_REGISTER_SECURE(SET_FIRST_PERSON_AIM_CAM_RELATIVE_PITCH_LIMITS_THIS_UPDATE,0x57ed17672f68f6fa, CommandSetGameFirstPersonAimCamRelativePitchLimitsThisUpdate); SCR_REGISTER_SECURE(SET_FIRST_PERSON_AIM_CAM_NEAR_CLIP_THIS_UPDATE,0x5ded85df2208b943, CommandSetGameFirstPersonAimCamNearClipThisUpdate); SCR_REGISTER_SECURE(SET_THIRD_PERSON_AIM_CAM_NEAR_CLIP_THIS_UPDATE,0xd195f5a86bfb85d4, CommandSetGameThirdPersonAimCamNearClipThisUpdate); SCR_REGISTER_SECURE(SET_ALLOW_CUSTOM_VEHICLE_DRIVE_BY_CAM_THIS_UPDATE,0x0e83878033f3e16a, CommandSetAllowCustomVehicleDriveByCamThisUpdate); SCR_REGISTER_SECURE(FORCE_TIGHTSPACE_CUSTOM_FRAMING_THIS_UPDATE,0xf41864db1cf85307, CommandForceTightSpaceCustomFramingThisUpdate); //Cached frame SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_COORD,0x524171c8263e7c3e, CommandGetRenderedCamCoord); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_ROT,0x52bd0fa2342c7246, CommandGetRenderedCamRot); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_REMOTE_PLAYER_CAM_ROT,0x58e4c4eb027d47b6, CommandGetRenderedRemotePlayerCamRot); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_FOV,0x07c8c8b0cbd44d3b, CommandGetRenderedCamFov); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_REMOTE_PLAYER_CAM_FOV,0x00f2683a6a133040, CommandGetRenderedRemotePlayerCamFov); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_NEAR_CLIP,0xe51db7b55b7f9f44, CommandGetRenderedCamNearClip); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_FAR_CLIP,0xdf083f70a83a7271, CommandGetRenderedCamFarClip); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_NEAR_DOF,0xa97deab4b3e49b73, CommandGetRenderedCamNearDof); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_FAR_DOF,0x658584b384fb3c2a, CommandGetRenderedCamFarDof); SCR_REGISTER_SECURE(GET_FINAL_RENDERED_CAM_MOTION_BLUR_STRENGTH,0x26dab410cd0cec53, CommandGetRenderedCamMotionBlurStrength); //Hint cam SCR_REGISTER_SECURE(SET_GAMEPLAY_COORD_HINT,0xdbfee73a55300843, CommandSetGameplayCoordHint); SCR_REGISTER_SECURE(SET_GAMEPLAY_PED_HINT,0xda6126f0297ba5e8, CommandSetGameplayPedHint); //TO BE REMOVED SCR_REGISTER_SECURE(SET_GAMEPLAY_VEHICLE_HINT,0x7c6d4fd402f1d4f9, CommandSetGameplayVehicleHint); SCR_REGISTER_SECURE(SET_GAMEPLAY_OBJECT_HINT,0xb065566f582943d1, CommandSetGameplayObjectHint); SCR_REGISTER_SECURE(SET_GAMEPLAY_ENTITY_HINT,0x56593357686570f4, CommandSetGameplayEntityHint); SCR_REGISTER_UNUSED(SET_GAMEPLAY_HINT_RELATIVE_PITCH,0x74c6600da8d135e3, CommandSetGameplayHintRelativePitch); SCR_REGISTER_SECURE(IS_GAMEPLAY_HINT_ACTIVE,0x4131052989de1278, CommandIsGameplayHintActive); SCR_REGISTER_SECURE(STOP_GAMEPLAY_HINT,0xbd1e8007d7dfa747, CommandStopGameplayHint); SCR_REGISTER_SECURE(STOP_GAMEPLAY_HINT_BEING_CANCELLED_THIS_UPDATE,0x457826ed772c86a4,CommandStopGameplayHintBeingCancelledUsingRightStick); SCR_REGISTER_SECURE(STOP_CODE_GAMEPLAY_HINT,0x408cf406c7d78d6f, CommandStopCodeGamePlayHint); SCR_REGISTER_SECURE(IS_CODE_GAMEPLAY_HINT_ACTIVE,0x3f520e7ecf3381a3, CommandIsCodeGameplayHintActive); SCR_REGISTER_SECURE(SET_GAMEPLAY_HINT_FOV,0xc9b7a3b3228edc18, CommandSetGameplayHintFov); SCR_REGISTER_SECURE(SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR,0xffd7feec98321a66, CommandSetGameplayHintFollowDistanceScalar); SCR_REGISTER_SECURE(SET_GAMEPLAY_HINT_BASE_ORBIT_PITCH_OFFSET,0xc3940c122330f4aa, CommandSetGameplayHintBaseOrbitPitchOffset); SCR_REGISTER_SECURE(SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET,0xc5fb663c1ce53c57, CommandSetGameplayHintCameraRelativeSideOffsetAdditive); SCR_REGISTER_SECURE(SET_GAMEPLAY_HINT_CAMERA_RELATIVE_VERTICAL_OFFSET,0xf2938a28c15db464, CommandSetGameplayHintCameraRelativeVerticalOffsetAdditive); SCR_REGISTER_SECURE(SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE,0xcb772e2a88f6a27f, CommandSetGameplayHintCameraBlendToFollowPedMediumViewMode); //Cinematic SCR_REGISTER_SECURE(SET_CINEMATIC_BUTTON_ACTIVE,0xe4fa4fbf0bafd2a8, CommandSetCinematicButtonActive); SCR_REGISTER_SECURE(IS_CINEMATIC_CAM_RENDERING,0x0085e4be8fd73703, CommandIsCinematicCamRendering); SCR_REGISTER_SECURE(SHAKE_CINEMATIC_CAM,0x3b58be9e133fd48d, CommandShakeCinematicCam); SCR_REGISTER_SECURE(IS_CINEMATIC_CAM_SHAKING,0xbee2f63c2da77f95, CommandIsCinematicCamShaking); SCR_REGISTER_SECURE(SET_CINEMATIC_CAM_SHAKE_AMPLITUDE,0x86a2751c5f3af8f8, CommandSetCinematicCamShakeAmplitude); SCR_REGISTER_SECURE(STOP_CINEMATIC_CAM_SHAKING,0xc3d04b421e077910, CommandStopCinematicCamShaking); SCR_REGISTER_SECURE(DISABLE_CINEMATIC_BONNET_CAMERA_THIS_UPDATE,0x5ad47d8cfc3a86af, CommandDisableCinematicBonnetCameraThisUpdate); SCR_REGISTER_SECURE(DISABLE_CINEMATIC_VEHICLE_IDLE_MODE_THIS_UPDATE,0x7936e7a8dbe3dbbe, CommandDisableCinematicVehicleIdleModeThisUpdate); SCR_REGISTER_SECURE(INVALIDATE_CINEMATIC_VEHICLE_IDLE_MODE,0xb06c15f6118b032d, CommandInvalidateCinematicVehicleIdleMode); SCR_REGISTER_SECURE(INVALIDATE_IDLE_CAM,0x62ea3913642edf8e, CommandInvalidateIdleCam); SCR_REGISTER_SECURE(IS_CINEMATIC_IDLE_CAM_RENDERING,0x20192bf9e3bb2549, CommandIsCinematicIdleCamRendering); SCR_REGISTER_SECURE(IS_CINEMATIC_FIRST_PERSON_VEHICLE_INTERIOR_CAM_RENDERING,0x94398b6170dca18c, CommandIsCinematicFirstPersonVehicleInteriorCamRendering); SCR_REGISTER_SECURE(CREATE_CINEMATIC_SHOT,0x9b30483daa48199b, CommandCreateCinematicShot); SCR_REGISTER_SECURE(IS_CINEMATIC_SHOT_ACTIVE,0x99636b3721921a29, CommandIsCinematicShotActive); SCR_REGISTER_SECURE(STOP_CINEMATIC_SHOT,0x332e0449b21e13ab, CommandStopCinematicShot); SCR_REGISTER_UNUSED(IS_CINEMATIC_SHOT_RENDERING,0x809c5dbfa8d8d422, CommandIsCinematicShotRendering); SCR_REGISTER_SECURE(FORCE_CINEMATIC_RENDERING_THIS_UPDATE,0x683caf9e8ab4583d, CommandScriptForceCinematicRenderingThisUpdate); SCR_REGISTER_SECURE(SET_CINEMATIC_NEWS_CHANNEL_ACTIVE_THIS_UPDATE,0x58787e2db6f54bac, CommandSetCinematicNewsChannelActiveThisUpdate); SCR_REGISTER_UNUSED(REGISTER_CINEMATIC_CAMERA_CHECK_POINT_POS,0x26bba2903674460c, CommandRegisterRaceCheckPoint); SCR_REGISTER_SECURE(SET_CINEMATIC_MODE_ACTIVE,0x71800f6ecfd14497, CommandSetCinematicModeActive); SCR_REGISTER_UNUSED(SET_CINEMATIC_MISSION_CREATOR_FAIL_ACTIVE_THIS_UPDATE,0x9a341be2cbe64682, CommandCinematicMissionCreatorFailContextActiveThisUpdate); SCR_REGISTER_SECURE(IS_IN_VEHICLE_MOBILE_PHONE_CAMERA_RENDERING,0xfb59e5247fb6b7f9, CommandIsInVehicleMobilePhoneCameraRendering); SCR_REGISTER_SECURE(DISABLE_CINEMATIC_SLOW_MO_THIS_UPDATE,0x5951e2e1db653567, CommandDisableCinematicSlowModeThisUpdate); SCR_REGISTER_SECURE(IS_BONNET_CINEMATIC_CAM_RENDERING,0x9bf14c0e44bdb17d, CommandIsBonnetCinematicCamRendering); SCR_REGISTER_SECURE(IS_CINEMATIC_CAM_INPUT_ACTIVE,0x3698ce894e1342d5, CommandIsCinematicCamInputActive); SCR_REGISTER_SECURE(IGNORE_MENU_PREFERENCE_FOR_BONNET_CAMERA_THIS_UPDATE,0x438bb2738c8d1cc9, CommandIgnoreMenuPreferenceForBonnetCameraThisUpdate); //Cutscene SCR_REGISTER_SECURE(BYPASS_CUTSCENE_CAM_RENDERING_THIS_UPDATE,0x5a971a2d157136b6, CommandBypassCutsceneCamRenderingThisUpdate); SCR_REGISTER_UNUSED(SHAKE_CUTSCENE_CAM,0x731970af18babee4, CommandShakeCutsceneCam); SCR_REGISTER_UNUSED(IS_CUTSCENE_CAM_SHAKING,0x747c1186c8b8c7be, CommandIsCutsceneCamShaking); SCR_REGISTER_UNUSED(SET_CUTSCENE_CAM_SHAKE_AMPLITUDE,0x9706a280275bce96, CommandSetCutsceneCamShakeAmplitude); SCR_REGISTER_SECURE(STOP_CUTSCENE_CAM_SHAKING,0x1435be4d0e33c803, CommandStopCutsceneCamShaking); SCR_REGISTER_SECURE(SET_CUTSCENE_CAM_FAR_CLIP_THIS_UPDATE,0xf0c79c8b198cd112, CommandSetCutsceneCamFarClipThisUpdate); //Misc SCR_REGISTER_SECURE(GET_FOCUS_PED_ON_SCREEN,0x337b1e5a3d6dedfa, CommandGetFocusPedOnScreen); SCR_REGISTER_SECURE(DISABLE_NEAR_CLIP_SCAN_THIS_UPDATE,0x822c724fc6fae724, CommandDisableNearClipScanThisUpdate); SCR_REGISTER_SECURE(SET_CAM_DEATH_FAIL_EFFECT_STATE,0xecc353e755ab76f1, CommandSetCamDeathFailEffectState); SCR_REGISTER_UNUSED(START_CAMERA_CAPTURE,0x015c04f6d80f2ada, CommandStartCameraCapture); SCR_REGISTER_UNUSED(STOP_CAMERA_CAPTURE,0xf427f64662a73be0, CommandStopCameraCapture); SCR_REGISTER_SECURE(SET_FIRST_PERSON_FLASH_EFFECT_TYPE,0x7659886d4d8ac36a, CommandSetFirstPersonFlashEffectType); SCR_REGISTER_SECURE(SET_FIRST_PERSON_FLASH_EFFECT_VEHICLE_MODEL_NAME,0x7533e83009d5f82f, CommandSetFirstPersonFlashEffectVehicleModelName); SCR_REGISTER_SECURE(SET_FIRST_PERSON_FLASH_EFFECT_VEHICLE_MODEL_HASH,0x058fdcacb20a766a, CommandSetFirstPersonFlashEffectVehicleModelHash); SCR_REGISTER_SECURE(IS_ALLOWED_INDEPENDENT_CAMERA_MODES,0x9cf8be19558b3a3d, CommandIsAllowedIndependentCameraModes); SCR_REGISTER_SECURE(CAMERA_PREVENT_COLLISION_SETTINGS_FOR_TRIPLEHEAD_IN_INTERIORS_THIS_UPDATE,0xb88aab5ba3dc7936, CommandPreventCollisionSettingsForTripleHeadInInteriorsThisUpdate); //Replay SCR_REGISTER_SECURE(REPLAY_GET_MAX_DISTANCE_ALLOWED_FROM_PLAYER,0x0b9cd460e6a37693, CommandReplayGetMaxDistanceAllowedFromPlayer); } // end of registered commands } // end of namespace camera_commands