Yes, it has to be the same length. If not, search the ROM for a pointer to the text and repoint it. This is quite hard to explain, but say the text you want to change is located at 0x145c00.
Make a script in XSE with your new text, regardless of length, like this:
Code:
#dynamic 0x800000
#org @1
= Hello this is a string of text\nand it may or may not be longer\lthen the original part of text.
Compile that to your ROM in XSE, save the offset in Notepad, and then load your ROM in Translhextion (or whatever hex editor you want).
Now, remember the original offset was 0x145c00? Well, we need to turn that into an offset. We do this like so:
[14] [5c] [00]
Reversed:
[00] [5c] [14]
Add [08]:
[00] [5c] [14] [08]
So now we search the ROM for 005c1408. We then replace that with the pointer to our new script.
Say we compiled that text to 0x800000, we then need to make that into a pointer:
[80] [00] [00]
Reversed:
[00] [00] [80]
Add [08]:
[00] [00] [80] [08]
So we replace 005c1408 with 00008008.
That should work, though I'm not 100% sure. Back up your ROM and test it out, then get back to me if there are any problems.