Skip to content

Overlays

Jorge Vicuña edited this page Jul 24, 2025 · 7 revisions

Overlay header?

For most of the ROM, there are apparently segments' headers describing their VRAM mapping, size, number, and internal name.

Their current ImHex pattern is as follows

struct SegmentHeader {
    type::Magic<"MWo2"> signature;
    be u32 segmentNumber;
    be type::Hex<u32> vramStart;
    be type::Size<u32> segmentSizeMaybe;
    be u32 unk01;
    be type::Hex<u32> vramEndMaybe;
    be u64 pad02;
    char segmentName[32];
};

Only reference I've seen of this is a mention of "MWo2 Files" is at this archived forum comment by "Zoinkity" about an unreleased N64 game (https://assemblergames.org/viewtopic.php?t=28810&start=20#p425765)

Here's a sample of one of these headers

Sample segment info

These can be seen loading into memory with pj64d's DMA Logger, in this case during the start of the game's intro sequence

Various instances of MWo2 segments being loaded into memory

In order, the sectors shown in the image are:

  • loadandsavebg
  • intro
  • gamecode

As we can see, the "gamecode" segment's vram address in the DMA log matches it's "vramStart" value on the header

Memory map general view

Do note that the segments in the same group (same vramStart) do overlap heavily with other groups. That's currently causing linker errors (multiple definitions) (Solution was to use the "symbol_name_format" option on each segment)

sector_vram_ranges

Clone this wiki locally