diff --git a/.gitignore b/.gitignore index b8763f9..765d9a4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ Docs/_site/* Docs/api/* +# Local symlink/folder for automations +/Game + ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## @@ -354,8 +357,7 @@ ASALocalRun/ # Local History for Visual Studio .localhistory/ -# BeatPulse healthcheck temp database -healthchecksdb +/ # Backup folder for Package Reference Convert tool in Visual Studio 2017 MigrationBackup/ @@ -366,4 +368,3 @@ MigrationBackup/ # Fody - auto-generated XML schema FodyWeavers.xsd -/Resonite diff --git a/Directory.Build.props b/Directory.Build.props index 5271db1..0d36ae3 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,11 +12,8 @@ true - - $(MSBuildThisFileDirectory)Resonite - C:\Program Files (x86)\Steam\steamapps\common\Resonite - $(HOME)/.steam/steam/steamapps/common/Resonite - D:/Files/Games/Resonite/app + + $(MSBuildThisFileDirectory)Game diff --git a/MonkeyLoader/MonkeyLoader.csproj b/MonkeyLoader/MonkeyLoader.csproj index 79ea556..6d27e7d 100644 --- a/MonkeyLoader/MonkeyLoader.csproj +++ b/MonkeyLoader/MonkeyLoader.csproj @@ -27,7 +27,8 @@ - + @@ -46,31 +47,83 @@ - - + + - - + + + + + + + $(BaseOutputPath)zip-creation + + + + + + + + + + + - - - - + + True + + + False + + + True + + + True + + False all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + True + + + True + $(PkgZio)\lib\netstandard2.0\Zio.dll + True + + + + + + + + + diff --git a/MonkeyLoader/vendor/.doorstop_version b/MonkeyLoader/vendor/.doorstop_version new file mode 100644 index 0000000..99eba4d --- /dev/null +++ b/MonkeyLoader/vendor/.doorstop_version @@ -0,0 +1 @@ +4.1.0 \ No newline at end of file diff --git a/MonkeyLoader/vendor/doorstop_config.ini b/MonkeyLoader/vendor/doorstop_config.ini new file mode 100644 index 0000000..00212a3 --- /dev/null +++ b/MonkeyLoader/vendor/doorstop_config.ini @@ -0,0 +1,45 @@ +# General options for Unity Doorstop +[General] + +# Enable Doorstop? +enabled=true + +# Path to the assembly to load and execute +# NOTE: The entrypoint must be of format `static void Doorstop.Entrypoint.Start()` +target_assembly=MonkeyLoader/MonkeyLoader.dll + +# If true, Unity's output log is redirected to \output_log.txt +redirect_output_log=false + +# If enabled, DOORSTOP_DISABLE env var value is ignored +# USE THIS ONLY WHEN ASKED TO OR YOU KNOW WHAT THIS MEANS +ignore_disable_switch=false + + +# Options specific to running under Unity Mono runtime +[UnityMono] + +# Overrides default Mono DLL search path +# Sometimes it is needed to instruct Mono to seek its assemblies from a different path +# (e.g. mscorlib is stripped in original game) +# This option causes Mono to seek mscorlib and core libraries from a different folder before Managed +# Original Managed folder is added as a secondary folder in the search path +dll_search_path_override= + +# If true, Mono debugger server will be enabled +debug_enabled=false + +# When debug_enabled is true, specifies the address to use for the debugger server +debug_address=127.0.0.1:10000 + +# If true and debug_enabled is true, Mono debugger server will suspend the game execution until a debugger is attached +debug_suspend=false + +# Options sepcific to running under Il2Cpp runtime +[Il2Cpp] + +# Path to coreclr.dll that contains the CoreCLR runtime +coreclr_path= + +# Path to the directory containing the managed core libraries for CoreCLR (mscorlib, System, etc.) +corlib_dir= diff --git a/MonkeyLoader/vendor/libdoorstop.so b/MonkeyLoader/vendor/libdoorstop.so new file mode 100644 index 0000000..9f95b03 Binary files /dev/null and b/MonkeyLoader/vendor/libdoorstop.so differ diff --git a/MonkeyLoader/vendor/run_monkeyloader.sh b/MonkeyLoader/vendor/run_monkeyloader.sh new file mode 100644 index 0000000..9055ac1 --- /dev/null +++ b/MonkeyLoader/vendor/run_monkeyloader.sh @@ -0,0 +1,263 @@ +#!/bin/sh +# Doorstop start script +# +# Run the script to start the game with Doorstop enabled +# +# There are two ways to use this script +# +# 1. Via CLI: Run ./run.sh [doorstop arguments] [game arguments] +# 2. Via config: edit the options below and run ./run.sh without any arguments + +# 0 is false, 1 is true + +# LINUX: name of Unity executable +# MACOS: name of the .app directory +executable_name="Resonite.x86_64" + +# All of the below can be overriden with command line args + +# General Config Options + +# Enable Doorstop? +enabled="1" + +# Path to the assembly to load and execute +# NOTE: The entrypoint must be of format `static void Doorstop.Entrypoint.Start()` +target_assembly="MonkeyLoader/MonkeyLoader.dll" + +# If enabled, DOORSTOP_DISABLE env var value is ignored +# USE THIS ONLY WHEN ASKED TO OR YOU KNOW WHAT THIS MEANS +ignore_disable_switch="0" + +# Mono Options + +# Overrides default Mono DLL search path +# Sometimes it is needed to instruct Mono to seek its assemblies from a different path +# (e.g. mscorlib is stripped in original game) +# This option causes Mono to seek mscorlib and core libraries from a different folder before Managed +# Original Managed folder is added as a secondary folder in the search path +dll_search_path_override="" + +# If 1, Mono debugger server will be enabled +debug_enable="0" + +# When debug_enabled is 1, specifies the address to use for the debugger server +debug_address="127.0.0.1:10000" + +# If 1 and debug_enabled is 1, Mono debugger server will suspend the game execution until a debugger is attached +debug_suspend="0" + +# CoreCLR options (IL2CPP) + +# Path to coreclr shared library WITHOUT THE EXTENSION that contains the CoreCLR runtime +coreclr_path="" + +# Path to the directory containing the managed core libraries for CoreCLR (mscorlib, System, etc.) +corlib_dir="" + +################################################################################ +# Everything past this point is the actual script + +# Special case: program is launched via Steam +# In that case rerun the script via their bootstrapper to ensure Steam overlay works +if [ "$2" = "SteamLaunch" ]; then + steam="$1 $2 $3 $4 $0 $5" + shift 5 + $steam "$@" + exit +fi + +# Handle first param being executable name +if [ -x "$1" ] ; then + executable_name="$1" + echo "Target executable: $1" + shift +fi + +if [ -z "${executable_name}" ] || [ ! -x "${executable_name}" ]; then + echo "Please set executable_name to a valid name in a text editor or as the first command line parameter" + exit 1 +fi + +# Use POSIX-compatible way to get the directory of the executable +a="/$0"; a=${a%/*}; a=${a#/}; a=${a:-.}; BASEDIR=$(cd "$a" || exit; pwd -P) + +arch="" +executable_path="" +lib_extension="" + +# Set executable path and the extension to use for the libdoorstop shared object +os_type="$(uname -s)" +case ${os_type} in + Linux*) + executable_path="${executable_name}" + # Handle relative paths + if ! echo "$executable_path" | grep "^/.*$"; then + executable_path="${BASEDIR}/${executable_path}" + fi + lib_extension="so" + ;; + Darwin*) + real_executable_name="${executable_name}" + + # Handle relative directories + if ! echo "$real_executable_name" | grep "^/.*$"; then + real_executable_name="${BASEDIR}/${real_executable_name}" + fi + + # If we're not even an actual executable, check .app Info for actual executable + if ! echo "$real_executable_name" | grep "^.*\.app/Contents/MacOS/.*"; then + # Add .app to the end if not given + if ! echo "$real_executable_name" | grep "^.*\.app$"; then + real_executable_name="${real_executable_name}.app" + fi + inner_executable_name=$(defaults read "${real_executable_name}/Contents/Info" CFBundleExecutable) + executable_path="${real_executable_name}/Contents/MacOS/${inner_executable_name}" + else + executable_path="${executable_name}" + fi + lib_extension="dylib" + ;; + *) + # alright whos running games on freebsd + echo "Unknown operating system ($(uname -s))" + echo "Make an issue at https://github.com/NeighTools/UnityDoorstop" + exit 1 + ;; +esac + +abs_path() { + echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" +} + +_readlink() { + # relative links with readlink (without -f) do not preserve the path info + ab_path="$(abs_path "$1")" + link="$(readlink "${ab_path}")" + case $link in + /*);; + *) link="$(dirname "$ab_path")/$link";; + esac + echo "$link" +} + + +resolve_executable_path () { + e_path="$(abs_path "$1")" + + while [ -L "${e_path}" ]; do + e_path=$(_readlink "${e_path}"); + done + echo "${e_path}" +} + +# Get absolute path of executable and show to user +executable_path=$(resolve_executable_path "${executable_path}") +echo "${executable_path}" + +# Figure out the arch of the executable with file +file_out="$(LD_PRELOAD="" file -b "${executable_path}")" +case "${file_out}" in + *64-bit*) + arch="x64" + ;; + *32-bit*) + arch="x86" + ;; + *) + echo "The executable \"${executable_path}\" is not compiled for x86 or x64 (might be ARM?)" + echo "If you think this is a mistake (or would like to encourage support for other architectures)" + echo "Please make an issue at https://github.com/NeighTools/UnityDoorstop" + echo "Got: ${file_out}" + exit 1 + ;; +esac + +# Helper to convert common boolean strings into just 0 and 1 +doorstop_bool() { + case "$1" in + TRUE|true|t|T|1|Y|y|yes) + echo "1" + ;; + FALSE|false|f|F|0|N|n|no) + echo "0" + ;; + esac +} + +# Read from command line +while :; do + case "$1" in + --doorstop_enabled) + enabled="$(doorstop_bool "$2")" + shift + ;; + --doorstop_target_assembly) + target_assembly="$2" + shift + ;; + --doorstop-mono-dll-search-path-override) + dll_search_path_override="$2" + shift + ;; + --doorstop-mono-debug-enabled) + debug_enable="$(doorstop_bool "$2")" + shift + ;; + --doorstop-mono-debug-suspend) + debug_suspend="$(doorstop_bool "$2")" + shift + ;; + --doorstop-mono-debug-address) + debug_address="$2" + shift + ;; + --doorstop-clr-runtime-coreclr-path) + coreclr_path="$2" + shift + ;; + --doorstop-clr-corlib-dir) + corlib_dir="$2" + shift + ;; + *) + if [ -z "$1" ]; then + break + fi + rest_args="$rest_args $1" + ;; + esac + shift +done + +# Move variables to environment +export DOORSTOP_ENABLED="$enabled" +export DOORSTOP_TARGET_ASSEMBLY="$target_assembly" +export DOORSTOP_IGNORE_DISABLED_ENV="$ignore_disable_switch" +export DOORSTOP_MONO_DLL_SEARCH_PATH_OVERRIDE="$dll_search_path_override" +export DOORSTOP_MONO_DEBUG_ENABLED="$debug_enable" +export DOORSTOP_MONO_DEBUG_ADDRESS="$debug_address" +export DOORSTOP_MONO_DEBUG_SUSPEND="$debug_suspend" +export DOORSTOP_CLR_RUNTIME_CORECLR_PATH="$coreclr_path.$lib_extension" +export DOORSTOP_CLR_CORLIB_DIR="$corlib_dir" + +# Final setup +doorstop_directory="${BASEDIR}/" +doorstop_name="libdoorstop.${lib_extension}" + +export LD_LIBRARY_PATH="${doorstop_directory}:${corlib_dir}:${LD_LIBRARY_PATH}" +if [ -z "$LD_PRELOAD" ]; then + export LD_PRELOAD="${doorstop_name}" +else + export LD_PRELOAD="${doorstop_name}:${LD_PRELOAD}" +fi + +export DYLD_LIBRARY_PATH="${doorstop_directory}:${DYLD_LIBRARY_PATH}" +if [ -z "$DYLD_INSERT_LIBRARIES" ]; then + export DYLD_INSERT_LIBRARIES="${doorstop_name}" +else + export DYLD_INSERT_LIBRARIES="${doorstop_name}:${DYLD_INSERT_LIBRARIES}" +fi + +# shellcheck disable=SC2086 +exec "$executable_path" $rest_args diff --git a/MonkeyLoader/vendor/winhttp.dll b/MonkeyLoader/vendor/winhttp.dll new file mode 100644 index 0000000..f67865e Binary files /dev/null and b/MonkeyLoader/vendor/winhttp.dll differ