====== Information ======
* Call of Duty: Modern Warfare 2 (2009)
* Steam ((https://store.steampowered.com/app/10180/Call_of_Duty_Modern_Warfare_2_2009/))
* IW4x ((https://iw4x.io/))
* :!: WIP
===== Prerequisites =====
* [[linux:distros:opensuse_tumbleweed_gnome|openSUSE Tumbleweed (GNOME)]]
* [[linux:notes:wine|Wine]] (new WoW64)
* [[programs:linux:steamcmd|SteamCMD]]
====== Dependencies ======
****
sudo zypper install 'git-core'
====== Modern Warfare 2 ======
===== Restore Files =====
mkdir -p ~/'Steam/steamapps/common' && gio open ~/'Steam/steamapps'
ls -d ~/'Steam/steamapps/appmanifest_10180.acf' ~/'Steam/steamapps/appmanifest_10190.acf' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2'
===== Install =====
~/'Steam/steamcmd/steamcmd.sh' +'login' 'Espionage724' +'@sSteamCmdForcePlatformType' 'windows' +'app_update' '10180' +'quit'
~/'Steam/steamcmd/steamcmd.sh' +'login' 'Espionage724' +'@sSteamCmdForcePlatformType' 'windows' +'app_update' '10190' +'quit'
===== Validate =====
****
~/'Steam/steamcmd/steamcmd.sh' +'login' 'Espionage724' +'@sSteamCmdForcePlatformType' 'windows' +'app_update' '10180' 'validate' +'quit'
====== Initial Prefix ======
mkdir -p ~/'.wine' && WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' WINEARCH='win32' wine wineboot --init && WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine winecfg /v 'vista' && WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine REG ADD 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v 'winemenubuilder.exe' /t 'REG_SZ' /d '' /f
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine REG ADD 'HKEY_CURRENT_USER\Software\Wine\Drivers' /v 'Graphics' /t 'REG_SZ' /d 'x11' /f
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine REG ADD 'HKEY_CURRENT_USER\Software\Wine\Direct3D' /v 'renderer' /t 'REG_SZ' /d 'gdi' /f
====== IW4x ======
* https://docs.iw4x.io/get-started/manual-install/linux-guide/#2-using-wine-prefix
* https://github.com/iw4x/iw4x-client/releases
* https://github.com/iw4x/iw4x-rawfiles/releases
wget -O ~/'Downloads/IW4x-iw4x-latest.dll' 'https://github.com/iw4x/iw4x-client/releases/latest/download/iw4x.dll' && mv -fv ~/'Downloads/IW4x-iw4x-latest.dll' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.dll'
wget -O ~/'Downloads/IW4x-release-latest.zip' 'https://github.com/iw4x/iw4x-rawfiles/releases/latest/download/release.zip' && unzip -o ~/'Downloads/IW4x-release-latest.zip' -d ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2' && rm -fv ~/'Downloads/IW4x-release-latest.zip'
====== Settings ======
* https://github.com/ineedbots/iw4_bot_warfare#dvars
* https://github.com/ineedbots/iw4_bot_warfare/issues/118
===== Client =====
mkdir -p ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players' && ee ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players/iw4x_custom.cfg'
// General
seta net_noipx "1"
seta sv_lanOnly "1"
seta cl_packetdup "0"
seta g_log "NUL"
seta com_maxfps "0"
seta ui_nativeCursor "1"
seta r_preloadShaders "1"
seta cl_autoRecord "0"
seta cl_voice "0"
// Graphics
seta r_useD3D9Ex "0"
seta r_fullscreen "1"
seta r_noborder "0"
seta r_vsync "0"
seta r_mode "640x480"
seta r_aspectRatio "standard"
seta r_texFilterAnisoMax "16"
seta r_texFilterAnisoMin "16"
// Player
seta name "Espionage724"
seta clanName "RoE"
seta cl_anonymous "1"
seta cl_notifyFriendState "0"
bind MOUSE3 "+melee"
bind MWHEELDOWN "weapnext"
// Bot Warfare
seta bots_main_menu "0"
seta bots_manage_fill "10"
seta bots_main_chat "0"
seta bots_skill "5"
// End
===== Server =====
* https://github.com/iw4x/iw4-server-configs
mkdir -p ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players' && ee ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players/iw4x_localhost.cfg'
// Server
set sv_hostname "IW4x (localhost)"
set sv_motd "Welcome to your localhost server!"
set net_port "28960"
set g_password ""
set sv_securityLevel "22"
set sv_randomMapRotation "1"
set sv_allowClientConsole "1"
// General
set net_noipx "1"
set sv_lanOnly "1"
set g_antilag "0"
set cl_packetdup "0"
set com_maxfps "0"
set g_log "NUL"
set cl_voice "0"
// TDM
set g_gametype "war"
set sv_maprotation "gametype war map mp_afghan gametype war map mp_boneyard gametype war map mp_brecourt gametype war map mp_checkpoint gametype war map mp_derail gametype war map mp_estate gametype war map mp_favela gametype war map mp_highrise gametype war map mp_invasion gametype war map mp_nightshift gametype war map mp_quarry gametype war map mp_rundown gametype war map mp_rust gametype war map mp_subbase gametype war map mp_terminal gametype war map mp_underpass"
// FFA
//set g_gametype "dm"
//set sv_maprotation "gametype dm map mp_afghan gametype dm map mp_boneyard gametype dm map mp_brecourt gametype dm map mp_checkpoint gametype dm map mp_derail gametype dm map mp_estate gametype dm map mp_favela gametype dm map mp_highrise gametype dm map mp_invasion gametype dm map mp_nightshift gametype dm map mp_quarry gametype dm map mp_rundown gametype dm map mp_rust gametype dm map mp_subbase gametype dm map mp_terminal gametype dm map mp_underpass"
// Bot Warfare
set bots_main_firstIsHost "1"
set bots_main_waitForHostTime "0"
set bots_manage_fill "17"
set bots_main_menu "0"
set bots_main_chat "0"
set bots_skill "5"
// End
====== Bot Warfare ======
* https://github.com/ineedbots/iw4_bot_warfare
* https://docs.iw4x.io/guides/bot-warfare/
===== Download Source ====
* https://github.com/ineedbots/iw4_bot_warfare/commits/master/
cd ~ && mkdir -p ~/'Projects' && rm -Rf ~/'Projects/IW4-Bot-Warfare/src' && git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/ineedbots/iw4_bot_warfare.git' ~/'Projects/IW4-Bot-Warfare/src'
===== Files =====
****
mkdir -p ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/userraw' && cp -Rf ~/'Projects/IW4-Bot-Warfare/src/scriptdata' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/userraw/scriptdata'
===== IWD =====
****
7z a -m'0=Copy' -t'zip' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/userraw/z_svr_bots.iwd' ~/'Projects/IW4-Bot-Warfare/src/maps' ~/'Projects/IW4-Bot-Warfare/src/scripts' && ls ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/userraw/z_svr_bots.iwd'
====== Libraries ======
===== DXVK =====
* https://github.com/doitsujin/dxvk
==== master ====
* https://github.com/doitsujin/dxvk/actions ((need to be signed into GitHub, and select the latest ''master'' artifacts package))
* Last tested: ''dxvk-master-9aa4e3da8d026b767de3c530e3b6bd0cdd9b0a76.zip''
unzip -j -o ~/'Downloads/dxvk-master-'*'.zip' 'x32/d3d9.dll' -d ~/'.wine/Call of Duty Modern Warfare 2 (2009)/drive_c/windows/system32'
==== Dll Override ====
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine REG ADD 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v 'd3d9' /t 'REG_SZ' /d 'native' /f
==== dxvk.conf ====
* https://github.com/doitsujin/dxvk/blob/master/dxvk.conf
ee ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/dxvk.conf'
# General
d3d9.dpiAware = "False"
d3d9.enumerateByDisplays = "False"
# Intel
d3d9.hideIntelGpu = "False"
d3d9.floatEmulation = "False"
dxvk.enableGraphicsPipelineLibrary = "False"
dxvk.enableMemoryDefrag = "False"
dxvk.lowerSinCos = "False"
# Tweaks
d3d9.presentInterval = "0"
d3d9.maxFrameLatency = "1"
dxgi.maxFrameLatency = "1"
dxgi.syncInterval = "0"
dxvk.tearFree = "False"
dxvk.latencySleep = "False"
# HUD
#dxvk.hud = "devinfo,fps,memory,gpuload,frametimes"
#dxvk.hud = "full"
# End
====== Scripts ======
===== Server Start =====
mkdir -p ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)' && ee ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-localhost-server-start.sh' && chmod +x ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-localhost-server-start.sh'
#!/bin/bash
cd '/tmp'
export WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)'
'/usr/local/bin/wine64.bin' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.exe' -dedicated -disable-notifies -disable-mongoose -disable-rate-limit-check +exec 'iw4x_localhost.cfg' +map_rotate
unset 'WINEPREFIX'
# End
~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-localhost-server-start.sh'
===== IW4x Update =====
mkdir -p ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)' && ee ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-update.sh' && chmod +x ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-update.sh'
#!/bin/bash
cd '/tmp'
wget -O ~/'Downloads/IW4x-iw4x-latest.dll' -q --show-progress 'https://github.com/iw4x/iw4x-client/releases/latest/download/iw4x.dll'
mv -f ~/'Downloads/IW4x-iw4x-latest.dll' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.dll'
wget -O ~/'Downloads/IW4x-release-latest.zip' -q --show-progress 'https://github.com/iw4x/iw4x-rawfiles/releases/latest/download/release.zip'
unzip -q -o ~/'Downloads/IW4x-release-latest.zip' -d ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2'
rm -f ~/'Downloads/IW4x-release-latest.zip'
zenity --title 'IW4x Updater' --text 'Client and Rawfiles update complete' --icon ~/'.wine/Icons/IW4x-256.png' --timeout '2' --info
:
# End
~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-update.sh'
===== Bot Warfare Update =====
mkdir -p ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)' && ee ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-bot-warfare-update.sh' && chmod +x ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-bot-warfare-update.sh'
#!/bin/bash
cd '/tmp'
git -C ~/'Projects/IW4-Bot-Warfare/src' reset --hard 'origin/master'
git -C ~/'Projects/IW4-Bot-Warfare/src' pull origin 'master' --rebase
cp -Rf ~/'Projects/IW4-Bot-Warfare/src/scriptdata' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/userraw'
7z a -m'0=Copy' -t'zip' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/userraw/z_svr_bots.iwd' ~/'Projects/IW4-Bot-Warfare/src/maps' ~/'Projects/IW4-Bot-Warfare/src/scripts'
zenity --title 'IW4x Updater' --text 'Bot Warfare update complete' --icon ~/'.wine/Icons/IW4x-256.png' --timeout '2' --info
:
# End
~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-bot-warfare-update.sh'
===== Profile Back-up =====
mkdir -p ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)' && ee ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-profile-backup.sh' && chmod +x ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-profile-backup.sh'
#!/bin/bash
cd '/tmp'
tar -czf ~/'Downloads/'$(date +%Y-%m-%d-%s)'-IW4x-Profile.tar.gz' -C ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players' 'iw4x.stat'
zenity --title 'IW4x Profile Backup' --text 'Profile Backed-up to Downloads' --icon ~/'.wine/Icons/IW4x-256.png' --timeout '1' --info
# End
~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-profile-backup.sh'
====== Desktop Launcher ======
===== IW4x =====
mkdir -p ~/'.local/share/applications/wine/Programs/IW4x' && ee ~/'.local/share/applications/wine/Programs/IW4x/IW4x.desktop' && sed -i 's/'CHANGEME'/'$USER'/g' ~/'.local/share/applications/wine/Programs/IW4x/IW4x.desktop' && update-desktop-database --quiet ~/'.local/share/applications'
[Desktop Entry]
Name=IW4x
Categories=Game;
Path=/tmp
Exec='/bin/bash' -c "WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.exe' +exec 'iw4x_custom.cfg' +set 'r_fullscreen 1' +set 'g_antilag 0'"
Type=Application
StartupNotify=false
Icon=/home/CHANGEME/.wine/Icons/IW4x-256.png
StartupWMClass=iw4x.exe
Actions=Server;Saves;Window;Update-IW4x;Update-Bots;Kill;Notes;
[Desktop Action Server]
Exec='/bin/bash' -c "kgx --working-directory='/tmp' -T 'IW4x [Server]' -e ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-localhost-server-start.sh'"
Name=Local Server
[Desktop Action Saves]
Exec='/bin/bash' -c "~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-profile-backup.sh'"
Name=Profile Back-up
[Desktop Action Window]
Exec='/bin/bash' -c "WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.exe' +exec 'iw4x_custom.cfg' +set 'r_fullscreen 0' +set 'g_antilag 0'"
Name=IW4x (Windowed)
[Desktop Action Update-IW4x]
Exec='/bin/bash' -c "kgx --working-directory='/tmp' -T 'IW4x [Updater]' -e ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-update.sh'"
Name=Update Client + Rawfiles
[Desktop Action Update-Bots]
Exec='/bin/bash' -c "kgx --working-directory='/tmp' -T 'Bot Warfare [Updater]' -e ~/'Steam/scripts/Call of Duty Modern Warfare 2 (10180)/iw4x-bot-warfare-update.sh'"
Name=Update Bot Warfare
[Desktop Action Kill]
Exec='/bin/bash' -c "WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wineserver -k"
Name=Force-close IW4x
[Desktop Action Notes]
Exec='/bin/bash' -c "gio open 'https://wiki.realmofespionage.xyz/games:linux:wine:cod_mw2_2009_iw4x_steamcmd'"
Name=Install Notes
# End
==== Icon ====
****
mkdir -p ~/'.wine/Icons' && wrestool --output=$HOME/'.wine/Icons/IW4x-256.png' --extract --raw --type='3' --name='6' ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.exe'
====== Quick Commands ======
===== Winecfg =====
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' winecfg
===== Winetricks =====
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' winetricks
===== Registry Editor =====
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' regedit
===== Kill =====
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wineserver --kill
===== Execute =====
==== IW4x ====
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.exe' +exec 'iw4x_custom.cfg' +set 'r_fullscreen 1' +set 'g_antilag 0'
=== Window ===
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.exe' +exec 'iw4x_custom.cfg' +set 'r_fullscreen 0' +set 'g_antilag 0'
==== Server ====
****
WINEPREFIX=~/'.wine/Call of Duty Modern Warfare 2 (2009)' wine ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/iw4x.exe' -dedicated -disable-notifies -disable-mongoose -disable-rate-limit-check +exec 'iw4x_localhost.cfg' +map_rotate
===== Save Restore =====
* ''players/iw4x.stat''
mkdir -p ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players' && gio open ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players'
===== Main Config =====
****
ee ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2/players/iw4x_config.cfg'
===== Root Folder =====
****
gio open ~/'Steam/steamapps/common/Call of Duty Modern Warfare 2'