TEXT表示

Last-modified: 2018-12-16 (日) 18:10:18

SA内で文字を表示するためには通常spanish.gxtなどのgxtファイルが必要となります。
しかし、gxtファイルの内容を書き換えてしまうと 当然書き換え前の文字は表示出来なくなります。
ここではgxtを書き換える以外の方法を記述します。

 

スクリプト内に文字データを入れる

CLEO3

{$VERSION 3.1.0027}
{$CLEO .cs}
 
thread 'STRING'
 
gosub @SubStrings
wait 5000
if
0AA9:   is_game_version_original
then
   0AA5: call 0x588BE0 num_params 4 pop 4 0 0 0 1@
else
   0AA5: call 0x5893B0 num_params 4 pop 4 0 0 0 1@
end
 
end_thread
 
:SubStrings
0A9F: 1@ = current_thread_pointer
1@ += 0x10
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
1@ -= @SubMsgWelcome
1@ += 4
return
 
:SubMsgWelcome
0900: "Welcome to blablabla..."
0000: NOP

SA起動5秒後にWelcome to blablabla...と表示するスクリプトです。
詳しくはこちら→http://www.sannybuilder.com/forums/viewtopic.php?pid=4078

CLEO4

CLEO4でDynamicGXTが使用可能になりました。

0ADF: add_dynamic_GXT_entry "_TEST" text "Test string"

このOpcodeは現在のGXTテーブルに任意の文字列を一時的に追加するコードです。
この後に

00BC: show_text_highpriority GXT '_TEST' time 5000 flag 1

を実行すると「Test string」と表示されます。
もちろん、この文字列にも下記の特殊記号を使用することができます。

記号動作
~1~変数の値を表示
~h~skill,Respectなどの表示に使用
~k~~キー名~キー名を表示
~n~改行
~z~付けない場合はスペースが改行になる。
~r~文字色を赤にする
~b~文字色を青にする
~y~文字色を黄にする
~g~文字色を緑にする
~s~文字色を元に戻す
~w~?
  • 使用例
    0ADF: add_dynamic_GXT_entry "_TEST" text "~r~Take~s~~b~ it~s~~y~ easy!~s~"
    00BC: show_text_highpriority GXT '_TEST' time 5000 flag 1
    出力: Take it easy!

fxtファイルを使用する

CLEO3でfxtファイルを使用する場合、\cleo\plugins\gxthook\にあるGxtHook.cleoをGTASA\cleoへ追加してください。
無い場合はCLEO公式から「GXT Hook for CLEO 3」をダウンロードしてきてください。
CLEO4では本体に内蔵されたのでプラグインは不要です。
fxtファイルはcleo\cleo_textに保存してください。

  • fxtの書式
    ABC This is a pen.
    ABCがエントリー名。半角スペースを挟んでそれ以降は全て文字列として扱われます。
    エントリー名がgxtで使われているものと被ってしまった場合、fxt側の文章で上書きしてしまうので、被らないようなものを設定しましょう。
  • 使用例
    00BC: show_text_highpriority GXT 'ABC' time 5000 flag 1
    GXTテーブルを読み込んでいないときにこの命令を実行すると、5秒間「This is a pen.」と表示されます。
    ミッション中ではGXTテーブルが読み込まれているので不具合が起きる可能性がある(未検証)

日本語を表示したい

日本語化が導入されている場合、fxtでも日本語の表示が可能です。

漢字化の場合

ABC これはペンです。

といった感じで、普通にfxtに日本語を書いてください。文字コードをShift-JISにするのを忘れずに。
ただし、漢字化には「一部の文字が半端に特殊文字として認識されてしまい、正常に表示できなかったりクラッシュしたりする」という問題があります。
それを回避するため、編集後のfxtをfxt用の文字コード変換器を使って変換してください。

ひらがな化の場合

ABC This is a pen.

これを日本語にしたい場合

  1. 文字数を数える
    今回の例だと
    This is a pen. → これはペンです。→ これはぺんです。
    で計10文字です。
    濁点・半濁点それ自体を一文字としてカウントすることを忘れずに。
  2. 適当な文字列で文字数分埋めたfxtを作る
    ABC aaaaaaaaaa
    とかで大丈夫です。
  3. 保存した*.fxtをバイナリエディタで書き換える
    先程作ったfxtをバイナリエディタで開くと
    41 42 43 20 61 61 61 61 61 61 61 61 61 61
    となっていると思います。
    0123456789ABCDEF
    2
    3
    5
    6
    8ソ
    9
    A
    この表に従ってひらがなの16進文字コードを求め、適当に埋めた文字列の部分(今回は全て61)を書き換えていきます。
    "ABC "の部分(41 42 43 20)は書き換えないように。
    後ろに0D 0Aとかついている場合、それらは改行コードなのでそれも書き換えないように。
    今回の例だと、書き換えた後のバイナリは
    41 42 43 20 89 A9 99 9C AF AD 92 AE 8C 3E
    となります。
  4. 実際に表示してみる
    00BC: show_text_highpriority GXT 'ABC' time 5000 flag 1
    などで指定してやれば「これはぺんです。」と表示されます。

こうして作ったfxtをテキストエディタなどで開くと、当然ですがおかしな記号などとして表示されます。
開くだけなら平気ですが、保存するとせっかくひらがな化した部分が壊れてしまう場合があるので注意。