FE7 World Map Insertion

#Introduction

I’ve seen some question topics pop up over the last few months regarding the world map in FE7. I’ve also had a few folks ask me personally about how I went about inserting my own into The Road to Ruin. This tutorial will guide your through the process of inserting your own world map into a FE7 ROM.

Before I start, I’d like to give a shout-out to NomadicTrooperGirl, who provided some
great documentation in here.
Any offsets I post for images or palettes in this tutorial I got from there. Thanks!

#Overview

Tools we’ll be using:
Usenti
GBAGE
Hex Editor

Concepts you should be familiar with:
Palettes
Offsets
Hexadecimal numbers

Okay, so when I say “World Map”, there’s an important distinction to be made, since there’s really 3 different world maps the game uses.

  1. The map of the entire world of Elibe (I’ll call it the “Full View Map” from now on).

  2. The “zoomed in” map that covers Lycia, Bern, and Sacae (I’ll call it the “Zoomed In” Map).

  3. The “zoomed in” map that covers the Nabata desert.

I don’t have any information about the Nabata map, since I’ve never really needed to do anything with it. If someone’s got notes on it, please post them so I can add it to this tutorial (with credit, of course).

Important Note: When I learned how toinsert the Zoomed In map, I initially had a lot of trouble trying to get palettes to work. I found out that the problem was that GBAGE was reading in .png files in a way I wasn’t expecting. The Zoomed In map needs to split into several pieces in or for it to be inserted. If a section didn’t use all of the colors of the palette, GBAGE would inappropriately assign the image a subset of the palette.
However, when I converted my images to .bmp, everything worked fine.
So, for this tutorial I really recommend saving your images as .bmp.

#Table of Contents

Inserting the Full View Map

Inserting the Zoomed In Map

A Quick Word About World Map Events

Alright, that’s all for this tutorial! Feedback is appreciated. If you got stuck somewhere or would like me to expand on a certain part of the tutorial, feel free to post about it here.

Side note: This tutorial ended up having exactly 42 images. Very appropriate :B

4 Likes

#Inserting the Full View Map
The Full View Map is a single image that’s 240x160 pixels in size, with 8 extra pixels of height along the bottom (I’ll talk about that shortly). Total size: 240x168.
It’s located at offset 0x5D0AC0.
It uses the palette at 0x5D0A40.
Now, in vanilla FE7, the map uses 4 sets of 16 colors, and works some magic to get different parts of the map to use different sets of colors. I have no idea how to do this, so my map will use 1 16 color palette for all four sets. If you know how this magic works, please post about it!

I’ll be using my own Full View Map for this tutorial. You’ll need to come up with your own!
Here’s the palette for those curious:

Pretty basic, but that’s okay.
Formatting the Full View Map
Like I said earlier, the image has an extra 8 pixels of height along the bottom. Notice the first 8x8 section in the upper left. Now compare it to the bottom left 8x8 section. The game reads the first 8x8 section as the transparent color, so you’ll need to take your first section and stick it in the bottom row.
Here’s a quick way to do this in Usenti:

First, you’ll want to turn on the grid. It’s the middle of the three box icons, next to the zoom. If the grid size isn’t already 8x8, you can change it by going to View->Grid Settings.

Select that first8x8 section and cut it.

Then, make sure that 8x8 section is your background color. Now go down to the bottom left of the map, and paste that section we cut into the first 8x8 section in the bottom row.

Don’t forget to save!
Alright, your map should now be formatted like so:

Time for the actual insertion.

Inserting the Full View Map
Open the ROM in GBAGE:

Image is at 0x5D0AC0
Palette is at 0x5D0A40
Remember to set GBAGE’s width to 30 for proper viewing!

Okay, so let’s bring in our own map. Select “Import a Bitmap”.

We’ll import the graphics and palette at the same time. Click ‘OK’

Looks like my map uses fewer than 16 colors, but that’s okay. Go ahead and click ‘Finished.’

Alright, there it is! Remember to hit File->Save to make things official.
Let’s see how the map looks in game:

O-Oh…

Ha, no worries. This can be fixed pretty easily. It comes from the fact that the game is trying to use all four palettes to render the map, but I only use the first one.
There’s a few ways you can fix this.
1. In Usenti, make sure the first four rows of colors in the palette are identical. Then reinsert.
2. In GBAGE, import the palette (Uncheck import graphics!) 3 more times, at each set’s location. Since the first set is at 0x5D0A40, the next set will be exactly 0x20 bytes later at 0x5D0A60. The third at 0x5D0A80, and the fourth at 0x5D0AA0.
3. The third option is to use a hex editor. I prefer this method, since it’s less intimidating than you might think, and goes pretty quickly.

Alright, let’s open up the ROM in a hex editor. I’ll use HxD. Head to offset 0x5D0A40, the location of the palette.

16 color palettes are 0x20 bytes long (what I have highlighted). We’re going to copy these 0x20 bytes, and paste-overwrite (Ctrl-B) over the other 3 sets of colors.

The second set of colors is at 0x5D0A60, so let’s overwrite those.

Okay, let’s overwrite the other 2 sets.

Save, and let’s check out the ROM in action again.

Now we’re in business! We’ve got our full view map in the ROM!

1 Like

#Inserting the Zoomed In Map
Inserting the Zoomed In map is a similar process to the Full View one, but there’s a lot more extra formatting that needs to happen before hand.

First up, the numbers:

  • The palette is 4 sets of 16 colors at 0x574990. I’ll be using the same 16 color palette for each set.
  • Start by making your Zoomed In world map 1024x688 (Save a copy of this since it comes in handy when doing World Map Events).
  • The Zoomed In map then needs to get split up into 12 different sections.
  • The first 8 sections are 256x256.
  • The last 4 are 256x176.

These are their ROM locations:
Section 1: 574A10
Section 2: 57CA10
Section 3: 584A10
Section 4: 58CA10
Section 5: 594A10
Section 6: 59CA10
Section 7: 5A4A10
Section 8: 5ACA10
Section 9: 5B4A10
Section 10: 5BA210
Section 11: 5BFA10
Section 12: 5C5210

I’ll walk you through breaking them up. We’ll divide the map left to right, top to bottom.

Let’s start with our whole Zoomed In map:

I’ll be referring to different sections of the map by number:

Sections 1 through 8 are 256x256, while sections 9 through 12 are 256x176.

Open the map up in Usenti and go to Image->Size. Change the size to 256x256. You should end up with something like this:

Now select File->Save As and name it something useful. I’ll name this first section “1.bmp”. Whatever folder you’re keeping your images in should now contain the full Zoomed In map and this first 256x256 section.

The reason I did a Save As was so that the first section would contain the palette that the entire map uses. We’ll be copy/pasting every section of the map into “1.bmp” and then saving as another image.
Let me show you what I mean. Go back to the full map, and turn on Usenti’s grid. Make sure the size is set to 256x256.

Using the grid to help you, select the second 256x256 section in the first row. You can also use Usenti’s coordinate system as a guide.

The coordinates are what the red arrow is pointing to. It should be near the bottom right of Usenti. The current size of the selection box will appear in the area I outlined in green as you drag out the box.

Copy your selection into “1.bmp” or whatever you called it.

Now do a “Save As” again and call it something else. I’ll use “2.bmp”.

You’ll repeat this process for sections 3 through 8. I’ll walk through it with you one more time.

Select the 256x256 section:

And copy it into the smaller file.

Go to File->Save As, and name it something useful. I’ll name it “3.bmp”

Repeat the process for sections 4 through 8.

Okay, so now we’re on the smaller sections. Remember that they’re 256x176. Select section 9 in your map, and paste it into “1.bmp” or whatever you’re pasting into.

Since this section is smaller, we’ll need to resize it to get rid of the extra stuff along the bottom. Go to Image->Size and change it to 256x176.

Then do a Save As, and call it whatever. I’ll call it “9.bmp”

Repeat for sections 10, 11, and 12.

Now that we have our 12 sections, we’re ready to insert them.

Inserting the Zoomed In Map
We’ll be inserting the sections to these locations:
Section 1: 0x574A10
Section 2: 0x57CA10
Section 3: 0x584A10
Section 4: 0x58CA10
Section 5: 0x594A10
Section 6: 0x59CA10
Section 7: 0x5A4A10
Section 8: 0x5ACA10
Section 9: 0x5B4A10
Section 10: 0x5BA210
Section 11: 0x5BFA10
Section 12: 0x5C5210

Remember that the palette is at 0x574990

Head to GBAGE and navigate to the first section.

We’ll select “Import a Bitmap” and select the first section.

Click ‘OK’.

This one’s got a pretty smaller palette, just like the Full View map. But, that’s okay. Click ‘Finish’.

My background color is red so that it’s really obvious. I’m going to go ahead and guess that the game reserves that background stripe, so you’ll have to avoid it when spriting. If you have palette troubles later on, it may help to have the top left most pixel of section 1 be your background color.

Hit File->Save to make things official.
Okay, let’s go ahead and try to insert section 2. This time, though, we will NOT import the palette, only the graphics.

Click Ok and Finished.

The reason I didn’t import the palette this time was to make sure that each section looks correct. We’re only supposed to insert the palette once and ensure that each section sticks to the palette. Remember to save.
I’ll walk you through inserting the next section, too. Type in the offset of section 3 into GBAGE.

Select “Import a bitmap” and browse to and select section 3. Make sure to uncheck “Import Palette”

Now click ‘OK’ and then ‘Finished.’

Click File->Save As to make it official.

Now you just repeat these steps for sections 4 through 12.

Once you’re done you’ll want to make sure that you’re using the same palette for all 4 sets of colors. You’ll do the same thing in the hex editor that we did for the Full View map, just at a different offset (Or whatever method you used before).
Now to view it in-game:

We’re definitely not in Pherae anymore! Success!

3 Likes

#A Quick Word on World Map Events

No, I won’t be teaching you how they work or anything like that. You’ll want to go here for that knowledge.

I’m going to talk about coordinates. Say you want to load a map sprite in a specific spot. For the Full View map it’s pretty easy. Just get the coordinates from the single image and put them into your sprite loading command.

What about the Zoomed In map? Since the game stitches together the 12 sections, that coordinates are on the 1024x688 sheet. This is where the full map sheet comes into play. You can grab the coordinates there using Usenti or Paint, or whatever image tool that has coordiates.

Then you can do stuff like:

PUTSPRITE 0x01 [640,285] Cavalier 0x30 0x00 0x00 0x00 PUTSPRITE 0x04 [624,300] Fighter 0x30 0x00 0x00 0x00 PUTSPRITE 0x01 [555,240] Cavalier 0x30 0x00 0x00 0x00 PUTSPRITE 0x04 [550,250] Fighter 0x30 0x00 0x00 0x00

And get results like this:

I cannot believe you somehow figured out most of this on your own. Sure, Astra and Blazer had some world map shenanigans plus also the zombie hack crew but just… wow this is insane. This is rom modding at it’s finest.

He didn’t figure this out on his own, NomadicTrooperGirl did most of the work…

It is literally inserting 17 images via GBAGE and changing palettes.

3 Likes

At the same time though, this makes it look way less daunting of a task. From what I see the hardest part for us will be making the map itself!

I’ll have to take a look at the rest of the eventing documentation and the other docs NomadicTrooperGirl wrote on it.

Yeah, like Agro said, NTG found out all the hard stuff.
This is just me putting into a more user-friendly, step-by-step process.
Though it DID take me like 6 to 8 hours to put this together

Also, side note, Discourse really doesn’t like copy/pasting from MS Word. It threw line breaks in all over the place. What a pain to correct it all.

man the zombie hack crew didn’t even do anything fancy

they literally just loaded a CG over a regular map and just had the units walk around with normal events

3 Likes

That’s actually a really clever workaround.

Cedar Nyx remains, to this day, the best hacking Mcgyver I’ve ever had the pleasure of working with. I mean, have you seen Matthew’s Nightmare?

4 Likes

Yeah, I saw it played through. I can only imagine what the event files looked like for the final product.

Ok so whenever I import the bitmap, I get something like this:

What am I doing wrong?

ummm, everything? you need to elaborate the method a little more. did you make sure that the image as compressed/uncompressed on insertion?

It looks like you inserted it uncompressed. Make sure you’re on an image that is compressed, then click the import button and change all of the relevant offsets.

On an unrelated note, fuck you, Photobucket. Now I have to go through this whole thing and fix it.

1 Like

Got it, it’s working now! Thanks!

Did it destroy your tutorial? Photobucket turned into a pile of shit recently when they put all their images behind paywalls.

it destroyed all the tutorials, including my Sappy ones :sob:

Because I write my tutorials locally in text files before posting them, fixing things goes pretty quick.
The images should be restored.

May Photobucket choke