Parses RenderWare DFF and TXD files into usable format!
None yet, but feel free to contact us, if you're using the parser in your projects. According to our testings, this parser was successfully used to display GTA: SA models in a web browser without much hassle.
- Install rw-parser using
npm install --save rw-parser
- Import it either by using plain require:
or ES6 syntax:
const { DffParser } = require('rw-parser'); // or const DffParser = require('rw-parser').DffParser;
import { DffParser } from 'rw-parser';
The beauty of this is you can use it within browser or as a backend with Node.js!
Documentation is not done yet but feel free to ask questions in discussions.
You can parse a DFF and TXD object with the following code:
import { DffParser, TxdParser } from 'rw-parser';
// All types are now exported in index
import type { RwDff, RwTxd } from 'rw-parser';
import { Buffer } from 'buffer';
import { readFileSync } from 'fs';
// Assuming top-level await is supported
// Can be used with browser as well
const resourceUri = 'http://localhost:5321/assets/infernus.dff';
const dffResource = (await fetch(resourceUri)).arrayBuffer();
// Pass Buffer here. If you are developing browser application, use
// a browser shim, like: https://github.com/feross/buffer
const dffParser = new DffParser(Buffer.from(dffResource));
// TXD parsing is practically same, this example just shows
// how to parse via local filesystem in Node
const txdResource = readFileSync('./assets/infernus.txd');
const txdParser = new TxdParser(txdResource);
// Parse TXD and DFF, which will return parsed structure
const txd: RwTxd = txdParser.parse();
const dff: RwDff = dffParser.parse();
- Clone the repository or download the source code here
- Install dependencies using
npm install
- Compile TypeScript source files using
npm run build
- Run tests with
npm run tests
or tinker with the code a bit, CLI tool is coming soon as well
Optionally, you may set up a task that watches for file changes: npm run dev
or tsc -p tsconfig.json --watch
.
Please note that this project is still under heavy development. Changes to output structure may happen, so be careful using it in production environment! If you have any questions or problems, feel free to open a discussion.