black_racer Posted April 4 Share Posted April 4 (edited) Spoiler Spoiler Screamer 4x4 (Pathfinder) Archive *.cod -data container Mesh data (cars, drivers, prizes) *.dat -mesh format (verticles.dat, faces.dat, norms.dat, fnorms.dat, mapcoord.dat, textures.dat) Maps data *.tre -terrain objects ??? *.height -max terrain height data ??? *.min -min terrain height data ??? *.rgb -terrain color data ??? *.spl -??? *.dat -??? Textures *.tga -standart TGA images format *.tex -texture format with Mip Maps data *.32 -UI textures format *.32a -UI textures format with alpha Sounds *.snd -sound Config *.cfg -standart ASCII format Hey guys, there's this great game called Screamer 4x4, and I'm looking for a way to read models from it. Here's an example of a car model; strangely, the vertices, normals, and other data are separated into different files: Screamer4x4car.zip How is it possible to read this model formats? UPD: QuickBMS *.cod Unpack Script: Screamer4x4.zip by h3x3r plugin for Noesis *.cod Unpack: fmt_cod.py by Durik256 plugin for Noesis *.dat Mesh: fmt_4x4.py by Durik256 plugin for Noesis *.height Map Data: mt_height.py by Durik256 plugin for Noesis *.tex; *.32; *.32a; *.map Texture Data: tex_tex_32a.py by Durik256 Edited April 6 by black_racer Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted April 4 Engineer Share Posted April 4 (edited) Hey, I have no idea what these repetitive blocks should mean. It's 5 and 6 vertices more or less in line, then the next 11 ones: # 0x2: verts= 1858 v 50.175781 -62.371094 -120.257813 v -12.082031 -62.500000 -120.257813 v 107.316406 -62.746094 -120.257813 v -17.449219 -63.000000 -120.257813 v -28.015625 -63.500000 -120.257813 v -12.988281 59.160156 -120.257813 v 14.417969 64.503906 -120.257813 v 3.808594 65.003906 -120.257813 v -127.796875 65.253906 -120.257813 v -1.433594 65.500000 -120.257813 v 60.824219 65.628906 -120.257813 edit: seems I had the wrong format (shorts instead of floats). Above vertices are simply WRONG. In fact they are like so: # 0x2: verts= 1858 v -20.149500 -4.579070 -16.799000 v -16.119101 -4.579070 -16.799000 v -12.088700 -4.579070 -16.799000 v -8.058240 -4.579070 -16.799000 v -4.027830 -4.579070 -16.799000 v 0.002593 -4.579070 -16.799000 v 4.033010 -4.579070 -16.799000 v 8.063430 -4.579070 -16.799000 v 12.093800 -4.579070 -16.799000 v 16.124300 -4.579070 -16.799000 v 20.154699 -4.579070 -16.799000 ... Edited April 5 by shak-otay Link to comment Share on other sites More sharing options...
black_racer Posted April 4 Author Share Posted April 4 Hi, I'm glad to see you. It's a pity that xentax is lost. Yeah, I couldn't figure it out either, so I came here for help. The game is old, and many aspects are implemented quite strangely. Link to comment Share on other sites More sharing options...
Karpati Posted April 4 Share Posted April 4 5 hours ago, black_racer said: Reveal hidden contents Hey guys, there's this great game called Screamer 4x4, and I'm looking for a way to read models from it. Here's an example of a car model; strangely, the vertices, normals, and other data are separated into different files: Screamer4x4car.zip How is it possible to read this model formats? Can you tell me how did you extract the files from the Game.cod file? Link to comment Share on other sites More sharing options...
Karpati Posted April 4 Share Posted April 4 My first try: Link to comment Share on other sites More sharing options...
Engineer Durik256 Posted April 4 Engineer Share Posted April 4 (edited) 10 hours ago, black_racer said: How is it possible to read this model formats? it's simple. first UShort as num. and then the data i made plugin for Noesis fmt_4x4.py (only face and vert) *(the names should be verticle.dat and faces.dat, just click on any *.dat in the folder) **(normals and uvs for each triangle. but according to the checker it does not look correct. no time for this)) Edited April 4 by Durik256 Link to comment Share on other sites More sharing options...
black_racer Posted April 5 Author Share Posted April 5 14 hours ago, Karpati said: Can you tell me how did you extract the files from the Game.cod file? Hello, I used this tool: http://www.watto.org/game_extractor.html I think it makes sense now to write a script for QuickBMS. Screamer 4x4 *.cod 21 - Header (->Unique Pc HUNGARY<-) 3 - null 4 - Directory Length // for each file 128 - Filename (null terminated, then filled with "." for the remaining bytes) 4 - Offset 4 - Length Link to comment Share on other sites More sharing options...
black_racer Posted April 5 Author Share Posted April 5 (edited) 11 hours ago, Durik256 said: it's simple. first UShort as num. and then the data i made plugin for Noesis fmt_4x4.py (only face and vert) *(the names should be verticle.dat and faces.dat, just click on any *.dat in the folder) **(normals and uvs for each triangle. but according to the checker it does not look correct. no time for this)) This is amazing! Thank you very much for your help. I still need to figure out the tracks data. I think they use heightmaps there. Textures Data: *.tex - with Mip Map data *.32a *.32 Edited April 5 by black_racer Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted April 5 Engineer Share Posted April 5 (edited) ##################################### # Scramer 4x4 - *.cod unpacker # ##################################### get BaseFileName basename getdstring Sign 0x18 get TableSize uint32 xmath Files "TableSize/136" for i = 0 < Files savepos StrBaseOffset get FileName string goto StrBaseOffset getdstring Dummy 0x80 get Offset uint32 get Size uint32 string Name p= "%s/%s" BaseFileName FileName log Name Offset Size next i Also it seems like game runs unpacked. No need to repack *.cod. Edited April 5 by h3x3r Link to comment Share on other sites More sharing options...
black_racer Posted April 5 Author Share Posted April 5 2 hours ago, h3x3r said: ##################################### # Scramer 4x4 - *.cod unpacker # ##################################### get BaseFileName basename getdstring Sign 0x18 get TableSize uint32 xmath Files "TableSize/136" for i = 0 < Files savepos StrBaseOffset get FileName string goto StrBaseOffset getdstring Dummy 0x80 get Offset uint32 get Size uint32 string Name p= "%s/%s" BaseFileName FileName log Name Offset Size next i Also it seems like game runs unpacked. No need to repack *.cod. Thanks, yes game running with unpacked data Link to comment Share on other sites More sharing options...
Engineer Durik256 Posted April 5 Engineer Share Posted April 5 (edited) plugin for Noesis, for unpack *.cod: fmt_cod.py plugin for Noesis, for3d_ models: fmt_4x4.py (vert, faces, uvs, norm) plugin for Noesis, for textures: tex_tex_32a_map.py Edited April 10 by Durik256 1 Link to comment Share on other sites More sharing options...
black_racer Posted April 5 Author Share Posted April 5 (edited) 30 minutes ago, Durik256 said: plugin for Noesis, for unpack *.cod fmt_cod.py Thank you very much. Could you please tell me if it's possible to make Noesis read a heightmap and apply a texture to it? The location format looks like this, it contains a heightmap, collision data, and mesh objects in a different format than the previously researched .dat format. *.height - height map data *.min - ??? *.rgb - texture map data? *.tre - Map mesh Format ? *.spl - ??? *.dat - Map object positions? ? Cuesta_Juno.zip Edited April 5 by black_racer Link to comment Share on other sites More sharing options...
Engineer Durik256 Posted April 5 Engineer Share Posted April 5 (edited) 2 hours ago, black_racer said: Thank you very much. ...*.height - height map data I didn't look at the other files. but from *.height (height map) you can make a plane by taking (width, length and height). fmt_height.py You can also find out a little about what these files are by looking at the .cfg, for example CatasTrophy.cfg: Dirname = Single/Cuesta_Juno ;Directory of the terrain DrawTree = draw.tre ;Terrain objects draw data PhyTree = phycoll.tre ;Terrain objects phy. data DrawTrophy = catastrophyD.tre ;Terrain Trophy objects draw data PhyTrophy = catastrophyP.tre ;Terrain Trophy objects phy. data spline = catastrophy.spl Config.cfg: ... Xsize = 256 ;X meret (egysegben) Ysize = 256 ;Z meret (egysegben) Multiply1 = 72.0 ;Szorzo (x & z) Multiply2 = 5.25 ;Szorzo2 (y) ... Edited April 5 by Durik256 Link to comment Share on other sites More sharing options...
black_racer Posted April 5 Author Share Posted April 5 1 hour ago, Durik256 said: I didn't look at the other files. but from *.height (height map) you can make a plane by taking (width, length and height). fmt_height.py You can also find out a little about what these files are by looking at the .cfg, for example CatasTrophy.cfg: Dirname = Single/Cuesta_Juno ;Directory of the terrain DrawTree = draw.tre ;Terrain objects draw data PhyTree = phycoll.tre ;Terrain objects phy. data DrawTrophy = catastrophyD.tre ;Terrain Trophy objects draw data PhyTrophy = catastrophyP.tre ;Terrain Trophy objects phy. data spline = catastrophy.spl Config.cfg: ... Xsize = 256 ;X meret (egysegben) Ysize = 256 ;Z meret (egysegben) Multiply1 = 72.0 ;Szorzo (x & z) Multiply2 = 5.25 ;Szorzo2 (y) ... Wow, this looks amazing! Did you just apply the texture *.rgb? I'm not quite sure how texture maps are applied to surfaces, but there are four textures for each map (txt/1.tex, 2.tex, 3.tex, 4.tex). Do you think there was support for UV0 / UV1 / UV2 / UV3 back then? .tre seems to differ from the cars format? Link to comment Share on other sites More sharing options...
Engineer Durik256 Posted April 8 Engineer Share Posted April 8 (edited) On 4/5/2024 at 6:32 PM, black_racer said: Wow, this looks amazing! Did you just apply the texture *.rgb? I'm not quite sure how texture maps are applied to surfaces, but there are four textures for each map (txt/1.tex, 2.tex, 3.tex, 4.tex). Do you think there was support for UV0 / UV1 / UV2 / UV3 back then? I think the textures are indicated (for each section) in the file "demo1.txt" Spoiler #by Durik256 from inc_noesis import * def registerNoesisTypes(): handle = noesis.register("Screamer 4x4", ".height") noesis.setHandlerTypeCheck(handle, CheckType) noesis.setHandlerLoadModel(handle, LoadModel) noesis.logPopup() return 1 def CheckType(data): return 1 def LoadModel(data, mdlList): ctx = rapi.rpgCreateContext() bs = NoeBitStream(data) w,h = 256, 256 txt_path = rapi.getInputName().replace('.height', '.txt') data = rapi.loadIntoByteArray(txt_path) bs0 = NoeBitStream(data) tx = [] for y in range(h): tx.append(bs0.read('%iB'%w)) vbuf, uvbuf = b'', b'' for y in range(h): for x in range(w): vbuf += NoeVec3([x,bs.readUByte()/16,y]).toBytes() uvbuf += NoeVec3([x,y,0]).toBytes() rapi.rpgBindPositionBuffer(vbuf, noesis.RPGEODATA_FLOAT, 12) rapi.rpgBindUV1Buffer(uvbuf, noesis.RPGEODATA_FLOAT, 12) ibuf = b'' for y in range(h-1): for x in range(w-1): rapi.rpgSetMaterial('tex_%i'%(tx[y][x]+1)) ibuf = noePack('4I', x+(y*w), (x+1)+(y*w), x+((y+1)*w), (x+1)+((y+1)*w)) rapi.rpgCommitTriangles(ibuf, noesis.RPGEODATA_UINT, len(ibuf)//4, noesis.RPGEO_QUAD) rapi.rpgOptimize() rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) try: mdl = rapi.rpgConstructModel() except: mdl = NoeModel() mdl.setModelMaterials(NoeModelMaterials([], [NoeMaterial('default','')])) mdlList.append(mdl) return 1 Edited April 8 by Durik256 Link to comment Share on other sites More sharing options...
Karpati Posted April 9 Share Posted April 9 (edited) I released the 3D Object Converter v10.603 (Windows) that supports the following file formats: - Screamer 4x4 (verticle.dat, mapcoord.dat, faces.dat, textures.dat) *.dat format for load, - Screamer 4x4 *.height/txt format for load, - Screamer 4x4 *.32a texture format for load, - Screamer 4x4 *.map texture format for load, - Screamer 4x4 *.rgb texture format for load. How to get the 3D Object Converter v10.603: - Download the 3D Object Converter from http://3doc.i3dconverter.com and install it or download and use the portable version (if you don’t have it yet). - Just use the Help/Check for updates... function to get the v10.603.) Edited April 9 by Karpati Link to comment Share on other sites More sharing options...
Engineer Durik256 Posted April 10 Engineer Share Posted April 10 (edited) On 4/4/2024 at 12:58 PM, black_racer said: plugin for Noesis *.dat Mesh: fmt_4x4.py by Durik256 Hi, i update plugin for (*.dat) fmt_4x4.py (Vertices, faces, UVs, Normals) 🙂 Edited April 10 by Durik256 Link to comment Share on other sites More sharing options...
black_racer Posted April 10 Author Share Posted April 10 Guys, thank you so much for this tremendous help. Could you please advise if you've noticed during the analysis where the information about the wheel bones is stored? In the game, a physical component is attached to them, animating the vehicle suspension. And the second question concerns reading objects on the map in a format *.tre they seem structurally similar or differ from vehicle *.dat format? Link to comment Share on other sites More sharing options...
black_racer Posted April 10 Author Share Posted April 10 2 hours ago, Durik256 said: Hi, i update plugin for (*.dat) fmt_4x4.py (Vertices, faces, UVs, Normals) 🙂 It seems the Noesis script has a problem... Link to comment Share on other sites More sharing options...
Engineer Durik256 Posted April 10 Engineer Share Posted April 10 (edited) 34 minutes ago, black_racer said: It seems the Noesis script has a problem... ?? all work for preview .spl fmt_spl.py *(*.tre they seem structurally similar or differ from vehicle *.dat format?) no, they differ Edited April 10 by Durik256 Link to comment Share on other sites More sharing options...
black_racer Posted April 10 Author Share Posted April 10 1 hour ago, Durik256 said: ?? all work for preview .spl fmt_spl.py *(*.tre they seem structurally similar or differ from vehicle *.dat format?) no, they differ I apologize, it seems there was a conflict with Python scripts in Noesis. I updated it, and now everything works fine. Thanks Link to comment Share on other sites More sharing options...
alin00 Posted April 18 Share Posted April 18 On 4/10/2024 at 8:04 PM, Durik256 said: ??所有工作 对于预览 .spl fmt_spl.py *(*.tre 它们在结构上似乎与车辆相似或不同 *.dat格式?不,它们不同 hey guy,sorry that bothering u.I've recently been unpacking a game called nishuihan, its models are very beautiful, I've tried to convert its .wad file to a .dat file, but I really don't know how to extract the models and skeletons from the .dat file, by looking at it with 010 editor I think that there are 3dmax models and skeleton files in it, can you please help me to look at it, thank you very much! 6.zip Link to comment Share on other sites More sharing options...
black_racer Posted April 19 Author Share Posted April 19 On 4/18/2024 at 9:25 AM, alin00 said: hey guy,sorry that bothering u.I've recently been unpacking a game called nishuihan, its models are very beautiful, I've tried to convert its .wad file to a .dat file, but I really don't know how to extract the models and skeletons from the .dat file, by looking at it with 010 editor I think that there are 3dmax models and skeleton files in it, can you please help me to look at it, thank you very much! 6.zip 24.38 MB · 5 downloads Hi, you need to create a new topic for your mesh format, that's the only way you can get help. This thread research only Screamer 4x4 game formats Link to comment Share on other sites More sharing options...
alin00 Posted April 20 Share Posted April 20 On 4/19/2024 at 6:34 PM, black_racer said: Hi, you need to create a new topic for your mesh format, that's the only way you can get help. This thread research only Screamer 4x4 game formats okay thanks Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now