blob: 138c44f2e0bc849bb67a6c215cd45ca8848a46fc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#!/bin/bash
# Assuming the script is under this dir
DIR="/opt/tiberiansun"
usrdir="$HOME/.tiberiansun"
prefixdir="$usrdir/tiberiansun"
gamedir="$prefixdir/drive_c/Program Files/EA Games/Command & Conquer The First Decade/Command & Conquer(tm) Tiberian Sun(tm)/SUN"
export WINEARCH='win32'
export WINEPREFIX="$prefixdir"
launchgame() {
cd "$gamedir"
if ! [ "$?" -eq 0 ]
then
echo "ERROR: Couldn't cd into game working directory."
echo "Examine '$gamedir'."
echo "Delete '$usrdir' and re-execute this script to recreate it."
return 1
fi
# Running explorer is a small hack to get windowed mode working correctly
# without having to change the X11 screen colour depth. The resolution can
# be adjusted in-game, and sticks for future runs. Running the game
# non-windowed causes a variety of graphical glitches.
WINEDEBUG='-all' wine explorer /desktop=tiberiansun,800x600 ./SUN.EXE
exitcode="$?"
if ! [ "$exitcode" -eq 0 ]
then
echo "wine exited abnormally. It's possible that the WINEPREFIX needs to be recreated."
echo "Delete '$usrdir' and re-execute this script to recreate the WINEPREFIX dir."
echo "Make sure to backup any saved games that directory contains before deleting it."
return $exitcode
fi
return 0
}
createprefix() {
# Set up basic stuff with wineboot
echo ">>> wineboot"
mkdir "$usrdir"
wineboot
if ! [ "$?" -eq 0 ]
then
echo "wineboot exited abnormally. Can't create the wineprefix at '$prefixdir'."
return 1
fi
# Prepare copies/symlinks of files required by the game
mkdir -p "$gamedir"
respath="$DIR/SUN"
echo ">>> Game files"
# Files that are written to
cp "$respath/SUN.INI" "$gamedir/"
cp "$respath/Woldata.key" "$gamedir/"
# Files/subdirs that are only ever read
readonlyFiles=$(ls -1 "$respath/" | grep -vE 'SUN\.INI|Woldata\.key')
for file in $readonlyFiles
do
ln -s -T "$respath/$file" "$gamedir/$file"
done
echo ">>> MS Components"
# Install DirectX (minimum version is 6)
winetricks d3dx9
echo ">>> Multiplayer"
# Multiplayer setup
mkdir -p "$gamedir/Internet/"
cp "$DIR/Internet/NL.CFG" "$gamedir/Internet/"
cp "$DIR/Internet/WOLAPI.INI" "$gamedir/Internet/"
readonlyFiles=$(ls -1 "$DIR/Internet" | grep -vE 'NL\.CFG|WOLAPI\.INI')
for file in $readonlyFiles
do
ln -s -T "$DIR/Internet/$file" "$gamedir/Internet/$file"
done
wine regedit "$gamedir/Internet/tibsun_regadd.reg" || echo "regedit failed"
pushd "$gamedir/Internet" >/dev/null
wine regsvr32 WOLAPI.dll
wine regsvr32 WOLBrowser.dll
popd >/dev/null
# Resolution
echo ">>> Enable high resolution screen support"
sed -i -e 's/\[Video\]/[Video]\r\nAllowHiResModes=true/' "$gamedir/SUN.INI"
# TODO Speed decrease?
# Fix renderer
wine regedit "$DIR/fix-renderer.reg" || echo "regedit failed"
}
# Create the directory if it does not exist, then run the game.
if ! [ -d $usrdir ]
then
echo "Creating wineprefix for the game. This only needs to be done once, future runs will skip this step."
# Don't continue if there's an error when creating the prefix
createprefix || exit $?
echo "Wineprefix creation complete, running the game."
fi
launchgame
exit $?
|