Skip to content

Instantly share code, notes, and snippets.

@0x4E69676874466F78
Last active August 29, 2015 14:03
Show Gist options
  • Save 0x4E69676874466F78/8d911c664b73820226ad to your computer and use it in GitHub Desktop.
Save 0x4E69676874466F78/8d911c664b73820226ad to your computer and use it in GitHub Desktop.
DP XPC2 patcher (not multitexture packing)
#include <FileConstants.au3>
#include <Array.au3>
#include <WinAPIShPath.au3>
#include <String.au3>
Global $sCMD = _WinAPI_CommandLineToArgv($CmdLineRaw)
$tAppName = 'XPC2 патчер'
$tAppVer = ' в'
$sAppNameOnly = $tAppName
$sAppVer = "0.1"
$sAppName = $sAppNameOnly & $tAppVer & $sAppVer
;Отладка
Func _M($x)
Return MsgBox(0, $sAppName & ": " & "Проверка", $x)
EndFunc;==>_M
$bNotAutoitAU3 = 1
$bNotAutoitDebug = 1
$sCMD_title = @ScriptDir & "\" & @ScriptName
If Not ($sCMD[0] = 0) Then
If ($sCMD[1] = $sCMD_title) Then $bNotAutoitAU3 = 0 ; если запуск через autoit3
If ($sCMD[1] = "/ErrorStdOut") Then $bNotAutoitDebug = 0 ; пока так
EndIf
If $bNotAutoitAU3 AND $bNotAutoitDebug Then
If ($sCMD[0] >= 1) Then
_Patch($sCMD[1])
EndIf
EndIf
;_ArrayDisplay($sCMD)
Func _Patch($x)
$sNameExt = $x
$sExt = StringMid($sNameExt,StringInStr($sNameExt, ".", 0, -1))
$sName = StringReplace($sNameExt, $sExt, "")
$hXPCfile = FileOpen($sName & ".XPC", 1 + 16)
FileSetPos($hXPCfile, 0x0050, 0) ; переходим к смещению где адрес до данных
$dHeaderSize = Int(FileRead($hXPCfile, 4)) ; читаем смещение до данных
FileSetPos($hXPCfile, 0, 0) ; переходим в начало
$bHeaderData = FileRead($hXPCfile,$dHeaderSize) ; считываем заголовок
FileClose($hXPCfile)
$hDDSZFile = FileOpen($sName & ".DDS.z", 1 + 16)
FileSetPos($hDDSZFile, 0, 0)
$bDDSZFileData = FileRead($hDDSZFile)
FileClose($hDDSZFile)
$dDDSZfileSize = BinaryLen($bDDSZFileData)
$dTotalNewFileSize = $dHeaderSize + $dDDSZfileSize
$nHeaderSize = Hex(BitRotate(Binary("0x" & Hex($dTotalNewFileSize)),0))
$nDDSZfileSize = Hex(BitRotate(Binary("0x" & Hex($dDDSZfileSize)),0))
$nXPCfile = FileOpen($sName & ".XPC", 2 + 16)
FileWrite($nXPCfile, $bHeaderData + $bDDSZFileData)
FileSetPos($nXPCfile, 0x0004, 0)
FileWrite($nXPCfile, Binary("0x" & $nHeaderSize))
FileSetPos($nXPCfile, 0x0054, 0)
FileWrite($nXPCfile, Binary("0x" & $nDDSZfileSize))
FileClose($nXPCfile)
EndFunc
;_ArrayDisplay($mCMD_all)
; когда-нибудь прикрутить zlib чтение в поток на лету, без костылей с zlibc.exe и лишних скриптов
; многотекстурные пакеты (сейчас поддерживается только однотекстурные)
; добавить сообщения в консоль и более умное поведение
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment