The game was 1MB, expanded to 1.5MB. (I just remembered to change the ROM size in the header, but that didn't fix it.)
The game originally had the text pointers embedded in the event code. So I took the easy but not very elegant solution.
I made a copy of the script, replacing the beginning of each string with an ID.
I use that ID to look up the string in an English pointer table I created.
It works for the first scene in the game (some issues like text going outside the window, but that's something to work on later).
But in the second scene, it freezes, and I have determined it's because it doesn't seem to be reading the pointer right.
Now, as I understand, $1004ED should be ROM, and checking the ROM file, it equals $003D, which is a valid string ID, and not $FF00, as it gets read here.
Code:
11:5080 30 39 MOVE.w ($00A10000),D0 D0=00000001
11:5086 02 40 ANDI.W #$00C0,D0 D0=00000020
11:508A 0C 40 CMPI.W #$0080,D0 D0=00000000
11:508E 67 00 BEQ #$001E [11:50AE]
;region checking. Unneeded, but simple enough, so why not? Yes, I'm testing my English hacks in Japanese to avoid resetting the region every time.
11:5092 70 00 MOVEQ #$00,D0 D0=00000000 D2=000C04ED
11:5094 2F 08 MOVE.l A0,-(A7) A0=00FF8F0C A7=00FFEFF8
;preserve old A0 contents
11:5096 06 82 ADDI.L #$00040000,D2 D2=000C04ED
;D2 already had the pointer to the original string. This adjusts it to my duplicate script area.
11:509C 20 42 MOVE.l D2,A0 A0=00FF8F0C D2=001004ED
11:509E 30 10 MOVE.w (A0),D0 A0=001004ED D0=00000000
;read the string ID
11:50A0 E5 80 ASL.L #2,D0 D0=0000FF00
;multiply by 4 for 32-bit pointers
11:50A2 06 80 ADDI.L #$00120000,D0 D0=0003FC00
;for index into English pointer table
11:50A8 20 40 MOVE.l D0,A0 A0=001004ED D0=0015FC00
11:50AA 24 10 MOVE.l (A0),D2 A0=0015FC00 D2=001004ED
;read pointer table
11:50AC 20 5F MOVE.l (A7)+,A0 A0=0015FC00 A7=00FFEFF4
;restore old A0 so the game can do whatever
11:50AE 23 C2 MOVE.l D2,($00FF8E28) D2=FFFFFFFF
;store pointer to RAM (original instruction)
11:50B4 4E F9 JMP ($00001C64)
11:5086 02 40 ANDI.W #$00C0,D0 D0=00000020
11:508A 0C 40 CMPI.W #$0080,D0 D0=00000000
11:508E 67 00 BEQ #$001E [11:50AE]
;region checking. Unneeded, but simple enough, so why not? Yes, I'm testing my English hacks in Japanese to avoid resetting the region every time.
11:5092 70 00 MOVEQ #$00,D0 D0=00000000 D2=000C04ED
11:5094 2F 08 MOVE.l A0,-(A7) A0=00FF8F0C A7=00FFEFF8
;preserve old A0 contents
11:5096 06 82 ADDI.L #$00040000,D2 D2=000C04ED
;D2 already had the pointer to the original string. This adjusts it to my duplicate script area.
11:509C 20 42 MOVE.l D2,A0 A0=00FF8F0C D2=001004ED
11:509E 30 10 MOVE.w (A0),D0 A0=001004ED D0=00000000
;read the string ID
11:50A0 E5 80 ASL.L #2,D0 D0=0000FF00
;multiply by 4 for 32-bit pointers
11:50A2 06 80 ADDI.L #$00120000,D0 D0=0003FC00
;for index into English pointer table
11:50A8 20 40 MOVE.l D0,A0 A0=001004ED D0=0015FC00
11:50AA 24 10 MOVE.l (A0),D2 A0=0015FC00 D2=001004ED
;read pointer table
11:50AC 20 5F MOVE.l (A7)+,A0 A0=0015FC00 A7=00FFEFF4
;restore old A0 so the game can do whatever
11:50AE 23 C2 MOVE.l D2,($00FF8E28) D2=FFFFFFFF
;store pointer to RAM (original instruction)
11:50B4 4E F9 JMP ($00001C64)