Documentation, and Downloads
ROMulan is a tool designed to automate the process of extracting data from program files for manipulation by an external utility and then re-integrating the modified data in a useful way even if its new size requires it to be relocated. Its primary use is to allow for the editing of video game data outside of the program that uses it. With properly-created scripts, the modified data can be re-inserted into the original program even if it has grown larger than the area it used to occupy, and any pointers to the data will be automatically updated to reflect its new location.
It's target-platform-independent, meaning that it can be used in the process of modifying programs for any system (game console, PC, etc)
Full documentation for usage and script file formats is included with the download package and is also available on this site via the previous link.
Have you created a new script for a new project, or enhanced one of the existing script sets? Feel free to post it on the forum!
The power of ROMulan is within the script files that drive its two basic functions:
Use "Batch Files" to instruct ROMulan to perform a series of tasks
Extract portions of data from one program/data file into its own individual file, optionally switching its endianness in the process
File Copy With/Without Endian Switch:
Duplicate an entire file from a specified source location to a specified destination location, optionally switching its endianness in the process
Call on external programs to perform data conversions or other tasks during a Batch process
Load multiple "Injector Files" for use in a single injection process to use multiple scripts that are separated by data type or author and still prevent injection conflicts
Progress Messages and Process Pause:
Print status messages to the console during the process to keep the user updated, and optionally pause the process to wait for user keypress
User File/Path Names Prompting:
Optionally prompt the user to select File and Path names for use during the process
Use "Injector Files" to automatically place modified data back into its original program/data file regardless of its size, keeping pointers up-to-date when the data must be moved from its original location
Read data to be injected from the specified file using the "include" directive, optionally switching its endianness in the process
Inline Data/Pointer Declaration With/Without Math:
Define data to be injected in-script as BYTE, WORD, DWORD, or STRING. These values may be any normal data, references to labels marking "included" data files or other inline data, or even code in the form of pre-"assembled" machine language, and may be calculated at injection time through the use of linear (no order-of-operations) math expressions
Segments, Data Relocation, and Endianness:
Use "Segments" to group data together for placement. All data within a Segment is placed together, but each Segment is placed individually, and can be relocated automatically, or given a specific location at which to be placed within the target file. Each Segment may also be individually given an endianness setting to specify the treatment of inline data directives
Labels and Data Location Calculation:
Use Labels to mark the location of any data or "Segments", for use in the creation of reference pointers through inline data directives, and optional linear (no order-of-operations) math expressions
Disposable File Area Declaration:
Use "Dispose" directives to instruct ROMulan on which areas of the file can be safely overwritten, so that it can attempt to avoid increasing the file's overall size when injecting modified data that can be moved
Logical Address Translation:
Use "Translate" directives to instruct ROMulan to treat certain physical file address ranges as other logical address ranges during the calculation of labels when the target platform addresses the file differently, or when "bankswitching" is used
String Substitution by "Defines":
Use "Define" directives to allow one short/descriptive string to represent another string or series of strings such as data values, Labels, linear (no order-of-operations) math expressions, and even other "Defines" during the interpretation of the "Injector File"
Existing Extract/Inject Script Sets
Sega Super 32x