Added instructions
This commit is contained in:
@@ -71,6 +71,10 @@
|
||||
<DataTemplate><!-- tabs only used for header switching --></DataTemplate>
|
||||
</TabControl.ContentTemplate>
|
||||
|
||||
<TabItem Header="📖 Instructions - Steam" Style="{StaticResource DarkTabItem}"
|
||||
x:Name="TabInstructionsSteam"/>
|
||||
<TabItem Header="📖 Instructions - Cracked" Style="{StaticResource DarkTabItem}"
|
||||
x:Name="TabInstructionsCracked"/>
|
||||
<TabItem Header="⚙ Resign Save" Style="{StaticResource DarkTabItem}"
|
||||
x:Name="TabResign"/>
|
||||
<TabItem Header="🔓 Decrypt / Inspect" Style="{StaticResource DarkTabItem}"
|
||||
@@ -84,7 +88,168 @@
|
||||
|
||||
<Grid Grid.Row="2">
|
||||
|
||||
<!-- RESIGN PANEL -->
|
||||
<!-- INSTRUCTIONS - STEAM PANEL -->
|
||||
<ScrollViewer x:Name="PanelInstructionsSteam" VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
<StackPanel Margin="32,28,32,28">
|
||||
<TextBlock Text="007: First Light - Save Game Transfer Instructions (Steam)"
|
||||
Foreground="{StaticResource TextPrimaryBrush}"
|
||||
FontSize="16" FontWeight="Bold" Margin="0,0,0,20"/>
|
||||
|
||||
<TextBlock Text="STEPS TO RESIGN YOUR SAVE FILES"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
|
||||
<StackPanel Margin="0,0,0,20">
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">1.</Run> Select your folder using the 'Browse' button with your NEW savegame (folder which contains index.save and data.save)
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">2.</Run> Insert your steam Id which you want to set.
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">3.</Run> Click on 'Resign Save Files'
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,20">
|
||||
<Run FontWeight="Bold">4.</Run> Place the savegame files in your original save directory.
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock Text="STEAM SAVEGAME FILE LOCATION"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<Border Background="#0D1E30" CornerRadius="8" Padding="12" Margin="0,0,0,20"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1">
|
||||
<TextBlock Foreground="{StaticResource TextSecondaryBrush}" FontSize="12"
|
||||
FontFamily="Consolas" TextWrapping="Wrap"
|
||||
Text="C:\Program Files (x86)\Steam\userdata\<userID>\3768760\remote\KntSlotSaveFile-x"/>
|
||||
</Border>
|
||||
|
||||
<TextBlock Foreground="{StaticResource TextMutedBrush}" FontSize="11" Margin="0,0,0,20">
|
||||
(x is your save slot number)
|
||||
</TextBlock>
|
||||
|
||||
<TextBlock Text="YOUR STEAM ID"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<Border Background="#0D1E30" CornerRadius="8" Padding="12" Margin="0,0,0,20"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1">
|
||||
<TextBlock Foreground="{StaticResource TextSecondaryBrush}" FontSize="12"
|
||||
FontFamily="Consolas"
|
||||
Text="76561197960272671"/>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="EXTRA STEPS NEEDED FOR STEAM VERSION"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,12">
|
||||
Please note if using the steam version, you also need to do these extra steps:
|
||||
</TextBlock>
|
||||
|
||||
<StackPanel Margin="0,0,0,20">
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">1.</Run> Click on the VDF Generator tab
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">2.</Run> Browse to your remote folder
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,20">
|
||||
<Run FontWeight="Bold">3.</Run> Click on 'Generate VDF'
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
<Border Background="#1A3A52" CornerRadius="8" Padding="16,12"
|
||||
BorderBrush="{StaticResource AccentGoldBrush}" BorderThickness="1">
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" TextWrapping="Wrap">
|
||||
<Run FontWeight="Bold">Now startup your game, the saves should show</Run>
|
||||
</TextBlock>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
<!-- INSTRUCTIONS - CRACKED PANEL -->
|
||||
<ScrollViewer x:Name="PanelInstructionsCracked" Visibility="Collapsed"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
<StackPanel Margin="32,28,32,28">
|
||||
<TextBlock Text="007: First Light - Save Game Transfer Instructions (Cracked)"
|
||||
Foreground="{StaticResource TextPrimaryBrush}"
|
||||
FontSize="16" FontWeight="Bold" Margin="0,0,0,20"/>
|
||||
|
||||
<TextBlock Text="STEPS TO RESIGN YOUR SAVE FILES"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
|
||||
<StackPanel Margin="0,0,0,20">
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">1.</Run> Select your folder using the 'Browse' button with your NEW savegame (folder which contains index.save and data.save)
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">2.</Run> Insert your steam Id which you want to set.
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
<Run FontWeight="Bold">3.</Run> Click on 'Resign Save Files'
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,20">
|
||||
<Run FontWeight="Bold">4.</Run> Place the savegame files in your original save directory.
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock Text="CRACKED VERSION SAVE FILE LOCATION"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<Border Background="#0D1E30" CornerRadius="8" Padding="12" Margin="0,0,0,20"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1">
|
||||
<TextBlock Foreground="{StaticResource TextSecondaryBrush}" FontSize="12"
|
||||
FontFamily="Consolas" TextWrapping="Wrap"
|
||||
Text="C:\Users\[username]\AppData\Roaming\GSE Saves\3768760\remote\KntSlotSaveFile-0"/>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="YOUR STEAM ID"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<Border Background="#0D1E30" CornerRadius="8" Padding="12" Margin="0,0,0,20"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1">
|
||||
<TextBlock Foreground="{StaticResource TextSecondaryBrush}" FontSize="12"
|
||||
FontFamily="Consolas"
|
||||
Text="76561197960272671"/>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="EXTRA STEPS NEEDED FOR CRACKED VERSION"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,12">
|
||||
Please note that if using the cracked version you would possibly also need the userdata.zip
|
||||
</TextBlock>
|
||||
|
||||
<StackPanel Margin="0,0,0,20">
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8" TextWrapping="Wrap">
|
||||
Extract the contents of the zip in <Run FontFamily="Consolas">[YOUR 007 FIRST LIGHT INSTALLATION FOLDER]\Retail</Run>
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
Overwrite the existing steam_settings and userdata.
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
<Border Background="#3A2A1A" CornerRadius="8" Padding="16,12"
|
||||
BorderBrush="#CC6600" BorderThickness="1" Margin="0,0,0,20">
|
||||
<StackPanel>
|
||||
<TextBlock Foreground="#FF9933" FontSize="13" FontWeight="Bold" Margin="0,0,0,6">
|
||||
⚠ IMPORTANT WARNING
|
||||
</TextBlock>
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" TextWrapping="Wrap">
|
||||
CREATE A BACKUP FIRST OF THE FOLDERS YOU'RE OVERWRITING AS YOU COULD GET INVALID TOKEN ERRORS IF DONE INCORRECTLY!
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<TextBlock Foreground="{StaticResource TextMutedBrush}" FontSize="11" Margin="0,0,0,20">
|
||||
Please note that the steam_settings and the userdata folders are from the v1.0.1 version of the game.
|
||||
</TextBlock>
|
||||
|
||||
<TextBlock Foreground="{StaticResource TextPrimaryBrush}" FontSize="13" Margin="0,0,0,8">
|
||||
See
|
||||
<Hyperlink NavigateUri="https://www.nexusmods.com/007firstlight/mods/44"
|
||||
RequestNavigate="Hyperlink_RequestNavigate"
|
||||
Foreground="{StaticResource AccentGoldBrush}">
|
||||
nexusmods.com/007firstlight/mods/44
|
||||
</Hyperlink>
|
||||
for the userdata.zip
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
<ScrollViewer x:Name="PanelResign" VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
<StackPanel Margin="32,28,32,28">
|
||||
@@ -110,7 +275,7 @@
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<TextBox x:Name="TxtTargetSID" Style="{StaticResource DarkTextBox}"
|
||||
Margin="0,0,0,6"
|
||||
ToolTip="Your SteamID64 — find it at steamid.io"
|
||||
ToolTip="Your SteamID64 - find it at steamid.io"
|
||||
PreviewTextInput="NumericOnly_PreviewInput"/>
|
||||
<TextBlock Foreground="{StaticResource TextMutedBrush}" FontSize="11"
|
||||
Margin="0,0,0,18">
|
||||
@@ -120,11 +285,11 @@
|
||||
Foreground="{StaticResource AccentGoldBrush}">
|
||||
steamid.io
|
||||
</Hyperlink>
|
||||
— it looks like 76561197960272671
|
||||
- it looks like 76561197960272671
|
||||
</TextBlock>
|
||||
|
||||
<!-- Source SteamID64 (optional) -->
|
||||
<TextBlock Text="SOURCE STEAMID64 (optional — leave blank to auto-detect)"
|
||||
<TextBlock Text="SOURCE STEAMID64 (optional - leave blank to auto-detect)"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<TextBox x:Name="TxtSourceSID" Style="{StaticResource DarkTextBox}"
|
||||
Margin="0,0,0,6"
|
||||
@@ -199,7 +364,7 @@
|
||||
</Grid>
|
||||
|
||||
<!-- SteamID64 -->
|
||||
<TextBlock Text="STEAMID64 (optional — leave blank to auto-detect)"
|
||||
<TextBlock Text="STEAMID64 (optional - leave blank to auto-detect)"
|
||||
Style="{StaticResource FieldLabel}"/>
|
||||
<TextBox x:Name="TxtDecryptSID" Style="{StaticResource DarkTextBox}"
|
||||
Margin="0,0,0,6"
|
||||
@@ -324,7 +489,7 @@
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock x:Name="TxtStatusBar"
|
||||
Text="Select a folder and enter your Target SteamID64 to get started."
|
||||
Text="Click the 'Resign Save' tab and select a folder and enter your Target SteamID64 to get started."
|
||||
Foreground="{StaticResource TextMutedBrush}" FontSize="11"
|
||||
VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
|
||||
@@ -32,11 +32,23 @@ public partial class MainWindow : Window
|
||||
return;
|
||||
}
|
||||
|
||||
PanelInstructionsSteam.Visibility = Visibility.Collapsed;
|
||||
PanelInstructionsCracked.Visibility = Visibility.Collapsed;
|
||||
PanelResign.Visibility = Visibility.Collapsed;
|
||||
PanelDecrypt.Visibility = Visibility.Collapsed;
|
||||
PanelVdf.Visibility = Visibility.Collapsed;
|
||||
PanelLog.Visibility = Visibility.Collapsed;
|
||||
|
||||
if (tab == TabInstructionsSteam)
|
||||
{
|
||||
PanelInstructionsSteam.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
if (tab == TabInstructionsCracked)
|
||||
{
|
||||
PanelInstructionsCracked.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
if (tab == TabResign)
|
||||
{
|
||||
PanelResign.Visibility = Visibility.Visible;
|
||||
@@ -126,7 +138,7 @@ public partial class MainWindow : Window
|
||||
if (!string.IsNullOrEmpty(sourceText))
|
||||
{
|
||||
if (!ulong.TryParse(sourceText, out ulong s))
|
||||
{ ShowBanner(ResignResultBanner, ResignResultText, "Source SteamID64 is invalid — leave blank to auto-detect.", BannerKind.Error); return; }
|
||||
{ ShowBanner(ResignResultBanner, ResignResultText, "Source SteamID64 is invalid - leave blank to auto-detect.", BannerKind.Error); return; }
|
||||
userSourceSid = s;
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ public static class SaveCore
|
||||
{
|
||||
for (int b3 = 0; b3 < 256; b3++)
|
||||
{
|
||||
// Key bytes 0..7 — tail bytes 4..7 fixed as [0x01,0x00,0x10,0x01]
|
||||
// Key bytes 0..7 - tail bytes 4..7 fixed as [0x01,0x00,0x10,0x01]
|
||||
// (matches the game's SteamID encoding pattern)
|
||||
byte[] key = [b0, b1, (byte)b2, (byte)b3, 0x01, 0x00, 0x10, 0x01];
|
||||
|
||||
@@ -156,7 +156,7 @@ public static class SaveCore
|
||||
using var zs2 = new ZLibStream(ms2, CompressionMode.Decompress);
|
||||
using var output = new MemoryStream();
|
||||
zs2.CopyTo(output);
|
||||
// success — reconstruct ulong SteamID64 from key bytes
|
||||
// success - reconstruct ulong SteamID64 from key bytes
|
||||
ulong steamId = BitConverter.ToUInt64(key, 0);
|
||||
return steamId;
|
||||
}
|
||||
@@ -225,7 +225,7 @@ public static class SaveCore
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Add($" [ERROR] Decompression failed — source SteamID may be wrong. {ex.Message}");
|
||||
log.Add($" [ERROR] Decompression failed - source SteamID may be wrong. {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -273,7 +273,7 @@ public static class SaveCore
|
||||
}
|
||||
else
|
||||
{
|
||||
log.Add(" [WARN] 'SSaveGameHeader' not found — SteamID may be incorrect.");
|
||||
log.Add(" [WARN] 'SSaveGameHeader' not found - SteamID may be incorrect.");
|
||||
}
|
||||
|
||||
string outPath = filePath + ".decrypted";
|
||||
@@ -323,7 +323,7 @@ public static class SaveCore
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Add($" [ERROR] Decompression failed — SteamID {steamSid} may be incorrect. {ex.Message}");
|
||||
log.Add($" [ERROR] Decompression failed - SteamID {steamSid} may be incorrect. {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user