Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # http://softcircuitry.blogspot.co.uk/2016/12/empyrion-galactic-survival-blueprint.html
- # If you see an error:
- # .\Toggle-Blueprint.ps1 : File Toggle-Blueprint.ps1 cannot be loaded. The
- # file Toggle-Blueprint.ps1 is not digitally signed. You cannot run this
- # script on the current system. For more information about running scripts and setting execution policy, see
- # about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
- # Then open powershell using RunAs Administrator, and type in
- # PS:\> set-executionpolicy Bypass
- #
- # Converts a CV to a BA blueprint or back (or HV to a SV)
- # Optionally provide the name of a blueprint (without the file extension)
- # Will not overwrite an existing BP
- # Help:
- [cmdletbinding()]
- Param($inputFile="", $outputFile="", [switch]$flatten)
- Set-strictmode -version 2
- $erroractionpreference = 'stop'
- $basePath = @(ls 'C:\Program Files (x86)\Steam\steamapps\common\Empyrion - Galactic Survival\Saves\Blueprints' -recurse -include 'Workshop.data')[0] | split-path -parent
- if ([string]::Isnullorempty($inputFile)) {
- $list = ls $basePath -exclude 'workshop.data'
- [int]$i=0
- foreach ($file in $list) {
- $fname = join-path $file.fullname ($file.name + '.epb')
- write-host "$i $($file.name) [$((get-item $fname).length)]" -foregroundcolor cyan
- $i+=1
- }
- $inputfile = $list[ (Read-host "choice?") ].name
- }
- if ([string]::Isnullorempty($outputFile)) {
- $outputFile = $inputfile +'(1)'
- }
- Write-host "Loading: $inputfile"
- $fname = join-path (join-path $basepath $inputfile) ($inputfile + '.epb')
- $bytes = [System.IO.File]::ReadAllBytes($fname)
- # read some basic stats
- $newClass = 0
- $entityClass = switch ($bytes[8]) { # (0x02 = BA, 0x04 = SV, 0x08 = CV, 0x10 = HV)
- 16 {$msg = 'HV to SV?'; 'HV'; $newClass=4}
- 4 {$msg = 'SV to HV?'; 'SV'; $newClass=16}
- 8 {$msg = 'CV to BA?'; 'CV'; $newClass=2}
- 2 {$msg = 'BA to CV?'; 'BA'; $newClass=8}
- default {'unknown'}
- }
- $entityWidth = [bitconverter]::ToInt16( $Bytes,9)
- $entityHeight = [bitconverter]::ToInt16( $Bytes,13)
- $entityDepth = [bitconverter]::ToInt16( $Bytes,17)
- $terrainFlag = $bytes[33];
- 0..40 | %{write-verbose "$_ $($bytes[$_])"}
- write-host "type [Width, Height, Depth] Flatten"
- write-host "$entityclass [ $entityWidth, $entityHeight, $entityDepth] $terrainFlag"
- if (($flatten) -and ($entityClass -eq 'BA')) {
- # todo make it a toggle
- $msg = "Flatten Terrain? ($terrainFlag)"
- write-warning "The flatten terrain option does not always work, test it a few times before sharing the results"
- } else {
- $msg = "Convert " + $msg
- }
- $ans = Read-Host $msg
- if (('Y' -eq $ans.ToUpper()) -and (($newClass) -or ($flatten))) {
- if ('Y' -eq (Read-Host "Are you sure?").ToUpper()) {
- if (($flatten) -and ($entityClass -eq 'BA')) {
- # todo make it a toggle
- $bytes[4] = 1
- $bytes[33] = 1
- } else {
- $bytes[8] = $newClass
- }
- $newProjectName = $outputFile
- mkdir (join-path $basePath $newProjectName) | out-null
- $newProjectPath = join-path (join-path $basePath $newProjectName) ($newProjectName + '.epb')
- write-host "Saving $newProjectPath ..."
- [io.file]::WriteAllBytes($newProjectPath, $bytes)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement