@echo off setlocal EnableDelayedExpansion set CONFIG=%1 if "%CONFIG%"=="" set CONFIG=Release if "%CONFIG:~0,1%"=="/" set CONFIG=%CONFIG:~1% if "%CONFIG:~0,1%"=="-" set CONFIG=%CONFIG:~1% if defined VCINSTALLDIR goto :env_ready set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" if not exist "%VSWHERE%" set "VSWHERE=%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" if not exist "%VSWHERE%" ( echo ERROR: vswhere.exe not found.. exit /b 1 ) for /f "usebackq delims=" %%P in (`"%VSWHERE%" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set "VS_PATH=%%P" if not defined VS_PATH ( echo ERROR: No Visual Studio installation with VC tools found. exit /b 1 ) call "%VS_PATH%\VC\Auxiliary\Build\vcvarsall.bat" x64 >nul 2>&1 if errorlevel 1 ( echo ERROR: vcvarsall.bat failed. exit /b 1 ) :env_ready set OUTDIR=.\output\bin\%CONFIG% set OBJDIR=.\output\obj\%CONFIG% if not exist "%OUTDIR%" mkdir "%OUTDIR%" if not exist "%OBJDIR%" mkdir "%OBJDIR%" set ML_FLAGS=/nologo /W3 /WX /c /Cx /Zi /Fo"%OBJDIR%\\" /I . if /I "%CONFIG%"=="Debug" ( set ML_FLAGS=%ML_FLAGS% /DDEBUG ) else ( set ML_FLAGS=%ML_FLAGS% /DNDEBUG ) set LINK_FLAGS=/nologo /DLL /SUBSYSTEM:WINDOWS /MACHINE:X64 /DEBUG set LINK_FLAGS=%LINK_FLAGS% /DEF:raider.def set LINK_FLAGS=%LINK_FLAGS% /OUT:"%OUTDIR%\raider.dll" set LINK_FLAGS=%LINK_FLAGS% /PDB:"%OUTDIR%\raider.pdb" set LINK_FLAGS=%LINK_FLAGS% /IMPLIB:"%OUTDIR%\raider.lib" set "DETOURS_LIBPATH=" if exist ".\lib\detours.lib" set "DETOURS_LIBPATH=.\lib" if not defined DETOURS_LIBPATH if exist "%VCPKG_ROOT%\packages\detours_x64-windows\lib\detours.lib" set "DETOURS_LIBPATH=%VCPKG_ROOT%\packages\detours_x64-windows\lib" if not defined DETOURS_LIBPATH if exist "%VCPKG_ROOT%\packages\detours_x64-windows-static\lib\detours.lib" set "DETOURS_LIBPATH=%VCPKG_ROOT%\packages\detours_x64-windows-static\lib" if not defined DETOURS_LIBPATH if exist "%VCPKG_INSTALLED_DIR%\x64-windows\lib\detours.lib" set "DETOURS_LIBPATH=%VCPKG_INSTALLED_DIR%\x64-windows\lib" if not defined DETOURS_LIBPATH ( echo. echo ERROR: detours.lib not found. Are you stupid? echo. exit /b 1 ) set LINK_FLAGS=%LINK_FLAGS% /LIBPATH:"%DETOURS_LIBPATH%" set LIBS=kernel32.lib user32.lib msvcrt.lib ucrt.lib vcruntime.lib legacy_stdio_definitions.lib detours.lib set ASM_FILES=^ raider.asm ^ sdk_globals.asm ^ patterns.asm ^ native.asm ^ util.asm ^ logger.asm ^ hooks.asm ^ ufunctionhooks.asm ^ gui.asm ^ zerogui.asm ^ zeroinput.asm ^ logic\game.asm ^ logic\inventory.asm ^ logic\abilities.asm ^ logic\spawners.asm ^ logic\teams.asm ^ gamemodes\gamemode_base.asm ^ gamemodes\gamemode_solos.asm ^ gamemodes\gamemode_duos.asm ^ gamemodes\gamemode_50v50.asm ^ gamemodes\gamemode_playground.asm ^ gamemodes\gamemode_lategame.asm ^ sdk\sdk_structs.asm ^ sdk\sdk_classes.asm ^ sdk\sdk_fort.asm set OBJ_LIST= set ERRORS=0 for %%F in (%ASM_FILES%) do ( set SRC=%%F set FNAME=%%~nF set FDIR=%%~dpF set OBJNAME=!FDIR:logic\=logic_! set OBJNAME=!OBJNAME:gamemodes\=gm_! set OBJNAME=!OBJNAME:sdk\=sdk_! set OBJNAME=!OBJNAME:\=_! set OBJ=%OBJDIR%\!OBJNAME!!FNAME!.obj echo [ML64] %%F ml64.exe %ML_FLAGS% /Fo"!OBJ!" "%%F" if errorlevel 1 ( echo ERROR: failed to assemble %%F set /A ERRORS=!ERRORS!+1 ) else ( set OBJ_LIST=!OBJ_LIST! "!OBJ!" ) ) if !ERRORS! GTR 0 ( echo. echo BUILD FAILED: !ERRORS! files failed to assemble. exit /b 1 ) echo. echo [LINK] raider.dll link.exe %LINK_FLAGS% %OBJ_LIST% %LIBS% if errorlevel 1 ( echo ERROR: link failed. exit /b 1 ) echo. echo BUILD SUCCEEDED: %OUTDIR%\raider.dll exit /b 0