Leaderboard
Popular Content
Showing content with the highest reputation since 06/26/2025 in all areas
-
I made a Noesis script to read all meshes from .RMD files but the meshes are in the center so we need the skeleton but I don't know how to do that, lol. I used the function "CreateTriList" from other PS2 script(made by leeao), it works fine. This function uses the last 4 bytes of vertices buffer as flag and pad: 12 bytes verts, 1 short flag, 1 short pad. Here is DBULL.RMD but like I said, we need the skeleton:2 points
-
Hi, it was brought to my attention that the Beta xbox version has additional outfits that the PC version does not have. The models are in a different format, namely .xgg - Which is slightly similar to the pc version. The ps2 version is also in a different format .pgg - However I won't be looking at this at the moment. I created a script for the character models, it probably won't work for terrain or objects. At this stage I am not going to expand on it further or create a new thread as it is the same game. XGG_convert.py2 points
-
edit: seems instead of experimenting I'd try to get TGE's RMD maxscript, maybe from xentax backup archives edit 2; found Amiticia, but exporting the clump creates no file The bones with parent ids: 0 *jtroot* -1 1 *jtbody* 0 2 *jtwaist* 1 3 *jtchest* 2 4 *jtrshoulder* 3 5 *jtrarm* 4 6 *jtrelbow* 5 7 *jtrwrist* 6 8 *jtrpalm* 7 9 *jtlshoulder* 3 10 *jtlarm* 9 11 *jtlelbow* 10 12 *jtlwrist* 11 13 *jtlpalm* 12 14 *jtneck* 3 15 *jtmouth* 14 16 *jtlip* 15 17 *jtlleg* 1 18 *jtlknee* 17 19 *jtlankle* 18 20 *jtltoe* 19 21 *jtrleg* 1 22 *jtrknee* 21 23 *jtrankle* 22 24 *jtrtoe* 23 floats from the matrices (undefined values replaced by 0.0 0.0 0.0): 0.0 0.0 0.0 jtroot 0.413449 -0.995091 0.495473 0.357034 -0.674350 0.553032 0.982738 -0.695039 0.691009 0.253196 -0.269279 0.291826 0.216968 -0.236668 0.236830 0.0 0.0 0.0 jtrelbow 0.032668 -0.201254 0.164289 0.0 0.0 0.0 jtrpalm 0.253197 -0.269279 0.291826 0.216968 -0.228647 0.236830 -0.044276 -0.264800 0.184460 -0.039168 -0.199243 0.158531 0.0 0.0 0.0 jtlpalm 0.722860 -0.408135 0.387143 0.038753 -0.180144 -0.108344 0.0 0.0 0.0 jelelbow 0.016553 -0.456171 0.428642 -0.045874 -0.276716 0.403431 0.037943 -0.777463 0.348391 0.0 0.0 0.0 jtmouth 0.016552 -0.456171 0.428642 0.0 0.0 0.0 jtlleg 0.037943 -0.777463 0.348391 0.0 0.0 0.0 jtlankle edit: uvs are a little bit weird, as usual:2 points
-
Those .PS2 files are textures, you can examine those with Console Texture Explorer. I found some info too like width and height, image data offset and palette offset. About .RMD files, these have a lot of submeshes but we need to find a way to collect all. I will try to check that later... Here is texture head0.PS2 from DCHAIR folder:2 points
-
Hi all! I've been reverse engineering this engine on and off for a while now (specifically the engine for Spy vs Spy 2005). I'm assuming there wasn't major changes over the years, here is some potentially useful info. Custom File Format The game is actually fully programmed in the custom files described above (the engine itself doesn't have any game logic). Custom files are all serialized the same way, which is a series of versioned nested nodes that define objects/fields (in the 2005 engine, there's ~400 object types). The first reference to an object initialized it. These objects are everything from entities, meshes, textures, etc. The raw data often matches a standard format for the console (for xbox: textures are mostly mipmaps of A8/DXT images and audio is ADPCM). To put this in context, here is what you might have to do to go get a texture (assuming the first instance is being referenced by the script that fires when the map loads): .map file -> FileObject - field: object -> MapObject - field: onMapStart -> ScriptNode - field: children -> SpawnActionNode - field: entity -> Entity - field: materials -> Material - field: texture -> Texture - field: color_buffer TL; DR, it's quite hard to reverse engineer the custom file formats without deep understanding of the engine. My Research I made a GitHub org that has all my work: https://github.com/vicious-rebirth Currently, all the repos are private because I'm trying to figure out the best way to release without getting a cease and desist (I think Little Orbit still owns the engine and there's some algos that are patented by MS). This said, I'll try to release my web tool on GitHub page for extracting assets (mileage will vary). I can give read access to anyone interested. Useful Videos Vicious Engine Demo (a good summary of the features from the devs) Vicious Engine Tutorial (a partial series of tutorials of how to use the engine - useful to understand the various types of objects) Extract Model (a preview of a model I extracted for proof)2 points
-
Railway Empire 2 translation tools and description. Railway Empire 2 Tools.zip2 points
-
2 points
-
I have made a Noesis script but it's basic. Just simple mesh export. No materials/ no bones/ no skin. Anyway this is mesh struct. Just basic. //------------------------------------------------ //--- 010 Editor v14.0 Binary Template // // File: // Authors: // Version: // Purpose: // Category: // File Mask: // ID Bytes: // History: //------------------------------------------------ LittleEndian();OutputPaneClear(); local uint32 i,j,k,l,TotalSize=FileSize(); string MeshName; uint32 Unknown_0; uint32 Unknown_1; float Unknown_2[27]; float Unknown_3[5]; uint32 TotalVertexCount; uint32 StrideType; if (StrideType == 19) { byte VertexBuffer[TotalVertexCount*24]; byte ColorBuffer[TotalVertexCount*4]; } else if (StrideType == 23) { byte VertexBuffer[TotalVertexCount*24]; byte UVBuffer[TotalVertexCount*8]; byte ColorBuffer[TotalVertexCount*4]; } uint32 TotalIndexCount; byte IndexBuffer[TotalIndexCount*6]; uint32 ShapeIndex; struct { string MaterialName; uint32 IndexCount; // *3 uint32 Unknown_0; uint32 VertexCount; uint32 Unknown_1; }ShapeInfo[ShapeIndex]<optimize=false>; FSeek(startof(VertexBuffer)); if (StrideType == 19) { struct { float VPosX,VPosY,VPosZ,VNPosX,VNPosY,VNPosZ; }Vertices[TotalVertexCount]<optimize=false>; } else if (StrideType == 23) { struct { float VPosX,VPosY,VPosZ,VNPosX,VNPosY,VNPosZ; }Vertices[TotalVertexCount]<optimize=false>; struct { float UVPosX,UVPosY; }UnitVector[TotalVertexCount]<optimize=false>; } FSeek(startof(IndexBuffer)); for (i=0; i < ShapeIndex; i++) { struct { uint16 F1,F2,F3; }Indices[ShapeInfo[i].IndexCount]<optimize=false>; }2 points
-
2 points
-
//------------------------------------------------ //--- 010 Editor v14.0 Binary Template // // File: // Authors: // Version: // Purpose: // Category: // File Mask: // ID Bytes: // History: //------------------------------------------------ LittleEndian();OutputPaneClear(); local uint32 i,j,k,l,InfoOffset=FileSize(); FSeek(InfoOffset - 20); uint32 CheckSum<format=hex>; // Must be updated after edit > 32 bit LE checksum uint32 TableOffset; // Must be updated after edit uint32 TotalFileSize; // Must be updated after edit uint32 Flag; uint32 Unknown; // Not sure what is for... FSeek(TableOffset); ubyte ResourceCount; struct { ubyte StrLen; char ResourcePath[StrLen]; uint32 ResourceOffset; // Must be updated after edit uint32 ResourceSize; // Must be updated after edit uint32 Null; }ResourceInfo[ResourceCount]<optimize=false>;2 points
-
2 points
-
Version 0.6
96 downloads
Work in progress, build 0.6 For instructions and support join reshax discord: https://reshax.com/topic/138-reshax-discord-server Currently, we must be able to replace any mesh in the game, including Aloy and other characters, robots, or environment parts. Also possible to replace most textures.2 points -
Whoa, I was not expecting that. It seems like they used squashed up low rez version of the game's DMAN (demon man) model as a placeholder for DCHAIR.RMD. As a quick point of reference: Even in this jubled state you can see all of the spikes protruding out of the model. From what I can tell, the .PS2 texture is based on an earlier rendition of the demon man enemy that used a more flat shading style. You can still see this version in the game's pre-rendered cutscenes. If it is of any help, I have attached the game's final DMAN model here as well. These are some pretty great discoveries. @shak-otay @roocker666 Thank you very much for giving it a shot. DMAN.zip1 point
-
1 point
-
I finished my Iron Engine (Ironsight) *.MESH loader module and I released the following programs: - 3D Object Converter v11.304 (Windows) - 3D Object Converter v1.304 (AmigaOS) - i3DConverter v6.304 (macOS) - i3DConverter v4.304 (Linux) How to get the 3D Object Converter (Windows) v11.304: 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). (Or just use the Help/Check for updates... function to get the v11.304.) How to get the 3D Object Converter (AmigaOS) v1.304: 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). (Or just use the Help/Check for updates... function to get the v1.304.) How to get the i3DConverter macOS v6.304: Download the i3DConverter from http://www.i3dconverter.com and install it (if you don’t have it yet). (Or just use the Help/Check for updates... function to get the v6.304.) How to get the i3DConverter Linux v4.304: Download the i3DConverter from http://www.i3dconverter.com and install it (if you don’t have it yet). (Or just use the Help/Check for updates... function to get the v4.304.)1 point
-
this could be a good idea.But, there must be ppl who are willing to fill the wiki up. I will think of something..1 point
-
on this, you cannot use this script with the latest release of uniloader from github, the API has changed since the IKV script has been written, only version works with it is 0.1.0, which is the one i have provided here and the one OP has shown in his screenshot In addition both the loader and the script have been designed for Blender 4.0+ so there might be issues if you use older versions1 point
-
Hi I need to find my extractor I have written it a while ago, meanwhile you can just use the resources in the google drive link I gave earlier1 point
-
I released the latest version (v11.304) now. Just use the Help/Check for updates... function to get it.1 point
-
1 point
-
1 point
-
Never played the game, there was one guy on a discord server that asked for help for this specific game and i decided to help him out Id like to once again credit REDxEYE for his blender addon1 point
-
UniLoader.zip it was just a matter of unzipping the file renaming the folder within to "UniLoader" and zipping it. Now to install the addon you must compress that .py file in order to be installed1 point
-
1 point
-
Joschka from former Xentax? Great to see he's still active. Somewhere. I'm not too familiar with Noesis details. But since it's a very short script it should be doable. I'd insert a print line like so to get the addresses of the bone matrices. bs.readBytes(0x40) print(i, "addr mat", hex(bs.tell())) Basically it's 92 bones (or "joints") with their matrices (rotation and position). You'll need to handle a "matrix 4x4 to a matrix 4x3 transformation" including inversion. From Noesis you could export the skeleton to .smd to see the bones' structure (last number in line is parenting bone id, first bone has no parent, thus -1) : nodes 0 "joint_0" -1 1 "joint_1" 0 2 "joint_2" 1 ... edit: I strongly recommend to start with the positions only and care for the rotations in a second step.1 point
-
1 point
-
1 point
-
hello, I did the analysis and noticed that the data is separated by !CMP . after it you have 4 bytes of some kind and the rest is data. all start with 78 9C which is the zlib header. which means that the files are compressed. I wrote a code that unpacks all the data to .dat files, after digesting one of the files in hex, I saw the DDS file header. I changed .dat to .dds and the file works. you can see the texture. Currently, that's all I managed to do, I will investigate further to preserve the names and extensions of the files. Link to my github repo with the code to unpack the files. (python) https://github.com/zbirow/Monster-Jam-Unpack1 point
-
Nah no improvements so far and don't think there will be any... from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Richard Burns Rally - Geometry", ".mesh") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadModel(handle, noepyLoadModel) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data) if len(data) < 20: return 0 return 1 def noepyLoadModel(data, mdlList): bs = NoeBitStream(data) baseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) ctx = rapi.rpgCreateContext() Underline = "_" MeshName = bs.readString() Unknown_0 = bs.readUInt() Unknown_1 = bs.readUInt() bs.read(128) TotalVertexCount = bs.readUInt() StrideType = bs.readUInt() if StrideType == 19: VertexBuffer = bs.read(TotalVertexCount * 24) ColorBuffer = bs.read(TotalVertexCount * 4) elif StrideType == 23: VertexBuffer = bs.read(TotalVertexCount * 24) UnitVectorBuffer = bs.read(TotalVertexCount * 8) ColorBuffer = bs.read(TotalVertexCount * 4) TotalIndexCount = bs.readUInt() IndexBufferBaseOffset = bs.tell() bs.read(TotalIndexCount * 6) if StrideType == 19: rapi.rpgBindPositionBufferOfs(VertexBuffer, noesis.RPGEODATA_FLOAT, 24, 0) rapi.rpgBindNormalBufferOfs(VertexBuffer, noesis.RPGEODATA_FLOAT, 24, 12) elif StrideType == 23: rapi.rpgBindPositionBufferOfs(VertexBuffer, noesis.RPGEODATA_FLOAT, 24, 0) rapi.rpgBindNormalBufferOfs(VertexBuffer, noesis.RPGEODATA_FLOAT, 24, 12) rapi.rpgBindUV1BufferOfs(UnitVectorBuffer, noesis.RPGEODATA_FLOAT, 8, 0) ShapeIndex = bs.readUInt() IndexCountList = [] MaterialNameList = [] for i in range(0, ShapeIndex): MaterialNameList.append(bs.readString()) IndexCountList.append(bs.readUInt()*3) Unknown_0 = bs.readUInt() VertexCount = bs.readUInt() Unknown_1 = bs.readUInt() bs.seek(IndexBufferBaseOffset, NOESEEK_ABS) for i in range(0, ShapeIndex): IndexCount = IndexCountList[i] MaterialName = MaterialNameList[i] IndexBuffer = bs.read(IndexCount * 2) ShapeIdDigfmt = "{:04d}".format(i) rapi.rpgSetName(MeshName + Underline + ShapeIdDigfmt) #rapi.rpgSetMaterial(MaterialName) rapi.rpgCommitTriangles(IndexBuffer, noesis.RPGEODATA_USHORT, IndexCount, noesis.RPGEO_TRIANGLE) mdl = rapi.rpgConstructModel() mdlList.append(mdl) return 1 You can try on your own 😉1 point
-
1 point
-
1 point
-
This game file can be written to handle the two types of your game If I guessed correctly, it should be the same as some games, and the installation package and hot update use different structures and methods Currently I have a hot update file example provided by SmurF. I have created a python script before, and now I have updated this python script again, which can handle the hot update file of this game Also @SmurF You have been saying that python scripts cannot be used, now aluigi has created a bms script for this game This bms script handles the same file as the python script I provided All are only processed with hot update files This is why the example provided by GoodbayKOD cannot be processed using this script 1. He used the installation package resource (different from the hot update structure). 2. It's not dealing with the same game I've checked the mpkinfo file uploaded by GoodbayKOD, the file structure is very simple The offset, size, and file location are all present, except that the file name is encrypted, but this has no effect. The reason why I did not make the script is that I do not have the complete mpk file, and I cannot verify whether it is correct. blood_strike_mpk.zip1 point
-
1 point
-
1 point
-
Wasn't able to donate much at all, but something is better than nothing! I hope you guys keep holding on, you have a truly indispensable skillset here.1 point
-
Char mesh format looks simple. For the skeleton you could try use Durik's skelfinder, read two posts here.1 point
-
Dunno. If I had known the cars have already been reversed I'd checked the character SGS instead.1 point
-
Low poly models usually don't raise that big interest but the mesh format shouldn't be a big obstacle, or should it? edit: didn't know whether triangle strips is the best choice here. Saved with normal triangles, drag&dropped it onto Noesis, F4 for backface culling, doesn't look much worse, imho. But after reviewing I'd suggest using strips.1 point
-
You can download it online. You can use shadps4-win64-qt-0.7.0 to unpack PKG files. Or use fake pkg to unpack pkg files. With PS4, you need the sys_modules folder you need to run shadps4.1 point
-
Hello, I've got some examples of some game engine files from the proprietary game engine used to make the BIT.TRIP games, a series Wiiware games made in the early 2010's. Almost all files contained in the attached file have file types that start with ".ae", followed up by a couple extra letters for each file type. There seem to be three notable exceptions to this. Firstly, all sound files are stored as .OGG's, and can be opened normally. These files contain everything from sound effects, cutscene audio, and the soundtracks used in game. Another file type that breaks the ".ae" convention are the .collision files. One of these files exist for each level, and each one varies greatly in size. Despite the odd file type, the contents can be viewed normally through a basic text editor. Each file contains a series of decimal values, each one being separated by a comma. An observation that gives insight as to what these files do is that levels 1 and 2, 3 and 4, and 5 and 6 each have similar sized .collision files (i.e, levels 1 and 2 have collision file sizes of 22KB and 18KB, whereas levels 3 and 4 have collision file sizes of 9KB and 4KB). Each pair of levels share a similar theme, and each theme has varying levels of obstacles that cannot be fired through. Levels 3 and 4 both lack obstacles for the most part, whereas the other four levels all have numerous obstacles throughout. Therefore, it's likely that these decimal values each map to the hitbox of the obstacles placed throughout the levels. the final deviation from convention is the .vs folder under the FATE/Hell/Layouts file path. this contains various json files along with other file types that I haven't seen before (what on earth is the file at the bottom of the FATE/Hell/Layouts/.vs/Layouts/FileContentIndex?) The remainder of these file types, as stated prior, are files made by the proprietary game engine used to make this game. Viewing and modifying these files are restricted to bitwise modifications via hex editors, and are much harder to modify without breaking things. That being said, the names of each .ae file betray their probable purposes. .aetex files store 2D texture information. most of these files are under the "Textures2D" folder. .aescn files store a variety of 2D and 3D objects. these files are stored throughout the whole game. These are used for the cutscenes, level backgrounds, player 2D models and animations, and all of the 3D models in the game. .aemenu files store information about the game menus, including those that display the final score for a level, the level select menu, and the startup menu. Interestingly, the GAME OVER screen is stored as an .aescn file, and not an .aemenu file, which explains how the player isn't booted back to the menu upon defeat in game, but instead is sent back to the start of the level. the .aeefx file type only appears one time under the Effects directory. the file "General.aeefx" doesn't have any obvious hints as to what it might contain (beyond the obvious "it contains game effects" observation). An interesting thing to notice is that the games files are split between two directories, a "General" directory and a directory called "Hell". The BIT.TRIP series released six games on wii ware, each of them having multiple instances of shared assets throughout. the "General" directory contains those reused assets, whereas "Hell" contains the assets from this particular BIT.TRIP title. Underneath the "General" directory is another file type labeled as .aeshader, which contains (you guessed it) shaders. Though these files are stored under the "Shaders" directory, the names attached to the .aeshader files makes it difficult to gauge what each file governs exactly. Lastly, the fonts used for this game are stored in .aefnt files. three of these files exist, with the difference between the three being unclear. I've attached some examples of the game engine files for those that wanna mess around with them, have fun and make friends! AtrophyGameEngineFileTypes.zip1 point
-
I don't think so. cityman1 is just clumped and the parts need their offsets being applied. Maybe later.1 point
-
Hi. These files are INK (or Inkle) format files from inklestudio. You can check them out here if you're interested: https://www.inklestudios.com/ink/ These files are the json equivalents of the original ink files. (Unfortunately, inklestudio cannot convert them back to the original ink files!) They are sometimes used in Unity games. As always, these files are located in the assets or bundle file. You can extract them with UABEAvalona or Next. (You've already gotten this far 🙂 ) I recommend always using the plugin and saving to json, and if you use dump, extract the file to json as well. I have created a custom ink-json converter that makes the file a little more transparent and editable. Usage: - Export the files with UABEAvalonia using the plugin or dump json. - Place the included python files next to the exported files and run the Export.py file. (It also handles files in subfolders!) - Edit the NEW_INK_ blah blah blah.txt files as you see fit. (Be very careful not to damage the file structure! - Machine translation requires additional regex (e.g. MemoQ), or in the case of AI, appropriate prompts and double-checking! - Import.py - Delete Temp.py (This removes the NEW_INK txt files) - Import the files back into the assets\bundle folder using plugin or dump json import. I originally created and used this for another game (House Flipper 2), but it should work here as well. Ink Converter Tool donwload: Ink Converter Tool (by NooB).zip1 point
-
1 point
-
1 point
-
1 point
-
Some stuff for Insomniac game engine - https://github.com/team-waldo1 point
-
Yes, these files contain models, textures, sounds etc... I am currently creating tools for Torus Games game files. So far I have managed to create a tool for textures. I am working on 3d models now, but it is quite complicated, idk when I will manage to do it. (.dat files have the same structure as hnk files) Repo with my program: https://github.com/zbirow/Hunkfile-Viewer screenshots of opening your files in my tool:1 point
-
Version 0.0.2
10 downloads
An addon for Blender 4.3.0 (also tested with 4.4.3) to import and export the .msh, .bn (.bbx goes together) and .ani files for RF Online. The entity (R3E) and map (BSP) formats are import only. Import operations work with drag and drop. There is code for exporting the BSP format inside the addon code but it is deactivated due to being incomplete. It only reaches so far as actually exporting walkable map geometry (with the BSP structure also built) and baking+exporting the light maps. Unfortunately, Blender proved to not be very suitable for the task of actually being a complete map editor for RF Online, mostly due to complexity issues with the .SPT particle format and other desirable features that would be hard to implement into it, such as mob spawn areas and portals. The R3M materials are also quite hard to simulate, since the original engine rendered the same mesh multiple times for each texture layer they had. It is possible to reactivate the feature by manually uncommenting the three commented lines in the bsp.py's menu_func_export, register and unregister functions. Expect no support for this feature, as the more proper solution would be writing a proper dedicated software. Current Features: MSH (Mesh) Import: Imports .msh static meshes (Standard and MESH08 formats). Automatically attempts to find and assign textures by looking for DDS files referenced in the mesh or by searching .RFS archives in expected relative paths (../Tex/). MSH (Mesh) Export: Exports selected Blender mesh(es) to .msh format (Standard or MESH08). Handles vertex data, UVs, weights, and bone assignments. The export ignores any collection with the name "bone shapes". BN (Skeleton) Import: Imports .bn skeleton files. Reads bone hierarchy and rest poses. Automatically looks for the corresponding .bbx file (must be same name, same folder) to get the proper skeleton name. Creates Blender Armature objects. Also imports custom bone shape geometry if defined in the BN file and creates mesh objects for them, assigning them as custom shapes in Blender. BN (Skeleton) Export: Exports a selected Blender Armature to .bn format. Calculates and exports the corresponding .bbx file with skeleton name and bounding box. Exports custom bone shape geometry if assigned. ANI (Animation) Import: Imports .ani animation files. Applies animations to compatible Armatures and/or Objects based on names found in the ANI file. Creates Blender Actions. Option to target selected objects or objects within a collection matching the ANI's base name. ANI (Animation) Export: Exports Blender Actions to .ani format. Bakes complex animations (constraints, drivers, NLA) before export. Options to export the active action, actions from selected objects, actions from the active collection, or all scene actions. BSP (Map) Import: Imports .bsp map geometry. Reads associated .r3m (materials), .r3t (textures), and .ebp (entities, collision) files (must be same base name, same folder). Locates entity assets by parsing .rpk archives found in ../Entity/ relative to the BSP's directory. Instantiates map geometry, materials (replicating many R3M effects), and R3E entities. Includes an option to import and display LDR lightmaps from Lgt.r3t files. There is also an option for creating a visualization of the actual BSP structure of the map by creating boxes with the nodes' dimensions and leaves with the appropriate geometry, however this will most certainly make the Blender scene run very slow (this option is not necessary to see the actual map at all if that's what you want). R3E (Entity) Import: Imports .r3e files together with their associated .r3m and .r3t files. Also imports animations, if present. Installation: Download the repository as a .zip file. Or simply download the embed file here. In Blender, go to Edit > Preferences > Add-ons. Click Install... and select the downloaded .zip file. Enable the "RF Online importer/exporter" addon by checking the box next to it. Dependencies (only necessary if you want to manually try the BSP export option) DDS Export (.bsp): Exporting BSPs requires ImageMagick to be installed and accessible in your system's PATH. The addon uses it to convert textures to DDS format. Download from: https://imagemagick.org/script/download.php Important: During installation, ensure you check the option to "Install legacy utilities (e.g., convert)" as the addon uses the magick convert command. How to Use: Import: Find the RF Online importers under File > Import > ... (MSH, BN Skeleton, ANI, BSP, R3E). Export: Find the RF Online exporters under File > Export > ... (MSH, BN Skeleton, ANI). Operator Options: Each operator has options. Pay attention to options like: MSH Export: Mesh Format to Export (Standard/MESH08), Collection Type to Export. ANI Import: Apply to Selected Objects, Ignore Not Found Objects. ANI Export: Action(s) to Export. BN Export: Export only selected. Debug options are available for troubleshooting. If turned on, open Blender's console to see the messages. Expected File Structure & Naming Conventions The addon relies on specific file names and relative folder locations to find associated assets: BSP Import (map.bsp): Needs map.r3m, map.r3t, mapLgt.r3t (optional), map.ebp in the same folder. Needs entity RPK archives (e.g., entity.rpk, monster.rpk) located in ../Entity/ relative to the map.bsp folder. The addon parses these RPKs to find the .r3e, .r3m, .r3t, etc., files for map entities. MSH Import (mesh.msh): Will look for texture paths defined within the MSH. If not found directly, it attempts to find textures in .rfs archives located in ../Tex/ relative to the .msh file's folder. BN Import (skeleton.bn): Needs skeleton.bbx in the same folder to read the proper skeleton name and overall bounding box. Export Naming:MSH Export: Selected Objects: Uses the filename you provide in the export dialog (e.g., my_export.msh). Active Collection / All Collections: Uses the collection name as the base filename in the selected directory (e.g., exporting a collection named "Props" to D:/Exports/ results in D:/Exports/Props.msh). Any collection named "bone shapes" is ignored and not exported when present. This is done to prevent the exportation of bone shapes as new .msh files. BN Export: Similar to MSH Export (uses selected armature name or collection name). Writes both .bn and .bbx files (e.g., skeleton.bn, skeleton.bbx). ANI Export: Uses the Blender Action name as the filename in the selected directory (e.g., an action named "Walk_Cycle" exports as Walk_Cycle.ani). Current Limitations / Disclaimer: BSP Export is DISABLED: While the addon includes the code for that, the operator to export a full .bsp map (including geometry, materials, entities, and baked lightmaps) is currently disabled in this release. BSP export is extremely complex, and this feature is incomplete. Performance: Importing very large maps or exporting complex scenes may take time due to Python processing. You can see the importing progress if you've opened Blender's console before importing a map. R3M Effects: While many material effects are replicated using shader nodes, perfect 1:1 visual parity with the original D3D8 fixed-function pipeline can be challenging. MSH exporter does not export effects currently. Download Link: https://github.com/Cardboard-box-a/cbb-rf-online-addon (download the repo as a zip), or the file embed here. Bug Reports/Suggestions: [The github's Issue page might be more suitable for keeping tracking of possible issues] Overall the import part of the addon expects that you are using it to import files from a real game client, with the original folder structure. Meshes, for example, can be imported without their associated textures if the original folder structure is not present. The .MSH exporter splits meshes that have more than 65k vertices automatically which has been tested by the .msh importer itself, but actual experience in the game is welcome to be known. Uploaded in this post itself is a zip containing ImHex patterns for some of the file formats I've worked on. Hopefully this addon will prove useful for creating custom content for such an old game, or at least to satisfy the curiosity of what the game looks like behind the curtains. Patterns.zip1 point -
1 point
ResHax.com: Empowering Curious Minds in the World of Reverse Engineering
Delving into the Art of Code Unraveling: ResHax.com - Your Gateway to the Thrilling World of Reverse Engineering, Where Curiosity Meets Innovation!