Skip to content

Commit

Permalink
Added fix for Command and Conquer - Red Alert 2 (#46)
Browse files Browse the repository at this point in the history
* Added verb for CnCnet RA2-Launcher installation

* Added fix for RA2

* Updated and fixed cnc-ddraw in Winetricks

* Gamefix RA2: CnCNet is now default / refactoring
  • Loading branch information
Root-Core authored Mar 21, 2024
1 parent 7c31868 commit 9cc354a
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 3 deletions.
58 changes: 58 additions & 0 deletions gamefixes-steam/2229850.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
""" Game fix for Command & Conquer Red Alert™ 2 and Yuri's Revenge™
"""
#pylint: disable=C0103

import os

from protonfixes import util
from protonfixes.logger import log

def main():
""" Install and launch the CnCNet Launcher
It fixes several issues, allows multiplayer and provides a working UI,
while the game has sometimes problems like missing or shifted buttons.
The game will just show a black screen without cnc-ddraw or the patch in place.
"""

# Opt out of CnCNet with 'NO_CNCNET=1 %command%'
no_cncnet = os.getenv('NO_CNCNET', '')
if str.lower(no_cncnet) in ['y', 'yes', 'true', 'on', '1']:
log('Skipping CnCNet on user\'s request.')
use_cnc_ddraw()
return

# Install the CnCNet Launcher
if not util.checkinstalled('cncnet_ra2') and not util.protontricks('cncnet_ra2'):
log('Failed to install CnCNet Launcher, let\'s try cnc-ddraw.')
use_cnc_ddraw()

# CnCNet Launcher is in place, run it
if os.path.isfile('CnCNetYRLauncher.exe'):
log('CnCNet Launcher found, bypass game execution!')
util.replace_command('Ra2.exe', 'CnCNetYRLauncher.exe')
util.replace_command('RA2MD.exe', 'CnCNetYRLauncher.exe')

def use_cnc_ddraw():
""" Install cnc-ddraw, the current replacement from EA isn't working.
"""

log('Using cnc-ddraw.')

# Return early, if cnc-ddraw is installed
if util.checkinstalled('cnc_ddraw'):
log('cnc-ddraw found, nothing to do!')
return

# Install cnc-ddraw
if not util.protontricks('cnc_ddraw'):
log('Failed to install cnc-ddraw')
return

# After installing cnc_ddraw, we need to prevent the game
# from loading the local ddraw.dll, instead of our override.
# Note: This is only done once.
if os.path.isfile('ddraw.dll'):
log('Renaming local ddraw.dll to ddraw.dll.bak')
os.rename('ddraw.dll', 'ddraw.dll.bak')
13 changes: 13 additions & 0 deletions verbs/cncnet_ra2.verb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
w_metadata cncnet_ra2 dlls \
title="CnCnet5 Red Alert / Yuri's Revenge - Multiplayer / Game patches" \
publisher="CnCnet community" \
year="2013" \
media="download" \
file1="CnCNet5_YR_Installer.exe" \
installed_file1="CnCNetYRLauncher.exe"

load_cncnet_ra2()
{
w_download https://github.com/CnCNet/cncnet-yr-client-package/releases/download/yr-8.55/CnCNet5_YR_Installer_8.55.0.exe c1cf19fa40bb07e881ffeea33df8a5961162e009c558b33d91076f51ca3f949c ${file1}
w_try "${WINE}" start.exe /exec ${W_CACHE}/${W_PACKAGE}/${file1} /silent /verysilent /norestart /suppressmsgboxes
}
9 changes: 6 additions & 3 deletions winetricks
Original file line number Diff line number Diff line change
Expand Up @@ -6068,7 +6068,7 @@ w_metadata cnc_ddraw dlls \
publisher="CnCNet" \
year="2021" \
media="download" \
file1="cnc-ddraw-v6.2.0.0.zip" \
file1="cnc-ddraw-v6.3.0.0.zip" \
installed_file1="${W_SYSTEM32_DLLS_WIN}/Shaders/readme.txt"

load_cnc_ddraw()
Expand All @@ -6088,9 +6088,12 @@ load_cnc_ddraw()
# 2023/11/04 https://github.com/FunkyFr3sh/cnc-ddraw/releases/download/v6.0.0.0/cnc-ddraw.zip
# 2024/02/03 https://github.com/FunkyFr3sh/cnc-ddraw/releases/download/v6.1.0.0d/cnc-ddraw.zip
# 2024/02/21 https://github.com/FunkyFr3sh/cnc-ddraw/releases/download/v6.2.0.0/cnc-ddraw.zip
# 2024/03/11 https://github.com/FunkyFr3sh/cnc-ddraw/releases/download/v6.3.0.0/cnc-ddraw.zip

w_download https://github.com/FunkyFr3sh/cnc-ddraw/releases/download/v6.2.0.0/cnc-ddraw.zip e5677ba52c31ffa93421a16edacff0c4d1f03e107aea6fc860861b43e3356119 cnc-ddraw-v6.2.0.0.zip
w_try_unzip "${W_SYSTEM32_DLLS}" "${W_CACHE}/${W_PACKAGE}/${file1}"
w_download https://github.com/FunkyFr3sh/cnc-ddraw/releases/download/v6.3.0.0/cnc-ddraw.zip c024d0ea42ec2d9708dc0a19342d037de7307c291dc43c01948a7d8f06b4deca ${file1}
w_try_unzip "${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}"
w_try_cp_dll "${W_TMP}/ddraw.dll" "${W_SYSTEM32_DLLS}/ddraw.dll"
w_try cp -R -u "${W_TMP}"/* "${W_SYSTEM32_DLLS}/"

w_override_dlls native,builtin ddraw
}
Expand Down

0 comments on commit 9cc354a

Please sign in to comment.