rwparser is an android library for parsing and converting RenderWare dff and txd models of Grand Theft Auto.
Add this dependency to your module's build.gradle file:
dependencies { .. implementation 'com.github.Lime-blur:rwparser:latest_version' }Add it in your root build.gradle at the end of repositories (or in settings.gradle):
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { mavenCentral() maven { url 'https://jitpack.io' } } }In order to parse a .dff file, you simply need to create a ModelParser() object and call the appropriate method:
val modelParser = ModelParser() val parseResult = modelParser.putDffDumpIntoFile(inFilePath, outFilePath, /* optional */ true)For asynchronous parsing, you need to call the appropriate function and bind ModelParser to the component's lifecycle:
class MainActivity : AppCompatActivity() { private var modelParser: ModelParser? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) .. modelParser = ModelParser() } override fun onDestroy() { modelParser?.destroy() super.onDestroy() } private fun parse() { modelParser?.putDffDumpIntoFileAsync(inFilePath, outFilePath, /* optional */ true) { parseResult -> // Handling the callback } } }Same for .txd file:
val modelParser = ModelParser() val parseResult = modelParser.putTxdDumpIntoFile(inFilePath, outFilePath)For asynchronous .txd's parsing:
class MainActivity : AppCompatActivity() { private var modelParser: ModelParser? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) .. modelParser = ModelParser() } override fun onDestroy() { modelParser?.destroy() super.onDestroy() } private fun parse() { modelParser?.putTxdDumpIntoFileAsync(inFilePath, outFilePath) { parseResult -> // Handling the callback } } }The library can also convert .dff to .gltf format. To convert you need:
val modelParser = ModelParser() val parseResult = modelParser.convertDffToGltf(inDffFilePath, outFilePath, /* optional */ inTxdFilePath, /* optional */ viewType)For asynchronous .dff's converting:
class MainActivity : AppCompatActivity() { private var modelParser: ModelParser? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) .. modelParser = ModelParser() } override fun onDestroy() { modelParser?.destroy() super.onDestroy() } private fun convert() { modelParser?.convertDffToGltfAsync(dffFilePath, gltfFilePath, /* optional */ txdFilePath, /* optional */ viewType) { parseResult -> // Handling the callback } } }See the sample application, where an example of using the library is implemented: https://github.com/Lime-blur/rwparser/tree/main/sample
- rwtools: https://github.com/aap/rwtools
- dff_converter: https://github.com/SimoSbara/dff_converter