Files
DorkNet/launcher/App.xaml
T
Alexa b155ae5dbe launcher: Rec-Room-styled UI; PowerShell-free patcher; Launch button
UI redesign:
- Warm coral + teal palette over deep purple-navy (closer to Rec Room's
  marketing aesthetic). New wordmark gradient (coral -> pink -> teal).
- Chunky 18px rounded cards on the first-run wizard with per-mode
  accent tinting (coral for host, teal for join) and clear CTAs.
- Form fields wrapped in elevated panels with sectional titles + pill
  status chips in the header (HOST MODE / JOIN MODE / SETTINGS).
- Drop-shadow effects on primary buttons + cards for depth.

Patcher rewrite:
- ClientPatcher.cs no longer shells out to PowerShell; the launcher
  unzips MelonLoader, copies the DorkNet plugin DLL, and renders the
  user-data config template — all in C# in-process.
- Patcher zip now driven by a manifest.json at root (schema v1).
  Per-version branches publish: manifest.json + MelonLoader.zip +
  DorkNet.ClientMod.dll + config template.
- RELEASES.md updated with the new MelonLoader manifest contract and
  the placeholder substitution rules.

Rec Room launch path:
- New Backend/RecRoomLauncher.cs runs Recroom_Release.exe directly
  from the picked install folder's parent dir (no Steam).
- 'Launch Rec Room' button appears after a successful patch in both
  host + join modes.
2026-05-27 00:55:22 +03:00

250 lines
14 KiB
XML

<Application x:Class="DorkNet.Launcher.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<!-- ── Palette ─────────────────────────────────────────────────
Rec Room-adjacent — warm coral + teal on a deep purple-navy.
Avoids the cold-grey "developer tool" look in favour of the
friendly game-launcher aesthetic. -->
<SolidColorBrush x:Key="Bg" Color="#16102A" />
<SolidColorBrush x:Key="BgDeeper" Color="#0E0A1F" />
<SolidColorBrush x:Key="BgElev" Color="#221833" />
<SolidColorBrush x:Key="BgElev2" Color="#2E2245" />
<SolidColorBrush x:Key="Border" Color="#3A2C56" />
<SolidColorBrush x:Key="BorderSoft" Color="#2A2042" />
<SolidColorBrush x:Key="Ink" Color="#F7F3FF" />
<SolidColorBrush x:Key="InkSoft" Color="#B8AED4" />
<SolidColorBrush x:Key="InkFaint" Color="#6E608E" />
<!-- Brand: warm coral, with teal as the secondary accent. -->
<SolidColorBrush x:Key="Brand" Color="#FF7B5C" />
<SolidColorBrush x:Key="BrandHover" Color="#FF9277" />
<SolidColorBrush x:Key="BrandDeep" Color="#E55F40" />
<SolidColorBrush x:Key="Teal" Color="#44D6C4" />
<SolidColorBrush x:Key="TealDeep" Color="#2DB8A6" />
<SolidColorBrush x:Key="Sunshine" Color="#FFD555" />
<SolidColorBrush x:Key="Ok" Color="#5BE0A6" />
<SolidColorBrush x:Key="Danger" Color="#FF6B8A" />
<!-- Wordmark gradient: coral → pink → teal across the "DorkNet" letters. -->
<LinearGradientBrush x:Key="WordmarkBrush" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#FF7B5C" Offset="0" />
<GradientStop Color="#FF5C95" Offset="0.55" />
<GradientStop Color="#44D6C4" Offset="1" />
</LinearGradientBrush>
<!-- Subtle card-back gradient — radial illusion via linear top-left
tint into the base elev colour. -->
<LinearGradientBrush x:Key="CardBg" StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#2A1F40" Offset="0" />
<GradientStop Color="#221833" Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="CardBgHost" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#3A1F35" Offset="0" />
<GradientStop Color="#221833" Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="CardBgJoin" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#1F3540" Offset="0" />
<GradientStop Color="#221833" Offset="1" />
</LinearGradientBrush>
<!-- Soft drop-shadow effect used on cards / primary buttons. -->
<DropShadowEffect x:Key="CardShadow" BlurRadius="24" ShadowDepth="0"
Color="#000000" Opacity="0.45" />
<DropShadowEffect x:Key="BtnShadow" BlurRadius="16" ShadowDepth="2"
Color="#FF5C40" Opacity="0.35" />
<!-- ── TextBox ─────────────────────────────────────────────────── -->
<Style TargetType="TextBox">
<Setter Property="Background" Value="{StaticResource BgElev}" />
<Setter Property="Foreground" Value="{StaticResource Ink}" />
<Setter Property="CaretBrush" Value="{StaticResource Ink}" />
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="Padding" Value="12,10" />
<Setter Property="FontFamily" Value="Segoe UI Variable, Segoe UI" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="10">
<ScrollViewer x:Name="PART_ContentHost"
Margin="{TemplateBinding Padding}"
VerticalScrollBarVisibility="Auto" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" Value="{StaticResource Brand}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ── ComboBox ────────────────────────────────────────────────── -->
<Style TargetType="ComboBox">
<Setter Property="Background" Value="{StaticResource BgElev}" />
<Setter Property="Foreground" Value="{StaticResource Ink}" />
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="Padding" Value="12,10" />
<Setter Property="FontSize" Value="14" />
<Setter Property="FontFamily" Value="Segoe UI Variable, Segoe UI" />
</Style>
<Style TargetType="ComboBoxItem">
<Setter Property="Background" Value="{StaticResource BgElev}" />
<Setter Property="Foreground" Value="{StaticResource Ink}" />
<Setter Property="Padding" Value="10,8" />
</Style>
<!-- ── Buttons ─────────────────────────────────────────────────── -->
<Style x:Key="Btn" TargetType="Button">
<Setter Property="Background" Value="{StaticResource BgElev2}" />
<Setter Property="Foreground" Value="{StaticResource Ink}" />
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="Padding" Value="16,10" />
<Setter Property="FontSize" Value="13" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="FontFamily" Value="Segoe UI Variable, Segoe UI" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="10">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="{TemplateBinding Padding}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource Border}" />
<Setter Property="BorderBrush" Value="{StaticResource BorderSoft}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{StaticResource InkFaint}" />
<Setter Property="Background" Value="{StaticResource BgElev}" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="PrimaryBtn" TargetType="Button" BasedOn="{StaticResource Btn}">
<Setter Property="Background" Value="{StaticResource Brand}" />
<Setter Property="BorderBrush" Value="{StaticResource BrandDeep}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Padding" Value="22,12" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Effect" Value="{StaticResource BtnShadow}" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource BrandHover}" />
<Setter Property="BorderBrush" Value="{StaticResource Brand}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource BgElev2}" />
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
<Setter Property="Foreground" Value="{StaticResource InkFaint}" />
<Setter Property="Effect" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="TealBtn" TargetType="Button" BasedOn="{StaticResource Btn}">
<Setter Property="Background" Value="{StaticResource Teal}" />
<Setter Property="BorderBrush" Value="{StaticResource TealDeep}" />
<Setter Property="Foreground" Value="#0E0A1F" />
<Setter Property="Padding" Value="22,12" />
<Setter Property="FontSize" Value="14" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#5DE8D6" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="GhostBtn" TargetType="Button" BasedOn="{StaticResource Btn}">
<Setter Property="Background" Value="Transparent" />
</Style>
<!-- ── Card buttons for first-run wizard ───────────────────────── -->
<Style x:Key="ChoiceCardBtn" TargetType="Button">
<Setter Property="Background" Value="{StaticResource CardBg}" />
<Setter Property="Foreground" Value="{StaticResource Ink}" />
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="Padding" Value="28" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Setter Property="Effect" Value="{StaticResource CardShadow}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="cardBorder"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="18">
<ContentPresenter Margin="{TemplateBinding Padding}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="cardBorder" Property="BorderBrush"
Value="{StaticResource Brand}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ── Section panel — used to group form fields ───────────────── -->
<Style x:Key="Panel" TargetType="Border">
<Setter Property="Background" Value="{StaticResource BgElev}" />
<Setter Property="BorderBrush" Value="{StaticResource BorderSoft}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="CornerRadius" Value="14" />
<Setter Property="Padding" Value="20" />
</Style>
<!-- ── Field label text ────────────────────────────────────────── -->
<Style x:Key="FieldLabel" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource InkSoft}" />
<Setter Property="FontSize" Value="11" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Margin" Value="0,0,0,8" />
<Setter Property="FontFamily" Value="Segoe UI Variable, Segoe UI" />
</Style>
<Style x:Key="SectionTitle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource Ink}" />
<Setter Property="FontSize" Value="16" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Margin" Value="0,0,0,12" />
<Setter Property="FontFamily" Value="Segoe UI Variable, Segoe UI" />
</Style>
<!-- Pill-style "status chip" used in section headers. -->
<Style x:Key="StatusChip" TargetType="Border">
<Setter Property="Background" Value="{StaticResource BgElev2}" />
<Setter Property="CornerRadius" Value="999" />
<Setter Property="Padding" Value="10,4" />
</Style>
</Application.Resources>
</Application>