initial commit
This commit is contained in:
commit
d1bad7e2e4
135
.gitignore
vendored
Normal file
135
.gitignore
vendored
Normal file
@ -0,0 +1,135 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.sln.docstates
|
||||
|
||||
.vs/
|
||||
|
||||
# Build results
|
||||
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
x64/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.log
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.Publish.xml
|
||||
*.pubxml
|
||||
*.azurePubxml
|
||||
|
||||
# NuGet Packages Directory
|
||||
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
|
||||
packages/
|
||||
## TODO: If the tool you use requires repositories.config, also uncomment the next line
|
||||
!packages/repositories.config
|
||||
|
||||
# Windows Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Windows Store app package directory
|
||||
AppPackages/
|
||||
|
||||
# Others
|
||||
sql/
|
||||
*.Cache
|
||||
ClientBin/
|
||||
[Ss]tyle[Cc]op.*
|
||||
![Ss]tyle[Cc]op.targets
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.[Pp]ublish.xml
|
||||
|
||||
*.publishsettings
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file to a newer
|
||||
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
App_Data/*.mdf
|
||||
App_Data/*.ldf
|
||||
|
||||
# =========================
|
||||
# Windows detritus
|
||||
# =========================
|
||||
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
||||
# Folder config file
|
||||
Desktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Mac desktop service store files
|
||||
.DS_Store
|
||||
|
||||
_NCrunch*
|
646
Core.cs
Normal file
646
Core.cs
Normal file
@ -0,0 +1,646 @@
|
||||
using MelonLoader;
|
||||
using UnityEngine;
|
||||
using FMODUnity;
|
||||
using FMOD.Studio;
|
||||
using HarmonyLib;
|
||||
using Rhythm;
|
||||
using static Rhythm.BeatmapIndex;
|
||||
using Arcade.UI;
|
||||
using System.Runtime.InteropServices;
|
||||
using FMOD;
|
||||
using static UnbeatableSongHack.TreeExplorer;
|
||||
using Arcade.UI.SongSelect;
|
||||
using static Arcade.UI.SongSelect.ArcadeSongDatabase;
|
||||
using UnityEngine.UIElements;
|
||||
using System.Xml.Linq;
|
||||
|
||||
[assembly: MelonInfo(typeof(UnbeatableSongHack.Core), "SUnbeatable-Loader", "1.0.0", "Serena Sunskimmer82", null)]
|
||||
[assembly: MelonGame("D-CELL GAMES", "UNBEATABLE [DEMO]")]
|
||||
|
||||
namespace UnbeatableSongHack
|
||||
{
|
||||
public class Core : MelonMod
|
||||
{
|
||||
|
||||
|
||||
public override void OnInitializeMelon()
|
||||
{
|
||||
LoggerInstance.Msg("Initialized Song Hack!");
|
||||
}
|
||||
|
||||
public override void OnLateUpdate()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.N))
|
||||
{
|
||||
// Stop all events
|
||||
RuntimeManager.GetBus("bus:/").stopAllEvents(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
|
||||
}
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.M))
|
||||
{
|
||||
//FetchAllEvents();
|
||||
}
|
||||
}
|
||||
|
||||
public List<FMOD.Studio.EventDescription> eventDescriptions = new List<EventDescription>();
|
||||
public List<string> strings = new List<string>();
|
||||
|
||||
// Get the events from the bank
|
||||
// These can be used to play single audios in game through the tree menu
|
||||
FMOD.Studio.EventDescription[] GetBankEvents(Bank bank)
|
||||
{
|
||||
LoggerInstance.Msg("\n> Getting Bank Events");
|
||||
bank.getEventList(out FMOD.Studio.EventDescription[] eventDescs);
|
||||
foreach (FMOD.Studio.EventDescription eventDesc in eventDescs)
|
||||
{
|
||||
eventDesc.getPath(out string eventPath);
|
||||
LoggerInstance.Msg(eventPath);
|
||||
|
||||
eventDescriptions.Add(eventDesc);
|
||||
}
|
||||
return eventDescs;
|
||||
}
|
||||
|
||||
// Read all string events from the bank
|
||||
void GetBankStrings(Bank bank)
|
||||
{
|
||||
LoggerInstance.Msg("\n> Getting Bank Strings");
|
||||
bank.getStringCount(out int stringCount);
|
||||
LoggerInstance.Msg("String Count: " + stringCount);
|
||||
|
||||
for (int i = 0; i < stringCount; i++)
|
||||
{
|
||||
bank.getStringInfo(i, out FMOD.GUID Id, out string stringPath);
|
||||
LoggerInstance.Msg("String ID: " + Id);
|
||||
LoggerInstance.Msg("String Path: " + stringPath);
|
||||
LoggerInstance.Msg("---");
|
||||
|
||||
// Strings zur Liste hinzufügen
|
||||
if (!string.IsNullOrEmpty(stringPath))
|
||||
{
|
||||
strings.Add(stringPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Build the event tree from the event descriptions and strings
|
||||
void FetchAllEvents()
|
||||
{
|
||||
// Listen leeren
|
||||
eventDescriptions.Clear();
|
||||
strings.Clear();
|
||||
rootNode = new TreeNode("Root");
|
||||
|
||||
RuntimeManager.StudioSystem.getBankList(out Bank[] banks);
|
||||
|
||||
foreach (Bank bank in banks)
|
||||
{
|
||||
// Get the name of the bank
|
||||
bank.getPath(out string bankPath);
|
||||
// Log the name of the bank
|
||||
LoggerInstance.Msg("--- Bank Path: " + bankPath);
|
||||
|
||||
// It's Master.strings! Read the strings from it!
|
||||
if (bankPath.EndsWith("strings"))
|
||||
{
|
||||
GetBankStrings(bank);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
GetBankEvents(bank);
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
LoggerInstance.Msg("Error fetching events: " + e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
BuildEventTree(out rootNode, eventDescriptions, strings);
|
||||
}
|
||||
|
||||
|
||||
// "Progessions" are some kind of class
|
||||
public class CustomProgression: IProgression
|
||||
{
|
||||
public string stageScene = "TrainStationRhythm";
|
||||
public string filePath = "./none.txt";
|
||||
public string audioKey = "EMPTY DIARY";
|
||||
|
||||
public CustomProgression(string textFile)
|
||||
{
|
||||
this.filePath = textFile;
|
||||
|
||||
// Look for an audio.mp3 in the same directory as the beatmap
|
||||
// Might as well use the audioFilename property from the beatmap itself later
|
||||
string directory = Path.GetDirectoryName(filePath);
|
||||
|
||||
var audioPath = Path.Combine(directory, "audio.mp3");
|
||||
|
||||
// If an audio is found, set it to the audio path
|
||||
var audioTitle = "EMPTY DIARY";
|
||||
if (File.Exists(audioPath))
|
||||
{
|
||||
audioTitle = audioPath;
|
||||
}
|
||||
|
||||
this.audioKey = audioTitle;
|
||||
this.stageScene = "TrainStationRhythm";
|
||||
}
|
||||
|
||||
public string GetBeatmapPath()
|
||||
{
|
||||
// Placeholder
|
||||
return "__CUSTOM/CUSTOMDIFF";
|
||||
}
|
||||
public string GetSongName()
|
||||
{
|
||||
return audioKey;
|
||||
}
|
||||
|
||||
public string GetDifficulty()
|
||||
{
|
||||
// Placeholder
|
||||
return "CUSTOMDIFF";
|
||||
}
|
||||
|
||||
public void Finish(string sceneIndex)
|
||||
{
|
||||
LevelManager.LoadLevel("ScoreScreenArcadeMode");
|
||||
}
|
||||
|
||||
public void Retry()
|
||||
{
|
||||
LevelManager.LoadLevel(stageScene);
|
||||
}
|
||||
|
||||
public void Back()
|
||||
{
|
||||
LevelManager.LoadLevel(JeffBezosController.arcadeMenuScene);
|
||||
}
|
||||
}
|
||||
|
||||
void LoadBeatmapFromFile(string filePath="")
|
||||
{
|
||||
|
||||
if (filePath.Length==0) return;
|
||||
|
||||
|
||||
CustomProgression customProgression = new CustomProgression(filePath);
|
||||
|
||||
JeffBezosController.rhythmProgression = customProgression;
|
||||
|
||||
LevelManager.LoadLevel(customProgression.stageScene);
|
||||
|
||||
}
|
||||
|
||||
// Detect if the beatmap is a custom one
|
||||
// Since ParseBeatmap attempts to load a TextAsset (which we cant create)
|
||||
// we have to patch the function and make it load from text contents instead.
|
||||
[HarmonyPatch(typeof(BeatmapParser), "ParseBeatmap", new Type[] {})]
|
||||
public class BeatmapParserPatch
|
||||
{
|
||||
public static bool Prefix(ref BeatmapParser __instance)
|
||||
{
|
||||
if (JeffBezosController.rhythmProgression.GetBeatmapPath().StartsWith("__CUSTOM"))
|
||||
{
|
||||
var progression = JeffBezosController.rhythmProgression as CustomProgression;
|
||||
|
||||
__instance.beatmapIndex = BeatmapIndex.defaultIndex;
|
||||
|
||||
var contents = File.ReadAllText(progression.filePath);
|
||||
|
||||
BeatmapParserEngine beatmapParserEngine = new BeatmapParserEngine();
|
||||
var beatmap = ScriptableObject.CreateInstance<Beatmap>();
|
||||
beatmapParserEngine.ReadBeatmap(contents, ref beatmap);
|
||||
|
||||
__instance.beatmap = beatmap;
|
||||
__instance.audioKey = progression.GetSongName();
|
||||
__instance.beatmapPath = progression.GetBeatmapPath();
|
||||
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Patch to load beatmaps from file
|
||||
// Since the game really wants to load from its own audio table,
|
||||
// we need to patch this to load from a file instead
|
||||
// That way we can make the game load any sound file (and in this case,
|
||||
// the one from our custom level)
|
||||
[HarmonyPatch(typeof(RhythmTracker), "PreloadFromTable")]
|
||||
public class RhythmTrackerLoadPatch
|
||||
{
|
||||
public static bool Prefix(string key, ref RhythmTracker __instance)
|
||||
{
|
||||
if (key.Contains("."))
|
||||
{
|
||||
if (File.Exists(key))
|
||||
{
|
||||
__instance.PreloadFromFile(key);
|
||||
return false;
|
||||
} else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PlayFromKey(string name)
|
||||
{
|
||||
var arcadeBGMManger = ArcadeBGMManager.Instance;
|
||||
var songList = ArcadeSongDatabase.Instance;
|
||||
var beatmapIndex = BeatmapIndex.defaultIndex;
|
||||
|
||||
|
||||
if (arcadeBGMManger != null && songList != null)
|
||||
{
|
||||
|
||||
|
||||
LoggerInstance.Msg("Adding key: " + name);
|
||||
|
||||
var beatmapItem = new BeatmapItem();
|
||||
|
||||
beatmapItem.Path = "__CUSTOM" + name + "/Beginner";
|
||||
var key = beatmapItem.Path;
|
||||
|
||||
|
||||
|
||||
beatmapItem.Song = new Song(name);
|
||||
beatmapItem.Song.stageScene = "TrainStationRhythm";
|
||||
|
||||
beatmapItem.Unlocked = true;
|
||||
|
||||
|
||||
|
||||
beatmapItem.BeatmapInfo = new BeatmapInfo(null, "Beginner");
|
||||
|
||||
|
||||
beatmapItem.Highscore = new HighScoreItem(key, 0, 0f, 0, cleared: false, new Dictionary<string, int>(), Modifiers.None);
|
||||
|
||||
LoggerInstance.Msg("Adding song to list: " + beatmapItem.Path);
|
||||
|
||||
// This whole part would be needed for AddSongList()
|
||||
beatmapItem.Beatmap = new Beatmap();
|
||||
beatmapItem.Beatmap.metadata.title = "Custom " + name;
|
||||
beatmapItem.Beatmap.metadata.titleUnicode = "Custom " + name;
|
||||
beatmapItem.Beatmap.metadata.artist = "Not You";
|
||||
beatmapItem.Beatmap.metadata.artistUnicode = "Not You";
|
||||
beatmapItem.Beatmap.metadata.tagData.Level = 10;
|
||||
|
||||
|
||||
// This was a test and is not needed
|
||||
//AddSongToArcadeList(songList,beatmapItem);
|
||||
|
||||
LoggerInstance.Msg("Added Key: " + key);
|
||||
|
||||
|
||||
arcadeBGMManger.PlaySongPreview(beatmapItem);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static string lastEventPath = "";
|
||||
|
||||
public TreeNode rootNode = new TreeNode("Root");
|
||||
public Dictionary<string, bool> expandedStates = new Dictionary<string, bool>();
|
||||
|
||||
public Rect windowRect = new Rect(20, 20, 400, 600);
|
||||
public Vector2 scrollPosition = new Vector2(0, 0);
|
||||
|
||||
public string textInput = "";
|
||||
|
||||
public override void OnGUI()
|
||||
{
|
||||
windowRect = GUI.Window(0, windowRect, DoWindow, "Song Hack");
|
||||
|
||||
if (windowRect.width == 0)
|
||||
{
|
||||
if (GUI.Button(new Rect(10, 10, 32, 32), "O"))
|
||||
{
|
||||
windowRect = new Rect(20, 20, 400, 600);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Draw MOD UI
|
||||
void DoWindow(int windowId)
|
||||
{
|
||||
GUIStyle compactButtonStyle = new GUIStyle(GUI.skin.button);
|
||||
compactButtonStyle.alignment = TextAnchor.MiddleLeft;
|
||||
compactButtonStyle.fontSize = 14;
|
||||
|
||||
GUIStyle compactEnabledButtonStyle = new GUIStyle(compactButtonStyle);
|
||||
compactEnabledButtonStyle.normal.textColor = Color.green;
|
||||
|
||||
GUIStyle folderStyle = new GUIStyle(GUI.skin.button);
|
||||
folderStyle.alignment = TextAnchor.MiddleLeft;
|
||||
folderStyle.fontSize = 14;
|
||||
folderStyle.normal.textColor = Color.yellow;
|
||||
|
||||
GUIStyle leafStyle = new GUIStyle(GUI.skin.button);
|
||||
leafStyle.alignment = TextAnchor.MiddleLeft;
|
||||
leafStyle.fontSize = 14;
|
||||
leafStyle.normal.textColor = Color.white;
|
||||
|
||||
GUIStyle stringStyle = new GUIStyle(GUI.skin.button);
|
||||
stringStyle.alignment = TextAnchor.MiddleLeft;
|
||||
stringStyle.fontSize = 14;
|
||||
stringStyle.normal.textColor = Color.cyan;
|
||||
|
||||
GUIStyle playableStringStyle = new GUIStyle(GUI.skin.button);
|
||||
playableStringStyle.alignment = TextAnchor.MiddleLeft;
|
||||
playableStringStyle.fontSize = 14;
|
||||
playableStringStyle.normal.textColor = Color.green;
|
||||
|
||||
GUI.DragWindow(new Rect(0, 0, 10000, 20));
|
||||
|
||||
// Create button to stop all events
|
||||
if (GUI.Button(new Rect(10, 25, 110, 30), "Stop All Events"))
|
||||
{
|
||||
RuntimeManager.GetBus("bus:/").stopAllEvents(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
|
||||
|
||||
}
|
||||
|
||||
// Create button to get all events
|
||||
if (GUI.Button(new Rect(120, 25, 110, 30), "Get All Events"))
|
||||
{
|
||||
FetchAllEvents();
|
||||
LoggerInstance.Msg($"Fetched {eventDescriptions.Count} events and {strings.Count} strings.");
|
||||
}
|
||||
|
||||
// Play an event from the text input
|
||||
if (GUI.Button(new Rect(230, 25, 110, 30), "Sound from Text"))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(textInput))
|
||||
{
|
||||
RuntimeManager.PlayOneShot(textInput);
|
||||
lastEventPath = textInput;
|
||||
LoggerInstance.Msg("Playing: " + textInput);
|
||||
}
|
||||
}
|
||||
|
||||
if (GUI.Button(new Rect(230, 55, 110, 25), "Sound from Key"))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(textInput))
|
||||
{
|
||||
PlayFromKey(textInput);
|
||||
lastEventPath = "Key: " + textInput;
|
||||
LoggerInstance.Msg("Playing Key: " + textInput);
|
||||
}
|
||||
}
|
||||
|
||||
if (GUI.Button(new Rect(130, 55, 100, 25), "Play File Level"))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(textInput))
|
||||
{
|
||||
LoadBeatmapFromFile(textInput);
|
||||
} else
|
||||
{
|
||||
LoadBeatmapFromFile();
|
||||
}
|
||||
}
|
||||
|
||||
if (GUI.Button(new Rect(10,120,100,25), "Add Empty Songs To Arcade"))
|
||||
{
|
||||
var db = Arcade.UI.SongSelect.ArcadeSongDatabase.Instance;
|
||||
|
||||
string customSongDir = $"{Application.dataPath.Substring(0, Application.dataPath.LastIndexOf('/'))}/SUnbeatable-Loader/Songs/";
|
||||
if (!Directory.Exists(customSongDir)) Directory.CreateDirectory(customSongDir);
|
||||
LoggerInstance.Msg($"SUnbeatable-Loader Song Directory: {customSongDir}");
|
||||
|
||||
string[] dirs = Directory.GetDirectories(customSongDir);
|
||||
foreach (var dir in dirs)
|
||||
{
|
||||
string songDir = Path.GetFileNameWithoutExtension(dir);
|
||||
LoggerInstance.Msg($"{songDir}");
|
||||
|
||||
|
||||
//new demo maps are by default stored as .dat files
|
||||
string[] songFiles = Directory.GetFiles(customSongDir + songDir, "*.dat");
|
||||
foreach (var songFile in songFiles)
|
||||
{
|
||||
string beatmapName = Path.GetFileNameWithoutExtension(songFile);
|
||||
string beatmapContent = File.ReadAllText(songFile);
|
||||
string difficulty = beatmapContent.Substring(beatmapContent.IndexOf("Version:")+8 /* adding 8, the length of the string "Version:" */ , beatmapContent.IndexOf(" ", beatmapContent.IndexOf("Version:"))-(beatmapContent.IndexOf("Version:")+8));
|
||||
LoggerInstance.Msg($"{beatmapName} has difficulty {difficulty}");
|
||||
|
||||
BeatmapItem item = new BeatmapItem();
|
||||
item.Path = "__CUSTOM" + songFile+"/"+difficulty.ToUpper();
|
||||
item.Song = new Song(beatmapName);
|
||||
TextAsset asset = new TextAsset(beatmapContent);
|
||||
asset.name = beatmapName;
|
||||
item.BeatmapInfo = new BeatmapInfo(asset,difficulty);
|
||||
item.Beatmap = new Beatmap();
|
||||
item.Beatmap.name = beatmapName;
|
||||
item.Beatmap.metadata.title = beatmapName;
|
||||
item.Beatmap.metadata.titleUnicode = beatmapName;
|
||||
item.Beatmap.metadata.artist = "ARTIST";
|
||||
item.Beatmap.metadata.artistUnicode = "ARTIST";
|
||||
item.Beatmap.metadata.tagData.Level = 10;
|
||||
item.Beatmap.metadata.tagData.SongLength = 100;
|
||||
AddSongToArcadeList(db, item);
|
||||
LoggerInstance.Msg("adding beatmap " + beatmapName + " at " + songDir);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (GUI.Button(new Rect(110, 120, 100, 25), "Add To Arcade"))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(textInput))
|
||||
{
|
||||
CustomProgression progression = new CustomProgression(textInput);
|
||||
|
||||
var beatmapItem = new BeatmapItem();
|
||||
|
||||
beatmapItem.Path = "__CUSTOM" + progression.GetSongName() + "/Beginner";
|
||||
var key = beatmapItem.Path;
|
||||
|
||||
|
||||
|
||||
beatmapItem.Song = /*new Song(progression.GetSongName().Substring(progression.GetSongName().LastIndexOf("/")+1,progression.GetSongName().LastIndexOf(".")))*/null;
|
||||
beatmapItem.Song.stageScene = "TrainStationRhythm";
|
||||
|
||||
beatmapItem.Unlocked = true;
|
||||
|
||||
|
||||
|
||||
beatmapItem.BeatmapInfo = new BeatmapInfo(null, "Beginner");
|
||||
|
||||
|
||||
beatmapItem.Highscore = new HighScoreItem(key, 0, 0f, 0, cleared: false, new Dictionary<string, int>(), Modifiers.None);
|
||||
|
||||
LoggerInstance.Msg("Adding song to list: " + beatmapItem.Path);
|
||||
|
||||
beatmapItem.Beatmap = new Beatmap();
|
||||
|
||||
beatmapItem.Beatmap.metadata.title = "Custom " + progression.GetSongName();
|
||||
beatmapItem.Beatmap.metadata.titleUnicode = "Custom " + progression.GetSongName();
|
||||
beatmapItem.Beatmap.metadata.artist = "Not You";
|
||||
beatmapItem.Beatmap.metadata.artistUnicode = "Not You";
|
||||
beatmapItem.Beatmap.metadata.tagData.Level = 10;
|
||||
|
||||
|
||||
var db = Arcade.UI.SongSelect.ArcadeSongDatabase.Instance;
|
||||
AddSongToArcadeList(db, beatmapItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (GUI.Button(new Rect(340, 25, 50, 30), "X"))
|
||||
{
|
||||
windowRect = new Rect(-100, -100, 0, 0);
|
||||
}
|
||||
|
||||
textInput = GUI.TextField(new Rect(10, 80, 360, 25), textInput);
|
||||
|
||||
|
||||
|
||||
int totalHeight = CalculateTreeHeight(rootNode);
|
||||
|
||||
scrollPosition = GUI.BeginScrollView(
|
||||
new Rect(0, 180, 400, 440),
|
||||
scrollPosition,
|
||||
new Rect(0, 0, 380, totalHeight)
|
||||
);
|
||||
|
||||
int yPos = 0;
|
||||
DrawTreeNode(rootNode, 0, ref yPos, folderStyle, leafStyle, stringStyle, playableStringStyle);
|
||||
|
||||
GUI.EndScrollView();
|
||||
}
|
||||
|
||||
// Let other classes access the logger
|
||||
public static MelonLogger.Instance GetLogger()
|
||||
{
|
||||
MelonBase core = Core.FindMelon("SUnbeatable-Loader", "Serena Sunskimmer82");
|
||||
return core.LoggerInstance;
|
||||
}
|
||||
|
||||
// Patch the song function to return all (also hidden) songs,
|
||||
// so we can access hidden beatmaps
|
||||
[HarmonyPatch(typeof(BeatmapIndex), "GetVisibleSongs")]
|
||||
public class BeatmapIndexPatch
|
||||
{
|
||||
public static bool Prefix(ref BeatmapIndex __instance, ref List<Song> __result)
|
||||
{
|
||||
__result = __instance.GetAllSongs();
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[HarmonyPatch(typeof(RhythmTracker), "HandleCreateProgrammerSound", new Type[] { typeof(EventInstance), typeof(IntPtr) })]
|
||||
public static class RhythmTrackerPatch
|
||||
{
|
||||
|
||||
public static bool Prefix(EventInstance instance, IntPtr parameterPtr)
|
||||
{
|
||||
var LoggerInstance = Core.GetLogger();
|
||||
|
||||
//LoggerInstance.Msg("HandleCreateProgrammerSound called");
|
||||
|
||||
instance.getUserData(out var h_userdata);
|
||||
PlayInfo h_playInfo = GCHandle.FromIntPtr(h_userdata).Target as PlayInfo;
|
||||
|
||||
if (h_playInfo.source == PlaySource.FromTable)
|
||||
{
|
||||
string key = Marshal.PtrToStringUni(h_playInfo.key);
|
||||
|
||||
// Log the key of the sound being played
|
||||
// Useful since we can't find the sound name otherwise
|
||||
// Was used to match the names to the unnamed soundtrack files
|
||||
LoggerInstance.Msg("Now playing: " + key);
|
||||
|
||||
//SOUND_INFO h_info;
|
||||
//RESULT h_soundInfo = RuntimeManager.StudioSystem.getSoundInfo(key, out h_info);
|
||||
|
||||
//LoggerInstance.Msg("SoundInfo: " + (h_info.name));
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//instance.getVolume(out float volume);
|
||||
//LoggerInstance.Msg("Volume: " + volume.ToString());
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Doesn't really work, but it sometimes logs when something is played
|
||||
[HarmonyPatch(typeof(FMODUnity.RuntimeManager), "PlayOneShot", new Type[] { typeof(string), typeof(Vector3) })]
|
||||
public class RuntimeManagerPatch
|
||||
{
|
||||
public static bool Prefix(string path)
|
||||
{
|
||||
var LoggerInstance = Core.GetLogger();
|
||||
|
||||
LoggerInstance.Msg("[Patch] Playing: " + path);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Function to add arbitrary beatmap songs into the arcade list
|
||||
// Might be useful for some custom beatmaps, although some info is fetched from
|
||||
// TextAssets that we cannot create/access through mods.
|
||||
// It may be a mess.
|
||||
public static void AddSongToArcadeList(ArcadeSongDatabase instance, ArcadeSongDatabase.BeatmapItem item)
|
||||
{
|
||||
var LoggerInstance = Core.GetLogger();
|
||||
|
||||
string key = item.Path;
|
||||
|
||||
item.Unlocked = true;
|
||||
|
||||
Traverse traverse = Traverse.Create(instance);
|
||||
Dictionary<string, BeatmapItem> songList = traverse.Field("_songDatabase").GetValue<Dictionary<string, BeatmapItem>>();
|
||||
|
||||
|
||||
LoggerInstance.Msg("trying to add " + key);
|
||||
var success = songList.TryAdd(key, item);
|
||||
LoggerInstance.Msg(success);
|
||||
traverse.Field("_songDatabase").SetValue(songList);
|
||||
|
||||
instance.RefreshSongList();
|
||||
|
||||
LoggerInstance.Msg("Adding song to list: " + item.Path);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
105
FMODInstances.cs
Normal file
105
FMODInstances.cs
Normal file
@ -0,0 +1,105 @@
|
||||
using AOT;
|
||||
using FMOD.Studio;
|
||||
using FMOD;
|
||||
using FMODUnity;
|
||||
using Rhythm;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using UnityMainThreadDispatcher;
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnbeatableSongHack
|
||||
{
|
||||
// This is unused, it's only a reference now.
|
||||
internal class FMODInstances
|
||||
{
|
||||
[MonoPInvokeCallback(typeof(EVENT_CALLBACK))]
|
||||
public static RESULT MusicEventCallback(EVENT_CALLBACK_TYPE type, IntPtr @event, IntPtr parameterPtr)
|
||||
{
|
||||
return type switch
|
||||
{
|
||||
EVENT_CALLBACK_TYPE.CREATE_PROGRAMMER_SOUND => HandleCreateProgrammerSound(new EventInstance(@event), parameterPtr),
|
||||
EVENT_CALLBACK_TYPE.DESTROY_PROGRAMMER_SOUND => HandleDestroyProgrammerSound(parameterPtr),
|
||||
EVENT_CALLBACK_TYPE.DESTROYED => HandleDestroyed(new EventInstance(@event)),
|
||||
_ => RESULT.OK,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public static RESULT HandleCreateProgrammerSound(EventInstance instance, IntPtr parameterPtr)
|
||||
{
|
||||
instance.getUserData(out var userdata);
|
||||
PlayInfo playInfo = GCHandle.FromIntPtr(userdata).Target as PlayInfo;
|
||||
MODE mODE = MODE.LOOP_NORMAL | MODE.CREATECOMPRESSEDSAMPLE | MODE.NONBLOCKING;
|
||||
PROGRAMMER_SOUND_PROPERTIES properties = GetProgrammerSoundProperties(parameterPtr);
|
||||
|
||||
switch (playInfo.source)
|
||||
{
|
||||
case PlaySource.FromTable:
|
||||
{
|
||||
string key = Marshal.PtrToStringUni(playInfo.key);
|
||||
|
||||
SOUND_INFO info;
|
||||
RESULT soundInfo = RuntimeManager.StudioSystem.getSoundInfo(key, out info);
|
||||
if (soundInfo != 0)
|
||||
{
|
||||
return soundInfo;
|
||||
}
|
||||
Sound sound2;
|
||||
RESULT rESULT2 = RuntimeManager.CoreSystem.createSound(info.name_or_data, mODE | info.mode, ref info.exinfo, out sound2);
|
||||
if (rESULT2 == RESULT.OK)
|
||||
{
|
||||
properties.sound = sound2.handle;
|
||||
properties.subsoundIndex = info.subsoundindex;
|
||||
Marshal.StructureToPtr(properties, parameterPtr, fDeleteOld: false);
|
||||
Core.GetLogger().Msg("OK Sound");
|
||||
break;
|
||||
}
|
||||
return rESULT2;
|
||||
}
|
||||
case PlaySource.FromFile:
|
||||
{
|
||||
string name = Marshal.PtrToStringUni(playInfo.key);
|
||||
Sound sound;
|
||||
RESULT rESULT = RuntimeManager.CoreSystem.createSound(name, mODE, out sound);
|
||||
if (rESULT == RESULT.OK)
|
||||
{
|
||||
properties.sound = sound.handle;
|
||||
properties.subsoundIndex = -1;
|
||||
Marshal.StructureToPtr(properties, parameterPtr, fDeleteOld: false);
|
||||
break;
|
||||
}
|
||||
return rESULT;
|
||||
}
|
||||
}
|
||||
|
||||
return RESULT.OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static RESULT HandleDestroyProgrammerSound(IntPtr parameterPtr)
|
||||
{
|
||||
new Sound(GetProgrammerSoundProperties(parameterPtr).sound).release();
|
||||
return RESULT.OK;
|
||||
}
|
||||
|
||||
public static RESULT HandleDestroyed(EventInstance instance)
|
||||
{
|
||||
instance.getUserData(out var userdata);
|
||||
Marshal.FreeHGlobal((GCHandle.FromIntPtr(userdata).Target as PlayInfo).key);
|
||||
GCHandle.FromIntPtr(userdata).Free();
|
||||
return RESULT.OK;
|
||||
}
|
||||
|
||||
public static PROGRAMMER_SOUND_PROPERTIES GetProgrammerSoundProperties(IntPtr ptr)
|
||||
{
|
||||
return Marshal.PtrToStructure<PROGRAMMER_SOUND_PROPERTIES>(ptr);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
9
README.md
Normal file
9
README.md
Normal file
@ -0,0 +1,9 @@
|
||||
# The "Unbeatable Song Hack"
|
||||
|
||||
Most likely the first mod menu for the Unbeatable DEMO.
|
||||
|
||||
To use, download MelonLoader ( https://melonwiki.xyz/ ) and put a .dll of this mod into the Mods folder. A GUI should pop up.
|
||||
|
||||
### Developing this
|
||||
|
||||
If you want to work on this, you should most likely replace all the `<HintPaths>` in `UnbeatableSongHack.csproj` with your paths to the game, as well as the `<Target><Exec>` at the bottom of that file.
|
225
TreeExplorer.cs
Normal file
225
TreeExplorer.cs
Normal file
@ -0,0 +1,225 @@
|
||||
using FMOD.Studio;
|
||||
using FMODUnity;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using static UnbeatableSongHack.Core;
|
||||
|
||||
namespace UnbeatableSongHack
|
||||
{
|
||||
public class TreeExplorer
|
||||
{
|
||||
|
||||
// This handles drawing the explorer that appears when clicking "Get All Events."
|
||||
// It creates a tree structure of all events and strings in the game.
|
||||
// It also handles the selection of events and strings, and plays them when selected.
|
||||
|
||||
|
||||
public class TreeNode
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string FullPath { get; set; }
|
||||
public bool IsLeaf { get; set; }
|
||||
public bool IsExpanded { get; set; }
|
||||
public Dictionary<string, TreeNode> Children { get; set; }
|
||||
public bool IsString { get; set; }
|
||||
public bool IsPlayable { get; set; }
|
||||
|
||||
public TreeNode(string name, string fullPath = "", bool isLeaf = false, bool isString = false, bool isPlayable = false)
|
||||
{
|
||||
Name = name;
|
||||
FullPath = fullPath;
|
||||
IsLeaf = isLeaf;
|
||||
IsExpanded = false;
|
||||
Children = new Dictionary<string, TreeNode>();
|
||||
IsString = isString;
|
||||
IsPlayable = isPlayable;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void AddPathToTree(string path, bool isString, bool isPlayable, TreeNode root)
|
||||
{
|
||||
string[] parts;
|
||||
string prefix = "";
|
||||
|
||||
if (path.StartsWith("event:/"))
|
||||
{
|
||||
prefix = "event:/";
|
||||
parts = path.Substring(7).Split('/');
|
||||
}
|
||||
else if (path.StartsWith("snapshot:/"))
|
||||
{
|
||||
prefix = "snapshot:/";
|
||||
parts = path.Substring(10).Split('/');
|
||||
}
|
||||
else
|
||||
{
|
||||
parts = path.Split('/');
|
||||
if (parts.Length > 0 && parts[0].Contains(":"))
|
||||
{
|
||||
prefix = parts[0] + "/";
|
||||
parts = parts.Skip(1).ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
string currentPath = prefix;
|
||||
TreeNode currentNode = root;
|
||||
|
||||
if (!string.IsNullOrEmpty(prefix))
|
||||
{
|
||||
if (!currentNode.Children.ContainsKey(prefix))
|
||||
{
|
||||
currentNode.Children[prefix] = new TreeNode(prefix);
|
||||
}
|
||||
currentNode = currentNode.Children[prefix];
|
||||
}
|
||||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
if (string.IsNullOrEmpty(parts[i])) continue;
|
||||
|
||||
currentPath += (i > 0 ? "/" : "") + parts[i];
|
||||
|
||||
bool isLeaf = (i == parts.Length - 1);
|
||||
|
||||
if (!currentNode.Children.ContainsKey(parts[i]))
|
||||
{
|
||||
currentNode.Children[parts[i]] = new TreeNode(parts[i], currentPath, isLeaf, isString && isLeaf, isPlayable && isLeaf);
|
||||
}
|
||||
else if (isLeaf)
|
||||
{
|
||||
currentNode.Children[parts[i]].IsLeaf = true;
|
||||
currentNode.Children[parts[i]].FullPath = currentPath;
|
||||
if (isString)
|
||||
{
|
||||
currentNode.Children[parts[i]].IsString = true;
|
||||
if (isPlayable)
|
||||
{
|
||||
currentNode.Children[parts[i]].IsPlayable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
currentNode = currentNode.Children[parts[i]];
|
||||
}
|
||||
}
|
||||
|
||||
public static void BuildEventTree(out TreeNode rootNode, List<EventDescription> eventDescriptions, List<string> strings)
|
||||
{
|
||||
rootNode = new TreeNode("Root");
|
||||
|
||||
foreach (var eventDesc in eventDescriptions)
|
||||
{
|
||||
eventDesc.getPath(out string eventPath);
|
||||
|
||||
AddPathToTree(eventPath, false, false, rootNode);
|
||||
}
|
||||
|
||||
foreach (var stringPath in strings)
|
||||
{
|
||||
bool isPlayable = stringPath.StartsWith("event:/");
|
||||
|
||||
AddPathToTree(stringPath, true, isPlayable, rootNode);
|
||||
}
|
||||
}
|
||||
|
||||
public static int CalculateTreeHeight(TreeNode node, int depth = 0)
|
||||
{
|
||||
int height = 0;
|
||||
|
||||
if (depth > 0 || node.Name != "Root")
|
||||
{
|
||||
height += 25;
|
||||
}
|
||||
|
||||
if (node.IsExpanded || node.Name == "Root")
|
||||
{
|
||||
foreach (var child in node.Children.Values)
|
||||
{
|
||||
height += CalculateTreeHeight(child, depth + 1);
|
||||
}
|
||||
}
|
||||
|
||||
return height;
|
||||
}
|
||||
|
||||
public static void DrawTreeNode(TreeNode node, int depth, ref int yPos, GUIStyle folderStyle, GUIStyle leafStyle,
|
||||
GUIStyle stringStyle, GUIStyle playableStringStyle)
|
||||
{
|
||||
var LoggerInstance = GetLogger();
|
||||
|
||||
int indentation = depth * 20;
|
||||
int buttonWidth = 360 - indentation;
|
||||
|
||||
if (node.Name != "Root")
|
||||
{
|
||||
string displayName = node.Name;
|
||||
string prefix = node.IsLeaf ? " " : (node.IsExpanded ? "▼ " : "► ");
|
||||
|
||||
GUIStyle styleToUse;
|
||||
if (!node.IsLeaf)
|
||||
{
|
||||
styleToUse = folderStyle;
|
||||
}
|
||||
else if (node.IsString)
|
||||
{
|
||||
if (node.IsPlayable)
|
||||
{
|
||||
styleToUse = playableStringStyle;
|
||||
}
|
||||
else
|
||||
{
|
||||
styleToUse = stringStyle;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
styleToUse = leafStyle;
|
||||
}
|
||||
|
||||
if (GUI.Button(new Rect(10 + indentation, yPos, buttonWidth, 20), prefix + displayName, styleToUse))
|
||||
{
|
||||
if (node.IsLeaf)
|
||||
{
|
||||
if (node.IsString)
|
||||
{
|
||||
if (node.IsPlayable)
|
||||
{
|
||||
RuntimeManager.PlayOneShot(node.FullPath);
|
||||
lastEventPath = node.FullPath + " (String-Event)";
|
||||
LoggerInstance.Msg("Playing string-event: " + node.FullPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
lastEventPath = $"String: {node.FullPath}";
|
||||
LoggerInstance.Msg($"Selected string: {node.FullPath}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RuntimeManager.PlayOneShot(node.FullPath);
|
||||
lastEventPath = node.FullPath;
|
||||
LoggerInstance.Msg("Playing: " + node.FullPath);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
node.IsExpanded = !node.IsExpanded;
|
||||
}
|
||||
}
|
||||
|
||||
yPos += 25;
|
||||
}
|
||||
|
||||
if (node.IsExpanded || node.Name == "Root")
|
||||
{
|
||||
foreach (var child in node.Children.Values)
|
||||
{
|
||||
DrawTreeNode(child, depth + 1, ref yPos, folderStyle, leafStyle, stringStyle, playableStringStyle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
515
UnbeatableSongHack.csproj
Normal file
515
UnbeatableSongHack.csproj
Normal file
@ -0,0 +1,515 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>disable</Nullable>
|
||||
<RootNamespace>UnbeatableSongHack</RootNamespace>
|
||||
<LangVersion>default</LangVersion>
|
||||
<IsPackable>false</IsPackable>
|
||||
<AssemblyVersion>1.0.0.0</AssemblyVersion>
|
||||
<FileVersion>1.0.0.0</FileVersion>
|
||||
<NeutralLanguage>en-US</NeutralLanguage>
|
||||
<AssemblyName>UnbeatableSongHack</AssemblyName>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="AllIn1VfxAssmebly">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\AllIn1VfxAssmebly.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="AllIn1VfxDemoScriptAssemblies">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\AllIn1VfxDemoScriptAssemblies.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="AmplifyShaderEditor.Samples.BuiltIn">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\AmplifyShaderEditor.Samples.BuiltIn.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Antlr4.Runtime.Standard">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Antlr4.Runtime.Standard.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp-firstpass">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Cinemachine">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Cinemachine.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Coffee.UnmaskForUGUI">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Coffee.UnmaskForUGUI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CommandsInAnAssemblyDefinition">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\CommandsInAnAssemblyDefinition.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CsvHelper">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\CsvHelper.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="DOTween">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\DOTween.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Dreamteck.Splines">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Dreamteck.Splines.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Dreamteck.Utilities">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Dreamteck.Utilities.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="FMODUnity">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\FMODUnity.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="FMODUnityResonance">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\FMODUnityResonance.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Protobuf">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Google.Protobuf.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Lattice.Runtime">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Lattice.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Microsoft.CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MPUIKit">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\MPUIKit.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PlayMaker">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\PlayMaker.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Rewired_Core">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Rewired_Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Rewired_Windows">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Rewired_Windows.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Sirenix.OdinInspector.Attributes">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Sirenix.OdinInspector.Attributes.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Sirenix.OdinInspector.Modules.UnityLocalization">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Sirenix.OdinInspector.Modules.UnityLocalization.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Sirenix.Serialization.Config">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Sirenix.Serialization.Config.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Sirenix.Serialization">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Sirenix.Serialization.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Sirenix.Utilities">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Sirenix.Utilities.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UIEffect">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UIEffect.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UModelerCommon">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UModelerCommon.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Addressables">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Addressables.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.AI.Navigation">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.AI.Navigation.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Animation.Rigging">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Animation.Rigging.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Animation.Rigging.DocCodeExamples">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Animation.Rigging.DocCodeExamples.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Burst">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Burst.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Burst.Unsafe">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Collections">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Collections.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Collections.LowLevel.ILSupport">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Collections.LowLevel.ILSupport.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.InternalAPIEngineBridge.013">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.InternalAPIEngineBridge.013.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Localization">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Localization.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Mathematics">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Mathematics.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.MemoryProfiler">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.MemoryProfiler.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Postprocessing.Runtime">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ProBuilder.Csg">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.ProBuilder.Csg.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ProBuilder">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.ProBuilder.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ProBuilder.KdTree">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.ProBuilder.KdTree.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ProBuilder.Poly2Tri">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.ProBuilder.Poly2Tri.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ProBuilder.Stl">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.ProBuilder.Stl.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Profiling.Core">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Profiling.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Recorder.Base">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Recorder.Base.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Recorder">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Recorder.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.RenderPipelines.Core.Runtime">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.RenderPipelines.Core.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.RenderPipelines.Core.ShaderLibrary">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.RenderPipelines.Core.ShaderLibrary.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ResourceManager">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.ResourceManager.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ScriptableBuildPipeline">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.ScriptableBuildPipeline.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Analytics">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Analytics.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Configuration">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Configuration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Device">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Device.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Environments">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Environments.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Environments.Internal">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Environments.Internal.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Internal">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Internal.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Networking">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Networking.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Registration">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Registration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Scheduler">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Scheduler.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Telemetry">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Telemetry.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Services.Core.Threading">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Services.Core.Threading.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Splines">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Splines.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.TerrainTools">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.TerrainTools.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.TextMeshPro">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.TextMeshPro.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Timeline">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\Unity.Timeline.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.AccessibilityModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.AIModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.AIModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.AndroidJNIModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.AndroidJNIModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.AnimationModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ARModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ARModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.AssetBundleModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.AudioModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ClothModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ClothModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ClusterInputModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ClusterInputModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ClusterRendererModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ClusterRendererModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ContentLoadModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ContentLoadModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.CoreModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.CrashReportingModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.CrashReportingModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.DirectorModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.DirectorModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.DSPGraphModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.DSPGraphModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.GameCenterModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.GameCenterModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.GIModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.GIModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.GridModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.GridModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.HotReloadModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.HotReloadModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ImageConversionModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ImageConversionModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.IMGUIModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.InputLegacyModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.InputModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.InputModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.JSONSerializeModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.JSONSerializeModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.LocalizationModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.LocalizationModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.NVIDIAModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.NVIDIAModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ParticleSystemModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.PerformanceReportingModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.PerformanceReportingModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.Physics2DModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.Physics2DModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.PhysicsModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ProfilerModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ProfilerModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.PropertiesModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.PropertiesModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.ScreenCaptureModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.ScreenCaptureModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.SharedInternalsModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.SharedInternalsModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.SpatialTracking">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.SpatialTracking.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.SpriteMaskModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.SpriteMaskModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.SpriteShapeModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.SpriteShapeModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.StreamingModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.StreamingModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.SubstanceModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.SubstanceModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.SubsystemsModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.SubsystemsModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.TerrainModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.TerrainModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.TerrainPhysicsModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.TerrainPhysicsModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.TextCoreFontEngineModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.TextCoreFontEngineModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.TextCoreTextEngineModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.TextCoreTextEngineModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.TextRenderingModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.TilemapModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.TilemapModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.TLSModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UIElementsModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UIModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UIModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UmbraModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UmbraModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityAnalyticsCommonModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityAnalyticsCommonModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityAnalyticsModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityAnalyticsModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityConnectModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityConnectModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityCurlModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityCurlModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityTestProtocolModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityTestProtocolModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityWebRequestAssetBundleModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityWebRequestAudioModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityWebRequestModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityWebRequestTextureModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UnityWebRequestWWWModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.VehiclesModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.VehiclesModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.VFXModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.VFXModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.VideoModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.VirtualTexturingModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.VirtualTexturingModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.VRModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.VRModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.WindModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.WindModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.XR.LegacyInputHelpers">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.XR.LegacyInputHelpers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.XRModule">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityEngine.XRModule.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityMainThreadDispatcher">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\UnityMainThreadDispatcher.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Memory">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Nature">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Nature.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Packages">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Packages.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Pooling">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Pooling.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Rendering">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Rendering.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Rendering.Instancing">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Rendering.Instancing.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Rendering.Nature">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Rendering.Nature.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.ShaderX">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.ShaderX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="VisualDesignCafe.Threading">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\VisualDesignCafe.Threading.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="XNode">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\XNode.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="XNodeOdin">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\XNodeOdin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="YarnSpinner.Compiler">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\YarnSpinner.Compiler.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="YarnSpinner">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\YarnSpinner.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="YarnSpinner.Unity">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\UNBEATABLE [DEMO]_Data\Managed\YarnSpinner.Unity.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MelonLoader">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\MelonLoader\net35\MelonLoader.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="0Harmony">
|
||||
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\MelonLoader\net35\0Harmony.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="Core.cs" />
|
||||
<Compile Include="FMODInstances.cs" />
|
||||
<Compile Include="TreeExplorer.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||
<Exec Command="COPY "$(TargetPath)" "C:\Program Files (x86)\Steam\steamapps\common\UNBEATABLE Demo\Mods"" />
|
||||
</Target>
|
||||
</Project>
|
25
UnbeatableSongHack.sln
Normal file
25
UnbeatableSongHack.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.13.35931.197
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnbeatableSongHack", "UnbeatableSongHack.csproj", "{19A78656-8E40-4FE8-BF23-84AE0B9DCD21}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{19A78656-8E40-4FE8-BF23-84AE0B9DCD21}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{19A78656-8E40-4FE8-BF23-84AE0B9DCD21}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{19A78656-8E40-4FE8-BF23-84AE0B9DCD21}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{19A78656-8E40-4FE8-BF23-84AE0B9DCD21}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {A75DFCC8-63F2-435A-9200-4741A545A241}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Loading…
x
Reference in New Issue
Block a user