-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Set Metatile IDs From Another Map
ghoulslash edited this page Apr 28, 2023
·
4 revisions
credit to ghoulslash
Open fieldmap.c and add this function somewhere:
extern void DrawWholeMapView(void);
void CopyMetatileIdsFromMapLayout(u16 mapGroup, u16 mapNum, const u8 pos[][2])
{
u32 i, block, x, y;
struct MapLayout const *layout = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapLayout;
i = 0;
do {
x = pos[i][0];
y = pos[i][1];
block = layout->map[x + layout->width * y];
MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, block);
i++;
} while (pos[i][0] != 0xFF);
DrawWholeMapView();
}
It works by taking a map group and number and array of (x,y) positions and copies them into the current map from the given layout. An example of the pos
argument:
- If I want to copy the first 2 columns of a map from y positions 0 through 7:
static const u8 sTestPositions[][2] = {
{0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7},
{1, 0}, {1, 1}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {1, 6}, {1, 7},
{0xFF, 0xFF}, // to signify the end of the array
};
- So we would call the above with
CopyMetatileIdsFromMapLayout(<map map group>, <my map num>, sTestPositions);