Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/ISSUE_TEMPLATE/bug_report.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ body:
- type: input
id: version
attributes:
label: SleepStrap Version
description: "What version of SleepStrap are you using?"
label: SleepBlox Version
description: "What version of SleepBlox are you using?"
placeholder: "v2.9.0.0"
validations:
required: true
Expand All @@ -30,7 +30,7 @@ body:
- type: textarea
id: log
attributes:
label: SleepStrap Log
description: If you're getting a SleepStrap Exception error, upload your log file here. Otherwise, just leave it empty.
label: SleepBlox Log
description: If you're getting a SleepBlox Exception error, upload your log file here. Otherwise, just leave it empty.
value: "N/A"
render: text
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ body:
attributes:
value: |
### **Preliminary instructions**
- Please first check whether your idea has already been suggested in the [SleepStrap issues](https://github.com/SleepyDebug/SleepStrap/issues?q=is%3Aissue).
- Please first check whether your idea has already been suggested in the [SleepBlox issues](https://github.com/SleepyDebug/SleepStrap/issues?q=is%3Aissue).
- If your feature suggestion is to do with Roblox itself, please consider that what's possible is heavily constrained by what [FastFlags](https://github.com/pizzaboxer/bloxstrap/wiki/A-guide-to-FastFlags) are available.
- type: textarea
id: what-happened
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-debug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,5 @@ jobs:
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: SleepStrap (Debug) (${{ github.sha }})
name: SleepBlox (Debug) (${{ github.sha }})
path: .\SleepStrap\bin\x64\Debug\net6.0-windows10.0.19041.0\win-x64\publish\*
20 changes: 10 additions & 10 deletions .github/workflows/ci-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,32 +26,32 @@ jobs:
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: SleepStrap (Release) (${{ github.sha }})
name: SleepBlox (Release) (${{ github.sha }})
path: .\SleepStrap\bin\x64\Release\net6.0-windows10.0.19041.0\win-x64\publish\*

release:
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/tags/sleepstrap-')
if: startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/tags/sleepblox-')
permissions:
contents: write

steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: SleepStrap (Release) (${{ github.sha }})
name: SleepBlox (Release) (${{ github.sha }})
path: release

- name: Rename binaries
run: mv release/SleepStrap.exe SleepStrap-${{ github.ref_name }}.exe
run: mv release/SleepBlox.exe SleepBlox-${{ github.ref_name }}.exe

- name: Create release
uses: softprops/action-gh-release@v2
with:
draft: true
files: SleepStrap-${{ github.ref_name }}.exe
name: SleepStrap ${{ github.ref_name }}
files: SleepBlox-${{ github.ref_name }}.exe
name: SleepBlox ${{ github.ref_name }}
fail_on_unmatched_files: true

release-test:
Expand All @@ -65,16 +65,16 @@ jobs:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: SleepStrap (Release) (${{ github.sha }})
name: SleepBlox (Release) (${{ github.sha }})
path: release

- name: Rename binaries
run: mv release/SleepStrap.exe SleepStrap-${{ github.ref_name }}.exe
run: mv release/SleepBlox.exe SleepBlox-${{ github.ref_name }}.exe

- name: Create release
uses: softprops/action-gh-release@v2
with:
draft: true
files: SleepStrap-${{ github.ref_name }}.exe
name: SleepStrap ${{ github.ref_name }}
files: SleepBlox-${{ github.ref_name }}.exe
name: SleepBlox ${{ github.ref_name }}
fail_on_unmatched_files: true
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
# SleepStrap 6.9.5
# SleepBlox

![SleepStrap icon](SleepStrap/SleepStrap.png)
![SleepBlox icon](SleepStrap/SleepStrap.png)

SleepStrap is a purple Windows launcher for Roblox with skyboxes, texture presets, visual modes, fonts, and Rivals display tools.
SleepBlox is a Windows launcher for Roblox with skyboxes, texture presets, visual modes, fonts, and PC display tools.

[Download SleepStrap 6.9.5](https://github.com/SleepyDebug/SleepStrap/releases/tag/sleepstrap-6.9.5) · [Discord](https://discord.gg/W3CMjx8C7s) · [Report an issue](https://github.com/SleepyDebug/SleepStrap/issues)
[Download SleepBlox](https://github.com/SleepyDebug/SleepStrap/releases) · [Discord](https://discord.gg/W3CMjx8C7s) · [Report an issue](https://github.com/SleepyDebug/SleepStrap/issues)

## Repository layout

| Path | Purpose |
| --- | --- |
| `SleepStrap/` | SleepStrap application source, resources, and publish profile |
| `SleepStrap/` | SleepBlox application source, resources, and publish profile |
| `vendor/Wpf.Ui/` | Vendored WPF UI dependency |
| `scripts/` | Repository maintenance utilities |
| `docs/` | Terms, risk notice, and upstream license notices |
| `.github/` | CI and issue templates |

## Features

- Purple SleepStrap interface, animated page transitions, and Sleep icon branding
- SleepBlox interface, animated page transitions, and Sleep icon branding
- Scrollable skybox gallery with 25 included presets
- Reversible basic and dark texture packs
- Clear and polished-metal RTX-style visual modes
Expand All @@ -41,8 +41,8 @@ The Windows x64 publish profile produces a self-contained single-file build, so

## Safety notice

SleepStrap is unofficial software. Its visual options replace local Roblox assets and settings; they do not inject code into the Roblox executable. No third-party launcher can guarantee protection from account enforcement. Read the full [Terms of Use and Risk Notice](docs/TERMS.md) before use.
SleepBlox is unofficial software. Its visual options replace local Roblox assets and settings; they do not inject code into the Roblox executable. No third-party launcher can guarantee protection from account enforcement. Read the full [Terms of Use and Risk Notice](docs/TERMS.md) before use.

## Credits and licenses

SleepStrap is derived from the open-source Fishstrap and Bloxstrap projects. Their names and copyrights belong to their respective owners. Required MIT notices are retained in [LICENSE](LICENSE) and [docs/licenses](docs/licenses).
SleepBlox is derived from the open-source Fishstrap and Bloxstrap projects. Their names and copyrights belong to their respective owners. Required MIT notices are retained in [LICENSE](LICENSE) and [docs/licenses](docs/licenses).
2 changes: 1 addition & 1 deletion SleepStrap.sln
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32819.101
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SleepStrap", "SleepStrap\SleepStrap.csproj", "{0D75146E-DA24-4B05-B6C9-250C8F81B0C7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SleepBlox", "SleepStrap\SleepStrap.csproj", "{0D75146E-DA24-4B05-B6C9-250C8F81B0C7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui", "vendor\Wpf.Ui\src\Wpf.Ui\Wpf.Ui.csproj", "{1ADC87D1-8963-4100-845A-18477824718E}"
EndProject
Expand Down
62 changes: 54 additions & 8 deletions SleepStrap/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@ namespace SleepStrap
public partial class App : Application
{
#if QA_BUILD
public const string ProjectName = "SleepStrap-QA";
public const string ProjectName = "SleepBlox-QA";
#else
public const string ProjectName = "SleepStrap";
public const string ProjectName = "SleepBlox";
#endif
// Keep the old identity only for migration. Existing installations continue
// to use their original folder and settings after the public rebrand.
public const string LegacyProjectName = "SleepStrap";
public const string ProjectOwner = "SleepyDebug";
public const string ProjectRepository = "SleepyDebug/SleepStrap";
public const string ProjectDownloadLink = "https://github.com/SleepyDebug/SleepStrap/releases";
Expand All @@ -26,13 +29,24 @@ public partial class App : Application
public const string ProjectRemoteDataLink = "https://config.fishstrap.app/v1/Data.json";
public const bool SupportsSelfUpdates = true;

public static string BootstrapperMutexName => $"{ProjectName}-Bootstrapper";
public static string BackgroundUpdaterMutexName => $"{ProjectName}-BackgroundUpdater";
public static string BackgroundUpdaterKillEventName => $"{ProjectName}-BackgroundUpdaterKillEvent";
public static string MultiInstanceWatcherEventName => $"{ProjectName}-MultiInstanceWatcherInitialisationFinished";

public const string LegacyBootstrapperMutexName = "SleepStrap-Bootstrapper";
public const string LegacyBackgroundUpdaterMutexName = "SleepStrap-BackgroundUpdater";
public const string LegacyBackgroundUpdaterKillEventName = "SleepStrap-BackgroundUpdaterKillEvent";
public const string LegacyMultiInstanceWatcherEventName = "SleepStrap-MultiInstanceWatcherInitialisationFinished";

public const string RobloxPlayerAppName = "RobloxPlayerBeta.exe";
public const string RobloxStudioAppName = "RobloxStudioBeta.exe";
// one day ill add studio support, haha i never did!
public const string RobloxAnselAppName = "eurotrucks2.exe";

// simple shorthand for extremely frequently used and long string - this goes under HKCU
public const string UninstallKey = $@"Software\Microsoft\Windows\CurrentVersion\Uninstall\{ProjectName}";
public const string LegacyUninstallKey = @"Software\Microsoft\Windows\CurrentVersion\Uninstall\SleepStrap";

public const string ApisKey = $"Software\\{ProjectName}";

Expand Down Expand Up @@ -185,6 +199,12 @@ protected override async void OnStartup(StartupEventArgs e)
{
const string LOG_IDENT = "App::OnStartup";

if (Services.NvidiaBlurElevationBridge.TryHandleElevatedHelper(e.Args))
{
Shutdown();
return;
}

Locale.Initialize();

base.OnStartup(e);
Expand Down Expand Up @@ -228,7 +248,19 @@ protected override async void OnStartup(StartupEventArgs e)
LaunchSettings = new LaunchSettings(e.Args);

// installation check begins here
using var uninstallKey = Registry.CurrentUser.OpenSubKey(UninstallKey);
// A rebranded build must still find the existing SleepStrap install so
// it keeps the user's configuration, Roblox registration, and local mods.
RegistryKey? currentUninstallKey = Registry.CurrentUser.OpenSubKey(UninstallKey);
#if !QA_BUILD
RegistryKey? legacyUninstallKey = currentUninstallKey is null
? Registry.CurrentUser.OpenSubKey(LegacyUninstallKey)
: null;
bool rebrandingLegacyInstall = legacyUninstallKey is not null;
using RegistryKey? uninstallKey = currentUninstallKey ?? legacyUninstallKey;
#else
const bool rebrandingLegacyInstall = false;
using RegistryKey? uninstallKey = currentUninstallKey;
#endif
string? installLocation = null;
bool fixInstallLocation = false;

Expand Down Expand Up @@ -319,8 +351,8 @@ protected override async void OnStartup(StartupEventArgs e)
FastFlags.Load();
GlobalSettings.Load();

// Older SleepStrap builds hard-disabled this setting. Migrate those
// installations now that releases are published in the SleepStrap repo.
// Older builds hard-disabled this setting. Migrate those
// installations now that releases are published in the current repo.
if (!Settings.Prop.CheckForUpdates)
{
Settings.Prop.CheckForUpdates = true;
Expand All @@ -335,10 +367,18 @@ protected override async void OnStartup(StartupEventArgs e)

Locale.Set(Settings.Prop.Locale);

// Finish the public rebrand on existing installations. Without this,
// browser protocols and shortcuts can keep launching an old-named
// executable even after a user has installed SleepBlox.
if (rebrandingLegacyInstall)
Installer.MigrateLegacyInstallation();

if (!LaunchSettings.BypassUpdateCheck)
Installer.HandleUpgrade();

if (!LaunchSettings.ClippingFlag.Active && await Services.AppUpdateService.CheckAndPromptAsync())
bool isBackgroundHost = LaunchSettings.ClippingFlag.Active || LaunchSettings.ExperimentalFlag.Active || LaunchSettings.ChatShortcutsFlag.Active;

if (!isBackgroundHost && await Services.AppUpdateService.CheckAndPromptAsync())
{
SoftTerminate();
return;
Expand All @@ -349,12 +389,18 @@ protected override async void OnStartup(StartupEventArgs e)
WindowsRegistry.RegisterApis(); // we want to register those early on
// so we wont have any issues with bloxshade

if (!LaunchSettings.ClippingFlag.Active)
if (!isBackgroundHost)
Services.ClippingHostService.StopRemovedSleePlayer();

if (!LaunchSettings.ClippingFlag.Active && Settings.Prop.ClippingEnabled)
if (!isBackgroundHost && Settings.Prop.ClippingEnabled)
Services.ClippingHostService.EnsureStarted();

if (!isBackgroundHost)
Services.ExperimentalClickerHostService.EnsureStarted();

if (!isBackgroundHost)
Services.ChatShortcutsHostService.EnsureStarted();

LaunchHandler.ProcessLaunchArgs();
}

Expand Down
14 changes: 8 additions & 6 deletions SleepStrap/Bootstrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public class Bootstrapper

public bool IsStudioLaunch => _launchMode != LaunchMode.Player;

public string MutexName { get; set; } = "SleepStrap-Bootstrapper";
public string MutexName { get; set; } = App.BootstrapperMutexName;
public bool QuitIfMutexExists { get; set; } = false;
#endregion

Expand Down Expand Up @@ -270,7 +270,9 @@ public async Task Run()

if (AppData.State.VersionGuid != _latestVersionGuid || _mustUpgrade)
{
bool backgroundUpdaterMutexOpen = Utilities.DoesMutexExist("SleepStrap-BackgroundUpdater");
bool backgroundUpdaterMutexOpen = Utilities.DoesAnyMutexExist(
App.BackgroundUpdaterMutexName,
App.LegacyBackgroundUpdaterMutexName);
if (App.LaunchSettings.BackgroundUpdaterFlag.Active)
backgroundUpdaterMutexOpen = false; // we want to actually update lol

Expand Down Expand Up @@ -606,7 +608,7 @@ private static void LaunchMultiInstanceWatcher()
return;
}

using EventWaitHandle initEventHandle = new EventWaitHandle(false, EventResetMode.AutoReset, "SleepStrap-MultiInstanceWatcherInitialisationFinished");
using EventWaitHandle initEventHandle = new EventWaitHandle(false, EventResetMode.AutoReset, App.MultiInstanceWatcherEventName);
Process.Start(Paths.Process, "-multiinstancewatcher");

bool initSuccess = initEventHandle.WaitOne(TimeSpan.FromSeconds(2));
Expand Down Expand Up @@ -1253,7 +1255,7 @@ private static void StartBackgroundUpdater()
{
const string LOG_IDENT = "Bootstrapper::StartBackgroundUpdater";

if (Utilities.DoesMutexExist("SleepStrap-BackgroundUpdater"))
if (Utilities.DoesAnyMutexExist(App.BackgroundUpdaterMutexName, App.LegacyBackgroundUpdaterMutexName))
{
App.Logger.WriteLine(LOG_IDENT, "Background updater already running");
return;
Expand Down Expand Up @@ -1432,14 +1434,14 @@ private async Task<bool> ApplyModifications()
var currentModFiles = new HashSet<string>(modFolderFiles, StringComparer.OrdinalIgnoreCase);
var previouslyAppliedMods = new HashSet<string>(App.RobloxState.Prop.ModManifest, StringComparer.OrdinalIgnoreCase);
string managedTextureRepairMarker = Path.Combine(
Paths.SleepStrapData,
Paths.SleepBloxData,
"State",
$"managed-texture-repair-v2-{Path.GetFileName(_latestVersionDirectory)}.complete");
bool repairManagedTextures = !File.Exists(managedTextureRepairMarker);
bool managedTextureRepairFailed = false;

// Builds before this repair could forget removed texture entries after an
// unsuccessful package restore. Reconcile every SleepStrap-owned texture once
// unsuccessful package restore. Reconcile every SleepBlox-owned texture once
// for the active Roblox version, while leaving currently enabled layers alone.
if (repairManagedTextures)
previouslyAppliedMods.UnionWith(VisualModService.GetManagedTextureModificationPaths());
Expand Down
6 changes: 3 additions & 3 deletions SleepStrap/Enums/BootstrapperIcon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ namespace SleepStrap.Enums
{
public enum BootstrapperIcon
{
[EnumName(StaticName = "SleepStrap")]
[EnumName(StaticName = "SleepBlox")]
IconSleepStrap,
[EnumName(StaticName = "SleepStrap (Legacy)")]
[EnumName(StaticName = "SleepBlox (Legacy)")]
LegacySleepStrap,
[EnumName(StaticName = "2008")]
Icon2008,
Expand All @@ -22,7 +22,7 @@ public enum BootstrapperIcon
Icon2022,
[EnumName(FromTranslation = "Common.Custom")]
IconCustom,
[EnumName(StaticName = "SleepStrap (Legacy Classic)")]
[EnumName(StaticName = "SleepBlox (Legacy Classic)")]
LegacySleepStrapClassic
}
}
2 changes: 1 addition & 1 deletion SleepStrap/Enums/BootstrapperStyle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public enum BootstrapperStyle
ProgressDialog,
ClassicFluentDialog,
ByfronDialog,
[EnumName(StaticName = "SleepStrap")]
[EnumName(StaticName = "SleepBlox")]
FluentDialog,
FluentAeroDialog,
CustomDialog
Expand Down
Loading
Loading