Hello everyone!
I have a Problem regarding .ddsx Files. I´m creating skins for the F2P Game War Thunder. Although the game has an built-in Feature to create Skin Templates for Planes and Tanks (supports .dds/png./tga/.jpg), but some of those templates are missing elements like Normalmaps, additional Textures, etc...
A Guy from the WT Community made a tool to open/extract the content for most of the game archives. Almost every image inside those are in .ddsx though my attempts at finding a solution how to convert them have failed so far.
I´ve attached an example file so i would be very grateful if smeone could help me out here
Important information: this site is currently scheduled to go offline indefinitely by end of the year.
War Thunder .ddsx image format
-
- ultra-n00b
- Posts: 5
- Joined: Fri Oct 31, 2014 5:29 pm
- Has thanked: 4 times
War Thunder .ddsx image format
You do not have the required permissions to view the files attached to this post.
-
- ultra-n00b
- Posts: 5
- Joined: Fri Oct 31, 2014 5:29 pm
- Has thanked: 4 times
Re: War Thunder .ddsx image format
Thank you
I found a topic on this forum which seems kinda related since this Game uses the same Engine: viewtopic.php?p=30696#p30696
I found a topic on this forum which seems kinda related since this Game uses the same Engine: viewtopic.php?p=30696#p30696
Could you tell me how to do this? I know I´m a total noob with Hex Editing and stuffthen I looked at the dds files in a hex editor and just pasted a valid dds header over it which was dxt5 and no mip maps.
-
- ultra-n00b
- Posts: 5
- Joined: Fri Oct 31, 2014 5:29 pm
- Has thanked: 4 times
-
- VIP member
- Posts: 1330
- Joined: Wed Nov 05, 2008 12:16 pm
- Has thanked: 2710 times
- Been thanked: 884 times
Re: War Thunder .ddsx image format
to do it through hex editing you would copy the header from another dds file and paste it at the beginning of your uncompressed headerless file.InnerCircle wrote:Could you tell me how to do this? I know I´m a total noob with Hex Editing and stuffthen I looked at the dds files in a hex editor and just pasted a valid dds header over it which was dxt5 and no mip maps.
Example DXT5 header with no mipmaps
Code: Select all
44 44 53 20 7C 00 00 00 07 10 08 00 C8 00 00 00
38 01 00 00 C0 F3 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00
04 00 00 00 44 58 54 35 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
You do not have the required permissions to view the files attached to this post.
Last edited by Acewell on Sat Dec 24, 2016 8:27 pm, edited 1 time in total.
-
- veteran
- Posts: 148
- Joined: Sun Apr 01, 2012 12:44 pm
- Has thanked: 51 times
- Been thanked: 102 times
Re: War Thunder .ddsx image format
I think what he means is how to unpack .ddsx textures - I've tried it myself, with QuickBMS and different variations of LZMA with different offsets, but none of them worked.AceWell wrote:To do it through hex editing you would copy the header from another dds file and paste it at the beginning of your uncompressed headerless file.
-snip-
If you don't want to mess with a hex editor you could open the uncompressed file in TextureFinder with correct settings and save it as *.bmp then convert it to *.dds.
-
- ultra-veteran
- Posts: 411
- Joined: Mon Oct 27, 2008 12:11 am
- Location: Slovakia
- Has thanked: 35 times
- Been thanked: 121 times
Re: War Thunder .ddsx image format
Code: Select all
# War Thunder
# DDSx to DDS converter
# by MerlinSVK Oct 2014
# version 1.0
# script for QuickBMS http://aluigi.org/papers.htm#quickbms
set MEMORY_FILE binary "\x44\x44\x53\x20\x7C\x00\x00\x00\x07\x10\x08\x00\xAA\xAA\xAA\xAA\xBB\xBB\xBB\xBB\xCC\xCC\xCC\xCC\x00\x00\x00\x00\x01\x00\x00\x00\x4D\x45\x52\x4C\x49\x4E\x3A\x29\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\xEE\xEE\xEE\xEE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
get NAME basename
string HNAME = NAME
string HNAME += ".head"
string NAME += ".dds"
log HNAME 0 0x20 # save header for backward conversion
idstring "DDSx"
getdstring FORMAT 4
if FORMAT == "DXT1"
math FORMAT = 0x31545844
else if FORMAT == "DXT3"
math FORMAT = 0x33545844
else if FORMAT == "DXT5"
math FORMAT = 0x35545844
else
print "-- UNSUPPORTED FORMAT --"
cleanexit
endif
get UNK byte
get UNK short
get UNK byte
get WIDTH short
get HEIGHT short
goto 0x18
get SIZE long
get ZSIZE asize
math ZSIZE -= 0x20
putVarChr MEMORY_FILE 0XC HEIGHT long
putVarChr MEMORY_FILE 0x10 WIDTH long
putVarChr MEMORY_FILE 0x14 SIZE long
putVarChr MEMORY_FILE 0x54 FORMAT long
append
comtype lzma_dynamic
clog MEMORY_FILE 0x20 ZSIZE SIZE
append
get DDSSIZE asize MEMORY_FILE
log NAME 0 DDSSIZE MEMORY_FILE
Code: Select all
# War Thunder
# DDS to DDSx converter
# by MerlinSVK Oct 2014
# version 1.0
# script for QuickBMS http://aluigi.org/papers.htm#quickbms
open FDDE DDS 0
open FDDE HEAD 1
get NAME basename
string NAME += ".ddsx_NEW"
get DSIZE asize 0
math DSIZE -= 0x80
get HSIZE asize 1
goto 0xC 0
get HEIGHT long 0
get WIDTH long 0
#get DSIZE long 0
goto 0x54 0
get FORMAT long 0
log MEMORY_FILE 0 HSIZE 1 # copy header into the memory_file
append
comtype lzma_compress
clog MEMORY_FILE 0x80 DSIZE DSIZE 0 # compress texture and append it to the header
append
get DSIZE asize MEMORY_FILE
math DSIZE -= 0x20 # substract size of header
# this part is useful when you changed resolution or format of the texture
# otherwise it can be deleted
putVarChr MEMORY_FILE 0x4 FORMAT long
putVarChr MEMORY_FILE 0xC WIDTH short
putVarChr MEMORY_FILE 0xE HEIGHT short
putVarChr MEMORY_FILE 0x18 DSIZE long
#
get DDSXSIZE asize MEMORY_FILE
log NAME 0 DDSXSIZE MEMORY_FILE
-
- ultra-n00b
- Posts: 5
- Joined: Fri Oct 31, 2014 5:29 pm
- Has thanked: 4 times
Re: War Thunder .ddsx image format
Wow that´s exactly what i needed! Thank you!merlinsvk wrote:I got also a repack script, but I did not tested repacked texture in the game, so it may not work.Code: Select all
# War Thunder # DDSx to DDS converter # by MerlinSVK Oct 2014 # version 1.0 # script for QuickBMS http://aluigi.org/papers.htm#quickbms set MEMORY_FILE binary "\x44\x44\x53\x20\x7C\x00\x00\x00\x07\x10\x08\x00\xAA\xAA\xAA\xAA\xBB\xBB\xBB\xBB\xCC\xCC\xCC\xCC\x00\x00\x00\x00\x01\x00\x00\x00\x4D\x45\x52\x4C\x49\x4E\x3A\x29\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\xEE\xEE\xEE\xEE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" get NAME basename string HNAME = NAME string HNAME += ".head" string NAME += ".dds" log HNAME 0 0x20 # save header for backward conversion idstring "DDSx" getdstring FORMAT 4 if FORMAT == "DXT1" math FORMAT = 0x31545844 else if FORMAT == "DXT3" math FORMAT = 0x33545844 else if FORMAT == "DXT5" math FORMAT = 0x35545844 else print "-- UNSUPPORTED FORMAT --" cleanexit endif get UNK byte get UNK short get UNK byte get WIDTH short get HEIGHT short goto 0x18 get SIZE long get ZSIZE asize math ZSIZE -= 0x20 putVarChr MEMORY_FILE 0XC HEIGHT long putVarChr MEMORY_FILE 0x10 WIDTH long putVarChr MEMORY_FILE 0x14 SIZE long putVarChr MEMORY_FILE 0x54 FORMAT long append comtype lzma_dynamic clog MEMORY_FILE 0x20 ZSIZE SIZE append get DDSSIZE asize MEMORY_FILE log NAME 0 DDSSIZE MEMORY_FILE
Code: Select all
# War Thunder # DDS to DDSx converter # by MerlinSVK Oct 2014 # version 1.0 # script for QuickBMS http://aluigi.org/papers.htm#quickbms open FDDE DDS 0 open FDDE HEAD 1 get NAME basename string NAME += ".ddsx_NEW" get DSIZE asize 0 math DSIZE -= 0x80 get HSIZE asize 1 goto 0xC 0 get HEIGHT long 0 get WIDTH long 0 #get DSIZE long 0 goto 0x54 0 get FORMAT long 0 log MEMORY_FILE 0 HSIZE 1 # copy header into the memory_file append comtype lzma_compress clog MEMORY_FILE 0x80 DSIZE DSIZE 0 # compress texture and append it to the header append get DSIZE asize MEMORY_FILE math DSIZE -= 0x20 # substract size of header # this part is useful when you changed resolution or format of the texture # otherwise it can be deleted putVarChr MEMORY_FILE 0x4 FORMAT long putVarChr MEMORY_FILE 0xC WIDTH short putVarChr MEMORY_FILE 0xE HEIGHT short putVarChr MEMORY_FILE 0x18 DSIZE long # get DDSXSIZE asize MEMORY_FILE log NAME 0 DDSXSIZE MEMORY_FILE