Hacking the RPG Maker 2000 map format (*.lmu)
I've never really done this kind of thing before but I'm currently playing around with RPG Maker 2000's map files. Unfortunately they are saved in a binary format and I'm trying to figure out how they work. Maybe then it would be possible to convert them to tmx format or simply use them as-is in open-source projects.
After examining some maps in a hex editor I've discovered that the core map data (which tiles go where) is saved in an array of bytes with two bytes representing one tile. I tried using this information to create a Tiled-compatible CSV. But I can't quite figure out how the saved values map to the tileset.
Does anyone here have experience with this sort of thing? Maybe you have some ideas or feel like helping out?
Cheers.
Edit: I wanted to attach a sample map but OpenGameArt.org won't allow it so here is what it looks like in a hex editor (map image and tileset are attached). I have highlighted the first and last tile in red. Obviously there is a pattern to the first few tiles but the snow tiles really confuse me.
Edit 2: I have removed the attached images.
00000000 0A 4C 63 66 4D 61 70 55 6E 69 74 0B 01 00 47 84 58 88 13 89 13 8A .LcfMapUnit...G.X.....
00000016 13 8B 13 8C 13 8D 13 8E 13 8F 13 90 13 91 13 92 13 93 13 94 13 95 ......................
0000002C 13 96 13 97 13 98 13 99 13 9A 13 9B 13 9C 13 9D 13 9E 13 9F 13 92 ......................
00000042 13 93 13 A0 13 A1 13 A2 13 A3 13 A4 13 A5 13 A6 13 A7 13 A8 13 A9 ......................
00000058 13 AA 13 AB 13 AC 13 AD 13 AE 13 AF 13 B0 13 B1 13 B2 13 B3 13 B4 ......................
0000006E 13 B5 13 B6 13 B7 13 B8 13 B9 13 BA 13 BB 13 BC 13 BD 13 BE 13 BF ......................
00000084 13 C0 13 C1 13 C2 13 C3 13 20 11 12 11 12 11 12 11 12 11 12 11 12 ......... ............
0000009A 11 12 11 12 11 12 11 12 11 12 11 12 11 12 11 12 11 12 11 12 11 12 ......................
000000B0 11 C3 13 C3 13 0E 11 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
000000C6 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 C3 13 C3 ......................
000000DC 13 26 11 1A 11 1A 11 1A 11 06 11 FE 10 FE 10 FE 10 FE 10 FE 10 FE .&....................
000000F2 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 C3 13 C3 13 C3 13 C3 ......................
00000108 13 C3 13 C3 13 0E 11 FE 10 02 11 1A 11 06 11 FE 10 FE 10 FE 10 FE ......................
0000011E 10 FE 10 FE 10 FE 10 FE 10 FE 10 12 11 12 11 12 11 12 11 22 11 C3 ..................."..
00000134 13 26 11 1A 11 24 11 C3 13 0E 11 FE 10 FE 10 FE 10 FE 10 FE 10 FE .&...$................
0000014A 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 16 11 C3 13 C3 13 C3 ......................
00000160 13 C3 13 C3 13 0E 11 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
00000176 10 FE 10 FE 10 FE 10 FE 10 FE 10 00 11 12 11 12 11 12 11 12 11 12 ......................
0000018C 11 FF 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
000001A2 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
000001B8 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
000001CE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
000001E4 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
000001FA 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
00000210 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
00000226 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
0000023C 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
00000252 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE 10 FE ......................
00000268 10 48 84 58 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .H.X.'.'.'.'.'.'.'.'.'
0000027E 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000294 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000002AA 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000002C0 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000002D6 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000002EC 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000302 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000318 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
0000032E 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000344 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
0000035A 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000370 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000386 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
0000039C 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000003B2 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000003C8 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000003DE 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000003F4 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
0000040A 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000420 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000436 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
0000044C 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000462 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
00000478 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
0000048E 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000004A4 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 10 27 .'.'.'.'.'.'.'.'.'.'.'
000004BA 10 27 10 27 10 27 10 27 10 27 51 01 00 5B 01 42 00 .'.'.'.'.'Q..[.B.
Does RPGMaker allow uploading their tilesets to websites?
As for the format, this easyrpg page mentiones something about a converter: https://easy-rpg.org/wiki/development/editor I suggest you investigate or contact the easyrpg people. :)
Maybe the source here can help (at the end of the page) - it's an lmu to ascii converter.
For convenience as far as I can see from the source/topic:
Actual map/tile data starts at offset 40.
Rows first then coloums.
Tiles are really mapped using 16x16 tiles (2x2 make 32x32 tiles) - as can be seen on the colorful images above the source.
Otherwise it would help in deciphering:
If you start off with a map that is multiple of 8 to fit your hex editor.
Use simpler/recognizeable patterns.
Use tiles only from the first row and starting at the left.
Sweet. Thanks for the replies. I will definitely look into them. That forum thread looks really helpful.
Oh and regarding the tileset I attached: I just considered uploading it would be fine (fair use etc.) but if it's an issue I can remove the attachment again.
The run-time package (RTP) from the RPG Maker software was, and is, very proprietary, with very limited rights given.
(The only way of distribution allowed is along with the games.)
I've decided to remove the attached images. Funny though, I always thought the RPG Maker team had illegally ripped them from old SNES games anyway.
That would be so entertaining to be true. :D (I have no idea)
The graphics are definitely from older games. But whether the team obtained the rights to redistribute them I do not know.
Can't you import your own tiles (read: eg. some from OGA) ?
My first unspoken thought was "*copyright*", but my second was "well...erm...maybe...fair scientific use...",
just at least for the time of discussing these educative matters... ;)
http://en.wikipedia.org/wiki/Fair_use
Footnote: But fair use should try to minimise the used material as necessary for the purpose.
Yeah, in the context of fair use, it's okay to post game screenshots and such, although I'd recommend saving them as fairly low quality jpegs (perhaps at reduced resolution) to make sure the graphics aren't really rippable and make note with your post that it's fair use and not openly licensed.
Just like to make everyone interested aware of an interesting related Project that looks promising:
http://openrpgmaker.sourceforge.net/index.html
Haven't run it but from the screenshots the editor looks quite sophisticated, file formats are "readable" XML.
Seems like the author is seeking for artwork to deliver the editor with.
I saw that. I tried to sign up for the forum and prod them to use some of the OGA art sets (the 16x16 stuff, as well as the LPC contest entries), but I didn't get the forum sign up email so I was never able to post anything. Hopefully they'll see it.
I have a friend who once made a map viewer for rm2k maps, I can ask him if he still has the code. This was many years ago though, so dont get your hopes up. I think there was some sort of integer compression present though
Looks like a cool project. Maybe it would be possible to adapt an existing engine (such as the Hero of Allacrost engine) to make use of the project files. Unfortunately I'm really caught up with writing a thesis at the moment so I haven't had time to further delve into this stuff.
Here is the the simple test app with code he made. He told me it was abit hardcoded, but it worked. Because of copyright, I cant include the chipset images, but the way its supposed to be is a bmp image called Basis.bmp in the same folder. This is the default rm2k tileset from what I can tell, so just place it there, and rename(if its not a bmp file, find a converter)
Please credit the original author of this code(not me), Damizean if you use the information in a project:
http://www.4shared.com/get/Ao6roR9x/RPG2000.html