promptless dll plugins

This commit is contained in:
Kent Slaney 2024-09-09 17:09:18 -07:00
parent 9b1ba39c9b
commit 05bbc6d482
3 changed files with 24 additions and 15 deletions

View file

@ -1,7 +1,7 @@
pkgbase = bakkesmod-steam
pkgdesc = A mod aimed at making you better at Rocket League!
pkgver = 2.43
pkgrel = 3
pkgrel = 4
url = https://bakkesmod.com/
arch = x86_64
license = GPL
@ -13,7 +13,7 @@ pkgbase = bakkesmod-steam
makedepends = python
source = dll-2-0-43.zip::https://github.com/bakkesmodorg/BakkesModInjectorCpp/releases/download/2.0.43/bakkesmod.zip
source = src-2-0-43.zip::https://github.com/bakkesmodorg/BakkesModInjectorCpp/archive/refs/tags/2.0.43.zip
source = loopback-2-43-3.zip::https://github.com/kentslaney/bakkesmod-arch/archive/refs/tags/2.43-3-steam.zip
source = loopback-2-43-4.zip::https://github.com/kentslaney/bakkesmod-arch/archive/refs/tags/2.43-4-steam.zip
sha256sums = 3d39b07149872d891659330185ef9c4e02c580bfad67ed2df9979dbd72d4ae61
sha256sums = 2d9cb1534fbae77ba008b07be3291d30e98a872ebfb0f0b3e6bb0c638d98bef8
sha256sums = SKIP

View file

@ -1,7 +1,7 @@
# Maintainer: Kent Slaney <kent@slaney.org>
pkgname=bakkesmod-steam
pkgver=2.43
pkgrel=3
pkgrel=4
pkgdesc="A mod aimed at making you better at Rocket League!"
arch=('x86_64')
url="https://bakkesmod.com/"
@ -61,17 +61,13 @@ build() {
int wmain(int argc, wchar_t* argv[]) {
std::wstring ps = L"RocketLeague.exe";
auto official = L"C:\\users\\steamuser\\AppData\\Roaming\\bakkesmod\\bakkesmod\\dll\\bakkesmod.dll";
auto promptless = L"C:\\users\\steamuser\\AppData\\Roaming\\bakkesmod\\bakkesmod\\dll\\bakkesmod_promptless.dll";
const wchar_t* launcher = official;
const wchar_t* launcher = L"C:\\users\\steamuser\\AppData\\Roaming\\bakkesmod\\bakkesmod\\dll\\bakkesmod.dll";
DllInjector dllInjector;
bool launching = false;
for (int i = 1; i < argc; i++) {
auto arg = std::wstring(argv[i]);
if (arg == L"launching") {
launching = true;
} else if (arg == L"promptless") {
launcher = promptless;
}
}
if (launching) {
@ -144,6 +140,8 @@ package() {
echo "$proton_paths" > "$srcdir/runner.sh"
# supposedly this might need to be ESYNC in some cases but this works by default
cat <<" EOF" >> "$srcdir/runner.sh"
dll=`[ "$PROMPTLESS" = 1 ] && echo "bakkesmod_promptless.dll" || echo "bakkesmod_official.dll"`
ln -sf "$bm_pfx/bakkesmod/dll/$dll" "$bm_pfx/bakkesmod/dll/bakkesmod.dll"
WINEFSYNC=1 WINEPREFIX="$compat/pfx/" "$proton/bin/wine64" "$@"
EOF
chmod a+x "$srcdir/runner.sh"
@ -152,7 +150,10 @@ package() {
unzip -quo "dll-$rlesc.zip" -d "$bm_pfx/bakkesmod"
# by default, starts with bakkesmod.dll and outputs bakkesmod_promptless.dll
echo -n "shunted winuser calls for DLL patch: "
python "$srcdir/dll_patch.py" "$bm_pfx/bakkesmod/dll"
dll_path="$bm_pfx/bakkesmod/dll"
python "$srcdir/dll_patch.py" "$dll_path"
mv "$dll_path/bakkesmod.dll" "$dll_path/bakkesmod_official.dll"
ln -sf "$dll_path/bakkesmod_official.dll" "$dll_path/bakkesmod.dll"
cp -f "$srcdir/inject.exe" "$bm_pfx"
cp -f "$srcdir/runner.sh" "$srcdir/dll_patch.py" "$bm_pfx"
@ -217,6 +218,7 @@ pre_remove() {
end=`echo "$end" | awk "\$0 > $start" | head -1`
remove_between "$start" "$end" "$conf" > "$conf"
fi
if [[ -z `cat "$conf" | tr -d "\n"` ]]; then rm "$conf"; fi
fi
rm -fr "$bm_pfx"
}

View file

@ -1,10 +1,17 @@
import os, shlex
import os, shlex, pathlib
flag = "BAKKES"
def update(user_settings):
dll = ("promptless",) if os.environ.get("PROMPTLESS", "0") == "1" else ()
promptless = os.environ.get("PROMPTLESS", "0") == "1"
dll = "bakkesmod_promptless.dll" if promptless else "bakkesmod_official.dll"
pfx = pathlib.Path(os.environ["STEAM_COMPAT_DATA_PATH"]) / \
pathlib.Path("pfx/drive_c/users/steamuser/AppData/Roaming/bakkesmod")
print(pfx)
return
dll_path = pfx / "bakkesmod" / "dll"
try:
os.remove(dll_path / "bakkesmod.dll")
finally:
os.symlink(dll_path / dll, dll_path / "bakkesmod.dll")
user_settings.update({"PROTON_REMOTE_DEBUG_CMD": shlex.join((
os.environ["STEAM_COMPAT_DATA_PATH"] +
"/pfx/drive_c/users/steamuser/AppData/Roaming/bakkesmod/inject.exe",
"launching") + dll)})
str(pfx / "inject.exe"), "launching"))})