「exeファイルと同じ階層に並べたくはない」というのは、
test_game.exe
└scenario
├en
└ja
└test01.txt
という形式でtest01.txtなどを置きたくないということなのでしょうか?
データファイルを読み込むために使う「file_text_open_read(file_path)」などは、ゲームオプション設定で保存場所として設定した場所なら読み書きできます。
Windowsの場合は、「%localappdata%<ゲーム名>」「%appdata%<ゲーム名>」か選べる様になっているので、そのフォルダ以下にファイルやフォルダがあれば読み込むことができます。
%localappdata%<ゲーム名>
└scenario
├en
└ja
└test01.txt
fname = "scenario\\ja\\test01.txt";
fh = file_text_open_read(fname);
text01 = file_text_read_string(fh);
とすれば、localappdataのゲーム名フォルダ以下にあるファイルを読み込むことができます。
exeファイルと同じ階層に並べたくはないという要望があった場合、私ならlocalappdataなどにシナリオの言語リソースを入れます。
そのまま中身が見える問題は、暗号化や難読化したりすれば良いと思います。
localappdataなどにファイルをどうやって置くかは、インストーラーなどでファイルをコピーするなどが考えられます。
GameMaker標準機能でインストーラーを作る場合、「NSIS(Nullsoft Scriptable Install System)」というインストーラー作成システムを使用しています。
ゲームオプション設定でインストーラーを作るためのNSIS用スクリプトを指定できるので、標準状態の(NSIS用スクリプト)設定から変えることで、好きなファイルを好きな場所に入れることができます。
NSIS用スクリプトは、インストーラーの持っているファイルをどこにコピーする、といった様なスクリプトになっています(他にもいろいろなことができます)ので、NSISの公式サイトのマニュアルやgoogleなどで検索すれば、設定スクリプトの書き方が出てきます。
しかし、好きなところにコピーできたとしても、上記しましたが、GameMaker製のゲームから見える世界は、ゲーム自身があるフォルダ、ゲームオプション設定で選んだ「%localappdata%<ゲーム名>」か「%appdata%<ゲーム名>」しかないので、それ以外のフォルダにファイルを入れても読み込むことはできません。