Files
gtav-src/tools_ng/bin/RockstarTargetManager2/_game_common.bat
T
2025-09-29 00:52:08 +02:00

313 lines
11 KiB
Batchfile
Executable File

@echo off
::
:: %RS_TOOLSBIN%\RockstarTargetManager\_game_common.bat should not be directly modified.
::
:: This file gets automatically copied from %RS_CODEBRANCH%\rage\base\tools\ui\RockstarTargetManager\RockstarTargetManager\_game_common.bat
:: when a new version of R*TM is released (see %RS_CODEBRANCH%\rage\base\tools\ui\RockstarTargetManager\CopyToTools.bat).
::
setlocal enabledelayedexpansion
set batch_dir=%~dp0
:: This file is intended to be called by %RS_BUILDBRANCH%\_launch.bat only.
if "%called_from%" == "" (
echo %0 should not be called directly.
echo Parent batchfile needs to set %%called_from%%
exit 1
)
set exename=%called_from%
:: If you locally create an exename_transform.bat file, it will be called here.
:: The idea is to add a hook to allow the correct name transform if your p4 clientspec has renamed this batchfile.
:: For example, the following line in a clientspec
:: //depot/gta5/build/dev_ng/game_... //workspace/gta5/build/dev_ng/p4_game_...
:: Would add a p4_ prefix to each filename so that it doesn't conflict with locally built executables.
:: An exename_transform.bat could then be created to strip the p4_ prefix,
:: set exename=%exename:p4_=%
if exist exename_transform.bat (
echo.Calling exename_transform.bat
call exename_transform.bat
echo. %exename% -^> !exename!
)
:: Extract the platform and build from exename.
:: Expected format is "game_platform_build" (without the double quotes).
set application=
set platform=
set build=
for /F "tokens=1,2,* delims=_" %%a in ("%exename%") do (
set application=%%a
set platform=%%b
set build=%%c
)
:: instance_id is used by some targets that can handle multiple simultaneous instances of the game running
:: Make sure it's cleared; it will be set up later if applicable (currently in the pc connect script)
:: * This will need to be removed if we rely on the var being set externally or earlier in the flow *
set instance_id=
if "%application%" == "game" (
title Running %platform% %build%...
) else (
title Running %application% %platform% %build%...
)
echo.
:: POST_KILL_CMD_MSG is used to indicate whether this is a RocketLauncher launch. Set here
:: for readability
set enablerl=%POST_KILL_CMD_MSG%
:: RTM needs to know whether this is a RocketLauncher launch or not. If it is, then
:: assuming current directory is in X:\americas\build\{branch}\rocketlauncher ,
:: extract the rocketlauncher token
set RS_RTM_LAUNCH_BRANCH=%cd%
pushd ..
set RS_RTM_LAUNCH_BRANCH=!RS_RTM_LAUNCH_BRANCH:%cd%\=!
popd
:: RS_BUILDBRANCH etc are no longer set by tools, so set them here based on current directory so that
:: they get passed through as pseudo environment variables to launch the game process through R*TM.
:: Note that this can also be relied up by _connect_target_%platform%.bat, so it needs to be set early.
if not "%enablerl%" == "" (
pushd ..
)
set RS_BUILDBRANCH=%cd%
pushd ..\..
set RS_PROJROOT=%cd%
popd
pushd ..
set RS_BRANCH=!RS_BUILDBRANCH:%cd%\=!
popd
if not "%enablerl%" == "" (
popd
) else (
@REM if this is not a RocketLauncher launch, then force RS_RTM_LAUNCH_BRANCH to be
@REM the same as RS_BRANCH for safety
set RS_RTM_LAUNCH_BRANCH=!RS_BRANCH!
)
:: Scan the command line for any special treatment arguments.
:: An arg enclosed in square brackets is treated as the target ip address.
:: -skipglobalargs removes the default arguments file.
set userSpecifiedCmdline=%*
set skipArgsfile=
set target_ip=
for %%a in (%*) do (
set removeArg=0
set arg=%%a
if "!arg:~0,1!" == "[" (
if "!arg:~-1!" == "]" (
set target_ip=!arg:~1,-1!
set removeArg=1
)
)
if /i "!arg!" == "-skipglobalargs" (
set skipArgsFile=!arg!
set removeArg=1
)
if "!removeArg!" == "1" (
set userSpecifiedCmdline=!userSpecifiedCmdline:%%a=!
)
)
:: Bob and future games use global_args.txt as a checked in file, that then recursively references args.txt.
:: Legacy GTA V does not use global_args.txt, instead it optionally includes commandline.txt (exclusive) or args.txt, in that order.
:: If -skipglobalargs exists, we'll ignore them.
::
:: This step is done a little earlier than the rest of autoGeneratedCmdline, since _connect_target_%platform%.bat may
:: need access to the response file (for example PC).
::
set updatedir=%cd:\=/%/
if "%skipArgsfile%" == "" (
if exist global_args.txt (
set autoGeneratedCmdline=@%updatedir%global_args.txt
) else if exist commandline.txt (
set autoGeneratedCmdline=@%updatedir%commandline.txt
) else if exist args.txt (
set autoGeneratedCmdline=@%updatedir%args.txt
)
) else (
echo Not using commandline text files due to presense of -skipglobalargs.
set autoGeneratedCmdline=
)
:: Select default target if none was specified, then connect to it.
:: Environment variables that are considerred "documented" for this batchfile to access are
::
:: autoGeneratedCmdline (though note that this isn't the final version)
:: userSpecifiedCmdline
:: target_ip (may be empty)
::
:: Upon return
::
:: target_ip must be set
::
call "%batch_dir%\_connect_target_%platform%.bat"
if not "%POST_KILL_CMD_MSG%" == "" (
echo %POST_KILL_CMD_MSG%
%POST_KILL_CMD%
)
:: Build up the autogenerated part of the command line.
set rootdir=%updatedir:dlc/titleupdate/=%
if not "%updatedir%" == "%rootdir%" (
set updatearg=-update=%updatedir%
)
if "%RS_RFS_DISABLE%" == "" (
set rootdircmd=-rootdir=%rootdir% %updatearg%
) else (
set rootdircmd=
)
set autoGeneratedCmdline=%autoGeneratedCmdline% %rootdircmd% %updatearg%
set /p hostaddr=<"%TEMP%\rfs.dat"
set autoGeneratedCmdline=%autoGeneratedCmdline% -localhost %hostaddr%
call "%batch_dir%\..\..\script\util\get_config_ports.bat" > nul
if not "%PORT_SYSTRAYRFS%" == "" (
set autoGeneratedCmdline=%autoGeneratedCmdline% -rfsport=%PORT_SYSTRAYRFS%
)
:: The -argset param allows for a user-defined method of toggling other params (via prefixes)
set find_arg=argset
set argset=
set found_arg_value=
set found_arg_message=
for /f "usebackq tokens=1,2 delims==" %%a in (`call "%batch_dir%\_scan_cmdline.bat" %autoGeneratedCmdline% %userSpecifiedCmdline%`) do (
if "%%a" == "found_arg_message" set found_arg_message=%%b
if "%%a" == "found_arg_value" set found_arg_value=%%b
)
if not "%found_arg_value%" == "" (
echo -argset=%found_arg_value% specified %found_arg_message%
set argset=%found_arg_value%
)
:: Add -netlogprefix and potentially also -logfile if not running with R*TM.
if not "%RS_RTM_DISABLE%" == "" (
set autoGeneratedCmdline=!autoGeneratedCmdline! -netlogprefix=%target_ip_bare%
rem :: Add -logfile to the command line if it isn't already there.
rem :: Can't just add to the start of the command line (to allow later commands to override it), since response files are not parsed in order.
set find_arg=logfile
set found_arg_value=
set found_arg_message=
for /f "usebackq tokens=1,2 delims==" %%a in (`call "%batch_dir%\_scan_cmdline.bat" %autoGeneratedCmdline% %userSpecifiedCmdline%`) do (
if "%%a" == "found_arg_value" (
set found_arg_value=%%b
) else if "%%a" == "found_arg_message" (
set found_arg_message=%%b
)
)
if "!found_arg_value!" == "" (
set autoGeneratedCmdline=!autoGeneratedCmdline! -logfile=console-%target_ip_bare%.log
) else (
echo -logfile=!found_arg_value! specified !found_arg_message!, therefore not adding default -logfile cmd line arg.
)
)
:: If -sparsegameheap is in a response file, replicate it on the immediate commandline so it can be parsed early.
:: Also convert it from -sparsegameheap to @sparsegameheap
set find_arg=sparsegameheap
set param_sparsegameheap_found=
for /f "usebackq tokens=1,2 delims==" %%a in (`call "%batch_dir%\_scan_cmdline.bat" %autoGeneratedCmdline% %userSpecifiedCmdline%`) do (
if "%%a" == "found_arg_message" (
set param_sparsegameheap_found=%%b
)
)
if not "%param_sparsegameheap_found%"=="" (
set autoGeneratedCmdline=@sparsegameheap %autoGeneratedCmdline%
)
:: If -extragpumembank is in a response file, replicate it on the immediate commandline so it can be parsed early.
set find_arg=extragpumembank
set param_extragpumembank=
for /f "usebackq tokens=1,2 delims==" %%a in (`call "%batch_dir%\_scan_cmdline.bat" %autoGeneratedCmdline% %userSpecifiedCmdline%`) do (
if "%%a" == "found_arg_value" (
set param_extragpumembank=%%b
)
)
if not "%param_extragpumembank%"=="" (
set autoGeneratedCmdline=%autoGeneratedCmdline% -extragpumembank=%param_extragpumembank%
)
:: If -enablesharedtex is in a response file, replicate it on the immediate commandline so it can be parsed easily.
set find_arg=enablesharedtex
set param_enablesharedtex_found=
for /f "usebackq tokens=1,2 delims==" %%a in (`call "%batch_dir%\_scan_cmdline.bat" %autoGeneratedCmdline% %userSpecifiedCmdline%`) do (
if "%%a" == "found_arg_message" (
set param_enablesharedtex_found=%%b
)
)
if not "%param_enablesharedtex_found%"=="" (
set autoGeneratedCmdline=%autoGeneratedCmdline% -enablesharedtex
)
:: If -workspace is in a response file, replicate it on the immediate commandline so it can be parsed easily.
set find_arg=workspace
set set_workspace=
for /f "usebackq tokens=1,2 delims==" %%a in (`call "%batch_dir%\_scan_cmdline.bat" %autoGeneratedCmdline% %userSpecifiedCmdline%`) do (
if "%%a" == "found_arg_message" (
set set_workspace=%%b
)
)
if not "%set_workspace%"=="" (
if /i "%platform%"=="prospero" (
set RSG_PS5_WORKSPACE=%USERNAME%_full
if /i not "%RS_BRANCH%"=="dev" set RSG_PS5_WORKSPACE=!RSG_PS5_WORKSPACE!_%RS_BRANCH%
set autoGeneratedCmdline=%autoGeneratedCmdline% -workspace=!RSG_PS5_WORKSPACE!
) else (
set autoGeneratedCmdline=%autoGeneratedCmdline% -workspace
)
)
:: Check if -rag was specified in the command line that will be used to boot the game.
:: If it was, then make sure it is running.
set find_arg=rag
set want_rag=0
set found_arg_message=
for /f "usebackq tokens=1,2 delims==" %%a in (`call "%batch_dir%\_scan_cmdline.bat" %autoGeneratedCmdline% %userSpecifiedCmdline%`) do (
if "%%a" == "found_arg_message" (
set want_rag=1
set found_arg_message=%%b
)
)
if "%want_rag%" == "1" (
echo -rag specified %found_arg_message%
tasklist | find /i "rag.exe" >nul
if errorlevel 1 (
echo Launching RAG
start "" /d "%batch_dir%\..\rag" "%batch_dir%\..\rag\rag.exe"
)
)
:: Always make sure SysTrayRFS is running.
if "%RS_RFS_DISABLE%" == "" (
tasklist | find /i "SysTrayRfs.exe" >nul
if errorlevel 1 (
echo Launching SysTrayRFS
start "" "%batch_dir%\..\systrayrfs.exe" -trusted -nofocus
)
)
:: If R*TM is enabled, ensure it is running.
if "%RS_RTM_DISABLE%" == "" (
rem :: Double start here so that R*TM is not directly parented to current cmd, giving it its own lifetime
rem :: http://stackoverflow.com/questions/1035213/process-start-and-the-process-tree
echo Launching R*TM
start "" /d "%batch_dir%" /b cmd /c start "" "Rockstar Target Manager.exe" --gui --retry-start=1
) else (
echo R*TM disabled, not launching
"%batch_dir%\Rockstar Target Manager.exe" --disabletarget=%target_ip% | findstr ^^
)
:: Give all the auxilary programs a little time to launch.
ping -w 1000 -n 2 127.0.0.1 >nul
call "%batch_dir%\_launch_%platform%.bat" %argsfile% %cmdline%
:: Set errorlevel 0
cmd /C exit 0