You are on page 1of 3

function Start-Noita {

<#
.SYNOPSIS
Starts Noita from a PowerShell prompt, optionally with a specific set seed
for a new game.

.DESCRIPTION
To use this function, copy and paste the complete function definition into
a PowerShell
session, and then invoke it with `Start-Noita`. Supply `-Seed somevalue` if
you would like
to run a specific seed (see the examples below).

.EXAMPLE
PS> Start-Noita

Starts Noita normally.

.EXAMPLE
PS> Start-Noita -Seed 1

Starts Noita with a fixed seed value of 1.

.EXAMPLE
PS> Start-Noita -Seed 1 -Path C:\Noita\noita.exe

Starts Noita from the requested location with a fixed seed value of 1.
Use this form if your copy of Noita was not installed via Steam, or modify
the default
setting for $Path below before loading the function into your PowerShell
session.

.NOTES
If you want, you can load this function into your PowerShell profile as
follows:

1. Copy the entire function definition from top to bottom to your Windows
clipboard (Ctrl+C).
2. Run the following code in PowerShell:

Get-Clipboard | Add-Content -Path $profile

3. Close and reopen PowerShell to load the newly modified profile.


4. Run `Start-Noita` directly as needed. It will be automatically loaded in
any future PowerShell sessions.
#>
[CmdletBinding(DefaultParameterSetName = 'Default')]
param(
[Parameter()]
[string]
$Path = "C:\Program Files (x86)\Steam\steamapps\common\Noita",

[Parameter(Position = 0, ParameterSetName = 'Default')]


[long]
$Seed,

[Parameter(ParameterSetName = 'Default')]
[switch]
$DevMode,
[Parameter(Mandatory, ParameterSetName = 'Unpack')]
[switch]
$UnpackData
)

$noitaArgs = @()
$noitaFolder = $Path | Split-Path -Parent

if ($Seed) {
$xml = [System.Xml.XmlDocument]::new()
$node = $xml.CreateElement('MagicNumbers')
$xml.AppendChild($node) > $null
$blank = $xml.CreateTextNode([Environment]::NewLine)
$node.AppendChild($blank) > $null
$node.SetAttribute('WORLD_SEED', $Seed)
$node.SetAttribute('_DEBUG_DONT_LOAD_OTHER_MAGIC_NUMBERS', 1)
$node.SetAttribute('_DEBUG_DONT_SAVE_MAGIC_NUMBERS', 1)

$magicPath = $Path | Join-Path -ChildPath 'magic.txt'


$sb = [System.Text.StringBuilder]::new()
$xmlWriter = [System.Xml.XmlWriter]::Create(
$sb,
@{
Indent = $true
NewLineOnAttributes = $true
OmitXmlDeclaration = $true
}
)
$xml.Save($xmlWriter)
$xmlText = $sb.ToString()
Write-Verbose $xmlText
$xmlText | Set-Content -Path $magicPath

$noitaArgs = @(
'-no_logo_splashes'
'-magic_numbers', 'magic.txt'
)
}
elseif ($UnpackData) {
$noitaArgs = @(
'-wizard_unpak'
)
}

$filename = if ($DevMode) {
'noita_dev.exe'
}
else {
'noita.exe'
}

$executable = Join-Path $Path -ChildPath $filename

try {
Push-Location $Path
& $executable @noitaArgs
}
finally {
Pop-Location
}
}

You might also like