Windows 95 or Later

Overview, 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!

Download ROMulan

System Requirements

  • PC- Windows 95 or later

  • Features

    The power of ROMulan is within the script files that drive its two basic functions:

    Batch Execution:
    Use "Batch Files" to instruct ROMulan to perform a series of tasks
      Data Extraction With/Without Endian Switch:
      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

      External Tools:
      Call on external programs to perform data conversions or other tasks during a Batch process

      Combining Injectors:
      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

    Data Injection:
    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
      Data File Injection With/Without Endian Switch:
      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 Megadrive/Genesis

    Sega Super 32x

    Windows PC