JUST IN CASE ANYBODY WANTED TO PICK THIS UP
pac files are in this format
0x00000000 ~ 0x00000002 Size of file table (including this part)
0x00000003 ~ 0x******** file table. The ******** is the offset the first 2 bytes show.
As an example, I'm using message.pac because the name of the file seemed like some messages were gonna be in it.
0x00000000 ~ 0x00000002 was 49 00 00, so flipped, 0x00000049 is where the file table ends
0x00000003 ~ 0x00000049 is the file table, in this order: first byte is the text length of the file (so for example, a file with a file name of abc.txt would be 7, abcdefg1234.txt would be 0F), and then comes the pointer that points to the actual pointer, and then the file name.
after 0x00000049, the next 2 bytes were the number of files.
and then there is a pointer table.
The pointer starts counting from 0000, which means the first, which is actually located at 0x0200, would be pointed as 0x0000, and so on. The pointer is 4 bytes, and then comes 4 bytes which is the file size of the file that the pointer is directing to.
I've noticed that pac files with the more number of files have a different type of beginning header, but I don't want to waste time explaining.
I'm now looking at the first file from message.pac, camp_mes_msg.gem.
the first 4 bytes is the number of pointers/script in the file. Then comes 4 bytes of pointers, then 4 bytes of the script size, and repeats the number of times that it says on the first 4 bytes.
Even on this file, the pointers that points to the first script is 00, so you'll need to calculate your pointers correctly when editing.
I looked into font.pac, and I've found a 4bpp font.
Didn't look more deeper for a character map/width table though.
Looked in the pacs inside the menu directory, and the pac files contained NCGR etc files, so the graphics won't be hard to edit, IF graphics was necessary.
everything in the script folder was not scripts at all.
I didn't look much more in the ROM, but I now can see that most of the text should be in message.pac, and the use of pointers in the script was pretty basic.
Now if you take a look into the arm9.bin, there are lots of text in there. Many stuff noitora should have translated for his menu trans.
Translation is possible, but expanding the arm9 size is not, unless you know arm asm.
Pointer calculations are simple.
In the arm9.bin, look at offset 0x1101D8.
The text should say WEB in double byte characters.
Now remember, because this is the arm9.bin, you aren't looking for a pointer for the file, but where the text will be in the RAM.
Because there are no overlay files, most of the times (from what I know), just add 02000000 to your values. That can be found in either the y9.bin /arm9ovltable.bin (whichever the game uses), but I won't get into that, because this game doesn't use any overlays and it's not necessary.
So doing a byte flip of that text's offset, it becomes D80111.
Add 02000000 to D80111 so it is now 02D80111. Do a search for this text...
and you get a matching result in 0x1108EC. That's the pointer for "WEB". So whenever the starting offset of "WEB" changes, you change this pointer value to match "WEB"'s new offset.
Hope I've helped.