Files
quakemapping/mod_quoth/launch.bat
2020-01-05 22:57:26 +01:00

242 lines
6.8 KiB
Batchfile

#!/bin/bash
# & @cls & @echo off & echo Launching Quoth... & goto win
# The syntax for this launcher is
# launch [filename] [options...]
# where [filename] specifies the map to launch and [options...] are parameters
# passed to the quake engine
# [filename] is stripped of it's file extensions (e.g. .bsp, .pak) then
# used as the map name to load
# If [filename] is a pak file, a copy will be installed as pak3.pak
# Set the global quothengine before running the launcher to specify a engine
# quakespasm is the default if quothengine is not set
# Values set in the quothoptions global are passed to the command line
pushd "$(dirname "$0")"
quothengine=${quothengine:-'quakespasm'}
quothoptions=${quothoptions:-'-heapsize 64000'}
if [ "$#" -gt 0 ]
then
fname=$(basename "$1")
mapname="+map $(echo "$fname" | sed 's/\.[^.]*$//')"
ext=${fname:(-4)}
if [ "$ext" = '.pak' ]
then
cp "$1" pak3.pak
fi
fi
cd ..
./"$quothengine" -hipnotic -game quoth "$mapname" "$quothoptions" "${@:2}"
popd
exit 0
:win
SETLOCAL
REM Switch to the batch file directory
CD /D "%~dp0"
REM Get the name of the directory we are currently in
REM to use as the -game option on the command line
FOR /f "delims==" %%F IN ("%cd%") DO SET moddir=%%~nF
REM Add the mod selection options to the command line
SET quothoptions=-hipnotic -game %moddir% %quothoptions%
REM clear steam variable as the PickEngine call sets it
SET steam=
CALL:PickEngine
REM Test if we were called with a file on the command line
IF "%~n1"=="" (GOTO Randomiser)
REM Don't let people try to launch the main pak files!
IF "%~f1"=="%~dp0pak0.pak" (
GOTO Randomiser
)
IF "%~f1"=="%~dp0pak1.pak" (
GOTO Randomiser
)
IF "%~f1"=="%~dp0pak2.pak" (
GOTO Randomiser
)
REM The name of the file is used as the map to run
REM This works for pak files, and for readme files
REM The latter helps for existing single file releases
SET quothoptions=+map %~n1 %quothoptions%
REM Test if a pak file was dropped on the batch
SET pakfile=false
IF NOT "%~x1"==".pak" (
GOTO Prelaunch
)
REM We might have been called with a command line to a non-existent pak
IF NOT EXIST "%~f1" (
GOTO Prelaunch
)
REM The user pak is made pak3, for the moment
REM Don't go overriding Quoth resources as future versions may change!
COPY /y "%~f1" "%~dp0pak3.pak" > NUL
IF ERRORLEVEL 1 (GOTO PakError)
SET pakfile=true
GOTO Prelaunch
:Randomiser
REM Randomly show off some of the test maps on some launches
SET /a "seed=%random% %% 128"
IF %seed% LEQ 15 (
set quothoptions=+map kellbase1 %quothoptions%
GOTO Prelaunch
)
IF %seed% LEQ 25 (
set quothoptions=+map kelltest1 %quothoptions%
GOTO Prelaunch
)
IF %seed% LEQ 30 (
set quothoptions=+map kelltest2 %quothoptions%
GOTO Prelaunch
)
IF %seed% LEQ 35 (
set quothoptions=+map kelltest3 %quothoptions%
GOTO Prelaunch
)
IF %seed% LEQ 40 (
set quothoptions=+map kelltest4 %quothoptions%
GOTO Prelaunch
)
IF %seed% LEQ 45 (
set quothoptions=+map kelltest5 %quothoptions%
GOTO Prelaunch
)
IF %seed% LEQ 60 (
set quothoptions=+map ne_basetest %quothoptions%
GOTO Prelaunch
)
:Prelaunch
REM We need to be in the root quake directory when we launch
PUSHD ..
:AddParams
REM If called from the command line, parameters after the first are
REM added to the launch options, but we have to shift the first
REM one off before that is safe
IF "%2" == "" GOTO Launch
SET quothoptions=%2 %quothoptions%
SHIFT /1
GOTO AddParams
:Launch
START "" /B /WAIT %quothengine% %quothoptions%
POPD
GOTO :eof
:PakError
ECHO Quoth encountered a pak file error.
ECHO This may mean another copy of Quoth is still running.
ECHO Please check your pak files and try again.
PAUSE
GOTO :eof
:PickEngine
REM Run through a big long list of engines in order of preference
REM Need to be in the directory above for this
PUSHD ..
REM First we check for engine specified by environment variable
IF EXIST "%quothengine%" (GOTO PickEngineEnd)
REM If we're falling back to an unselected engine, throw in
REM a few more default options
SET quothoptions=%quothoptions% -bpp 32 -heapsize 64000
REM Next we try a few loops. If engine is set by the end of the
REM loop we accept that engine and jump to the end
SET quothengine=
REM Because later engines can overwrite earlier ones
REM engines further down the list have higher priority
REM fitzquake085.exe is top because it's been most
REM extensively tested.
REM Thanks to func_ for hosting the straw-poll this list
REM was compiled from
FOR %%G IN (tyr-quake.exe
tyr-glquake.exe
darkplaces.exe
RMQEngine-Win32.exe
glquakebjp.exe
directq.exe
fitzquake_mark_v_final.exe
fitzquake5.exe
quakespasm.exe
fitzquake085.exe) DO (
IF EXIST %%G (
SET quothengine=%%G
)
)
IF NOT "%quothengine%"=="" (GOTO PickEngineEnd)
REM Try looking for anything fitzquake related
REM The last alphabetically will overwrite any prior engines
REM which in theory should also be the most recent version
FOR %%G IN (fitzquake*.exe) DO SET quothengine=%%G
IF NOT "%quothengine%"=="" (GOTO PickEngineEnd)
REM Next a short list of older custom engines that Preach
REM had lying around
FOR %%G IN (tq146.exe
tq148.exe
joequake.exe
qmb.exe
gltochris.exe
tochris.exe
mhglqr8.exe
joequake-gl.exe
directfitz.exe
) DO (
IF EXIST %%G (
SET quothengine=%%G
)
)
IF NOT "%quothengine%"=="" (GOTO PickEngineEnd)
REM Stock engines - important note
REM The stock engines won't accept a command line
REM if they are the version from steam
REM so we handle steam separately
IF EXIST ..\..\..\steam.dll GOTO SteamEngines
SET quothengine=glquake.exe
IF EXIST %quothengine% (
REM glquake doesn't have dynamic resolution switching so increase from default
SET quothoptions=%quothoptions% -width 1024
GOTO PickEngineEnd
)
SET quothengine=winquake.exe
IF EXIST %quothengine% (
REM winquake crashes playing all the demos so we only give it one
SET quothoptions=%quothoptions% +startdemos base
GOTO PickEngineEnd
)
REM Absolute default (might not even run Quoth?)
SET quothengine=quake.exe
GOTO PickEngineEnd
:SteamEngines
REM There's one reprieve if we're on Steam - the user may have installed
REM the Ultimate Quake Patch which lets us launch mods again
REM Both glquake and winquake will have the same filesize if so
SET quothengine=glquake.exe
IF NOT EXIST winquake.exe GOTO SteamService
FOR /F %%A in ("winquake.exe") DO SET wqsize=%%~zA
FOR /F %%A in ("glquake.exe") DO SET glsize=%%~zA
IF %wqsize% EQU %glsize% GOTO PickEngineEnd
:SteamService
SET quothengine=..\..\..\steam.exe -applaunch 2310
SET quothoptions=%quothoptions% +startdemos base
GOTO PickEngineEnd
:PickEngineEnd
POPD
GOTO :eof