News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - DackR

Pages: [1]
Hey guys-- Ever since I started work on the Marvelous translation early last year, I've also been working on a tool that would help keep me organized. I call it MBuild (or Marvelous Build).

Here's a preview from the readme file of what I've got so far:

MBuild v1.28 - 2016/01/09
MBuild - A Marvelous Translation and Hacking Tool
Written by DackR aka Daniel Martin Burgess
!!!Requires .Net Framework 4.5
Lunar Compress DLL v1.8 by FuSoYa.
Lunar Compress Interface Code Originally by giangurgolo and Omega (I've made some minor changes).
Super Bomberman 5 Decompression/Compression by Proton (Ported to C# by yours truely).
xDelta3 created by Joshua MacDonald (jmacd).
The SNES Checksum routine was ported to C# from the original SNES9x source.
MBuild was originally created to assist in change management while
working on the translation of Marvelous: Another Treasure Island.
There are many features, with more features being added all the time.

Gone are the days of making permanant changes in a hex editor to the
original ROM file. With MBuild, the user is encouraged to extract data from
the original ROM and store it separately, in an organized way. When the time
comes to build the data, an XML file containing a list of data files, offsets,
and other information is used to neatly fold in the changes to the output file.

Ability to dump binary data from a file.
Ability to dump script text.
Ability to encode script files into binary format.
Build-time compression using a variety of methods.
Supports Lunar Compress DLL compression types.
Supports Super Bomberman 5 RLE-type compression.
Seperate command-line options for any process available during build-time.
Build-time SNES ROM file expansion support (pad option).
Build-time SNES checksum correction and header modification (pad option).
Build-time diff patch creation supporting output of xdelta and/or ips files.
Drag-and-drop XML files on the MBuild executable to use that XML file to build a project.

Relative paths are accepted.
PC hexadecimal offsets only.
Previous build files of the same name will be overwritten.
Modify the MBuild.XML (can be named differently) file to customize the build process.
XML Comments are supported.

XML Structure example:
<build original="ROMFILENAME.SFC" name="NameUsedToGenerateOutput" path="..\">
   <lzr file="x121964_LZR_TITLE.bin" offset="121964" />
   <lzr file="x1DA5ED_LZR_SUBTITLE.bin" offset="1DA5ED" />
   <lzr file="x1D948F_LZR_NINTENDO.bin" offset="1D948F" />
   <lzr file="x123951_LZR_INTROFONT.bin" offset="123951" />
   <lzr file="x1257F6_LZR_INTROTEXT.bin" offset="1257F6" />
   <lzr file="x14B628_LZR_PUZZLE1.bin" offset="14B628" />
   <lzr file="x132FC4_LZR_ANTBUSTER_GINARANSOM.bin" offset="132FC4" />
   <rep file="x270000_REP_KANJI_FONT.bin" offset="270000" />
   <rep file="x2AC000_REP_MAIN_FONT.bin" offset="2AC000" />
   <rep file="x2B6000_REP_ACTION_MENU_GFX.bin" offset="2B6000" />
   <rep file="x2CE000_REP_LARGE_FONT.bin" offset="2CE000" />
   <rep file="x7C84_REP_ASM_RELOCATE.bin" offset="7C84" />
   <rep file="x268000_REP_MISC_MENU_AND_NUMBERS.bin" offset="268000" />
   <rep file="x7FDC_REP_Possible_PalleteFix.bin" offset="7FDC" />
   <ins file="x300000_INS_EnglishScript.bin" offset="300000" />

To simplify the management of changes to a ROM file,
you are able to keep separate binary files. This is for ease of backup and editing.

Supported Node Types:
build=    attributes under this node control the basic build parameters such
      as source file, name of output, and file path for all files.
rep=   Replace data at offset using RAW uncompressed data.
ins=   Insert data at offset using RAW uncompressed data. When inserting data,
        the output file will be padded to the next valid ROM size by default.
lzr=   Stands for LZ, Replace. Essentially compresses binary data before
      replacing data at a specified offset with the compressed data.
      All Lunar Compress compression types are supported.
lzi=   Stands for LZ, Insert. Compresses data and insert at specified offset.
bpr=   Bitplane conversion will be attempted. Currently, only two modes are supported.
bpi=   Same as above, but the data will be inserted into the outfile.
rlr=   RLE compression is performed before the data is overwritten at the specified offset.
rli=   Same as rlr, but the compressed data is inserted (file size changes).
sbr=   Script build and replace. When you specify a script text file and a table file,
      the data is build and then written to the output file at the specified offset.
sbi=   Same as sbr, but as an insert operation.

Additional Build Process Notes:
-Build process will follow node steps in order.
-Original ROM is not modified.
-Input files are not modified.
-Output file is generated fresh for each build.
-A unique file name is generated (for each date).XX- This is depreciated. Uses build info to generate the output file name.
-Multiple build nodes are supported, but nested builds are not.

Command-line arguments:

      "build"   -   Used to build a project using a specific XML file.
            -   If no argument is specified, this process runs against "MBuild.XML" by default.
            -   This behavior can be changed by modifying the "MBuild.exe.config" file's AutoBuild Setting.
            -   This argument only evaluates the /xmlfile property-- all others are ignored.
            -   Example: MBuild build /xmlfile:"c:\folder\file.xml"

  "dump-script"   -   Used to dump an unformatted script file. (Currently) Support is planned for pointer table traversal.

   "bin-script" -   Used to build the script file (unicode/ascii txt file) into a binary-formatted file. Support is planned for Pointer table generation.

      "comp" -   Uses one of any number of compression types to compress a file. Lunar Compress Types are supported as well as a few others.

      "fixsum" -   Use this argument to fix the checksum of SNES ROM files. Headered and Interleaved ROMs are unsupported.

        "ips" -   Use this argument to generate an IPS patch.

      "xdelta" -   Generates an xDelta3-compatible patch file.

  "bpp-convert" -   Convert a file between a few of the supported bpp formats.


I'm working on several game-specific tools. Also general tools for bulk dumping of data utilizing pointer table data. (I need more examples of different pointer tables used in games.)

So far, I am able to dump data utilizing a pointer table in the case of Marvelous and Super Bomberman 5, but I want the tool to be flexible enough to be able to read a configuration file and be able to traverse different pointer types and dump data efficiently.

I've already made an older version of this tool available (comes with the Marvelous Localization Tools in the translation thread). Just wanted to see if there was any interest for me to maintain general releases. If not, I'll probably just keep it to myself because that really all I made it for...

I'm looking for some other ideas of features to implement as well. So, if you've got ideas, lets hear them. If you think this tool is poorly planned, let me know that too. ;)

Personal Projects / [SNES] Super Bomberman 5 Translation
« on: December 14, 2015, 03:01:44 am »
Working on decompression routine now that I'm getting the hang of reading 65816 debug logs. Expect news on this soon. Compression routine will be forthcoming as well...

Didn't want to resurrect the old Topic, so all new updates will go here.

Personal Projects / [SNES] Super Famicom Wars Translation
« on: December 14, 2015, 02:39:09 am »
After doing some digging on this topic, it appears that no one is currently working on this game.

I've reverse-engineered the decompression routine this past weekend and can now reliably extract graphical assets from the game. I'll work on the re-compression routine in my spare time this week and hopefully I'll have something to show ya'll by the end of the week. :)

Like all of my work, I will eventually be releasing the source code for any tools I make during this process.

Here is a preview of the work I've done so far:

There are still a few things left to be translated within the game. I'll begin by posting the unit descriptions and we'll see how fast we can get a final release for this game... after many years of neglect.

Anyone who wishes to help will be credited. :)

Unit Descriptions:

Hey guys! As many of you know, I've been working on getting Marvelous for SFC fully translated and hacked since about February of this year. There are only a few items left in order to finish hacking the game.

One of which is a puzzle that you come across fairly early in the game. The Noses, Bird Legs, Ant Legs, Spider Legs wall text.

The actual tile graphics for this section has been successfully modified (though it's not in it's final state), however, the tilemap is giving me problems.

Other tilemaps in the game are in a pretty basic compressed format. This one does not appear to be compressed, but it's not really in an easy to recognize format either.

Here's the original text:

Here's where I'm at:

The tilemap is stored right around PC Address x2D0D00 in the unheadered ROM.

Here is a savestate that will take you to the correct spot:

The issue I'm having is controlling which tiles are repeated in the tilemap. As you can see, the "NO" from "noses" repeats on several areas of the screen. There are a few more instances of repeating tiles in there as well.

If there is anyone who feels motivated enough to teach me where to look for the answer, I would be immensely grateful.

ROM Hacking Discussion / Help with determining Compression type
« on: June 13, 2015, 11:52:21 pm »
Okay- So some of you know about the Marvelous:Another Treasure Island translation project that I picked up from Tashi. So far, I've identified the type of compression used for the graphics and a good portion of the data. Most of it uses a form of LZ compression very similar to that used by Alttp.

I've come across something related to the compression/encoding used to store menu information that I'd like some help on.

I've located the approximate location where the Journal selection menu is stored (ROM Offset E2874). This is the menu at the beginning where you can select a previously saved game, or a new game.

Now, I'm able to decompress the data using the same method that I've used successfully for most of the data in the game. It gives me a tilemap that comes out to 7kb of data for the menu that looks pretty much (At least the first 1kb) exactly like it does when the game decompresses it and stores it in VRAM.

However, I'm unable to re-compress the data using the same method. The re-compressed data comes out much smaller than the original compressed data... Therein lies my issue. I've tried several different methods of re-compressing the data, but all of them end up borking it up.

So... I guess I was wondering if anyone else wanted to give it a go? I'm probably missing something simple. I'm going to keep hammering away at it anyway, but it was bothering me enough that I figured I'd ask.


Hey guys!

I wanted to post a note on here about the hacking progress for Marvelous: Another Treasure Island... All good news, I assure you.

Tashi and I have been in close contact over the past few weeks concerning a recent breakthrough in hacking this title. We have finally identified the compression routine used for a good portion of the game's graphics (also used for menus, and the intro text sequence).

I've designed a new title screen and was able to successfully re-compress/insert it.

Intro sequence has been dumped and translated. We will likely need to relocate the data elsewhere in the rom because the compressed size is greater than the original... We have successfully inserted a place holder that is an abridged translation of the intro for the time being.

New font for the intro sequence completed, compressed and inserted successfully.

I've been slowly working through the game and replacing the Japanese script that appears during some puzzle sequences.

Still looking for all menu text and chapter intro text. (Found some, but haven't had a chance to test insertion. Will circle back after we finish the above.

Early progress:


Update (4/7/2015):

Edit: Swapped out links for embedded images.
3/27 Edit: Moved files to a different file host...

2015/12/18: First Non-VWF Patch Released. (Followed by a game-breaking bug fix.)

2015/12/19: Version 1.02 Released (Essentially expanded the readme and a couple of minor changes since v1.01.).

2015/12/23: Version 1.03 Released.

2016/01/04: Version 1.04 Released.

2016/01/06: Version 1.05 FINAL Released.

Personal Projects / Little Master Niji Iro No Maseki
« on: July 07, 2012, 02:06:16 am »
I know that nobody has asked about this in a while, but I wanted to make an update. Unless you've checked the Dynamic Designs forums, you may not know that this translation was handed over to Gideon Zhi from AGTP a while ago. I know he's been making quite a bit of progress and that Bongo` may have assisted him at some point.

Anyway, in an attempt to get everyone excited for the upcoming release, I thought I would release an old patch that is farther in progress than the 0.5 beta. I recently updated it to translate some of the debug menus that were unknown to most people until now. The download contains both patches.

Here's a link to the translation page:

Take a look... While it's not finished, and it shows off how crappy a job I was doing, if you've been waiting for this as long as I have, it's nice to have *something*. ;D

Personal Projects / Bomberman 5 Menu Translation
« on: July 05, 2012, 06:29:14 am »
Okay. so I've been messing around with Bomberman 5, and I've finally figured out how text is displayed in the menus. I was able to partially hack the battle menu to display in english, but i'll probably need to do some asm work to fix the broken bits.

Here is a quick preview.

The font is compressed and surprise, surprise- the existing english characters are an incomplete set. (hence: conpig= no "f" yet lol) The small/large font pairing happens because of some funky bank switching.

Ugly, I know-- but better than nothing for now. I'm so damn tired. bah.

Pages: [1]