-
-
Save vexx32/fb3131b740af1602c7eed974ea8d2e46 to your computer and use it in GitHub Desktop.
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 | |
} | |
} |
Thanks! I'll update the gist.
I don't know about programming, I just wanted to upload a seed but I get an error
At line:76 char:1
- }Start-Noita
- ~
Unexpected token '}' in expression or statement.- CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
- FullyQualifiedErrorId : UnexpectedToken
You must have missed part of the file when pasting it. You need to copy the entire file.
There's a mod for starting with a Seed now. FYI for others who find this looking for that functionality:
https://steamcommunity.com/sharedfiles/filedetails/?id=2284931352
Aye, mods work, but certain game functionality is disabled with mods enabled, which is why this script exists. 🙂
https://imgur.com/a/4TyuEGM
It seems fine to me, but it doesn't want to work.
Maybe I missed something
Like I said, you need to copy the whole file. Help comments at the start are inside of the function declaration, so if you cut those off, you've also cut off the function Start-Noita {
declaration. If you copy the file as a whole, without leaving bits out, it'll work. 🙂
I'm an idiot :D :D
Thank you
You may need to adjust the execution policy if this is your first time messing with PowerShell. Start PowerShell as administrator, run Set-ExecutionPolicy -ExecutionPolicy AllSigned
or Set-ExecutionPolicy -ExecutionPolicy Unrestricted
. Note: doing so will remove some script running protections so you may want to undo this later on with Set-ExecutionPolicy -ExecutionPolicy Undefined
Thanks.
Although as a person who doesn't know much about PowerShell and doesn't know much about computers, after unremitting efforts and your guidance, I finally succeeded as I wished
Not sure if this still works, It opens the game but the seed still is random
Not sure if this still works, It opens the game but the seed still is random
I believe it doesn't work with the newest version (January 18th 2024 patch), it also just opens the game, but the seed is random. Worked just fine previously.
Any chance of an update that works with the latest version? I'm not sure why it refuses to actually set the seed
Edit: I get no errors, it just launches with a random seed each time anyways.
Noita now has 10 digit seeds that are sometimes generated. Int is no longer a compatible data type for those. I had to change Int at line 46 to long for it to work.