I can help decode these addresses. Spoiler, R&F doesn't seem to fit the pattern. I'll do MMX and MMX2 because they have one difference (MMX is FastROM, MMX2&3 are SlowROM).
You'll need
Lunar Address or
Lunar Address JS.
The difference between FastROM and SlowROM is the highest bit (0x800000) is set for FastROM.
MMX - 0x86ACEE is the snes memory address of a pointer table
Put 86ACEE into Lunar Address, and choose LoROM 80:8000 (FastROM).
It will give you the PC location 0x32CEE which is where this pointer table is in the (headerless) ROM using a hex editor.
MMX2 - 0xAAB2D4 is the (incorrect FastROM) snes memory address of a pointer table.
Put AAB2D4 into Lunar Address, and choose LoROM 80:8000 (FastROM).
It will give you the PC location 0x1532D4 which is where this pointer table is in the (headerless) ROM using a hex editor.
BUT, AAB2D4 is the FastROM address, MMX2&3 are not FastROM. If you put the PC location 1532D4 into Lunar Address and select LoROM
00:8000 (SlowROM), it will give you the correct address of $2AB2D4. Or have it auto detect the correct type and it will. If you put in the correct PC location, it will give you the correct snes memory address. This way you can filter out incorrect snes addresses if you know the PC location.
So the correct snes memory addresses are
const long p_gfxobj[4] = {0x86ACEE, 0x2AB2D4, 0x088623, NULL };
const long p_gfxpal[4] = {0x86ACF1, 0x2AB2D7, 0x088626, NULL };
You'll have to check the snes memory conversion function to make sure it ignores the highest bit (0x800000).
I dug around in the code a bit and found a pattern of how it loads levels. Do these other addresses look familiar to you? They could be for music or anything, I don't know what they are, but they're pointer tables in the same format.
MMX MMX2 MMX3
$86A780 $06A4C5 $06A8E4
$86ACEE $2AB2D4 $088623
$86A1D5 $069D6A $06A085
$86A260 $069DD1 $06A172
These pointer tables seem to work like this: the first 16 bit number (let's say 0x001E) points to position 0x001E in the pointer table. At position 0x001E we have another 16 bit number (let's say 0x0172) that points to position 0x0172 in the pointer table. It then reads an 8 bit value from 0x0172. What it does from there I haven't looked into.
Rockman & Forte didn't follow the same format. I found this address $81D8CD (yes it's FastROM) of a pointer table but I don't know what it is and it most likely won't work in the editor.
I found the same pattern in the protos so these values should give you the pointer tables as well (always use unheadered snes roms). I guess add 3 to get the pal.
MMX2 early proto: $298000
MMX2 proto: $2AD000
MMX3 Aug 9 proto: $088690
MMX3 Aug 23 proto: $088623
MMX3 Sep 25 proto: $088623