テキストボタンを試してみた。

NScripterでは、「テキストボタン」と言うものが使えるらしい。
どういうものかと言うと、出力したテキストの一部を、マウスでクリックできるボタンにして、さらにはそれがクリックされたかどうかを調べられるようだ。
で、実際に導入するに当たっては、システムカスタマイズすることが前提になる。これがわからない人はここでおさらばブラウザバック。
まずは、最小限の構成でやってみる。

00.txt

*define
	textgosub *click_wait ; シスカマ。表示文中に@か\があったら、このラベルにgosubする。
game

*start

テキストボタンテストをします。
<100ここ>をクリックしてみてください。\
; <と>で囲まれた部分がテキストボタンになります。
; 数字は実際には表示されません。数字がボタン番号になり、ボタンがクリックされたかどうかは、この番号で調べます。
; ボタン番号を省略すると、デフォルトでは表示される順番に1から割り振られます。textbtnstart命令で最初の数字を変更できます。

end

*click_wait
	btndef "" ; これをしておかないとボタンが反応しません。
	; クリック待ちの命令は、以下の4種類のうちのどれかが使えますが、
	; 下二つはテキストウィンドウが消えるので実際には使えません。
;	selectbtnwait %100
	textbtnwait %100
;	btnwait %100
;	btnwait2 %100
	; また、bexecは全くの埒外です。
	; もし、テキストボタンが押されたなら、そのボタン番号がこの場合は%100に格納されます。

	; サンプルなので、何が押されたかを表示
	itoa $100,%100
	caption $100

	erasetextbtn ; テキストボタンを消す。
	texec ; 改ページなら、textclearする。
return

オプションとして、

linkcolor
テキストボタンのマウスの乗っていない時の色と、乗っている時の色を指定できる。
textbtnoff
一時的にテキストボタンを無効にする。これをしておかないと、他のボタンクリック待ちでもテキストボタンが生きてしまう。
getbtntext
テキストボタンの番号を指定すると、そのテキストボタンになっている文字列が取得できる。

スプライトとの連動

textexbtnと言う命令がある。これはテキストボタン版のexbtn命令であり、テキストボタンにマウスオーバーした時やクリックした時の動作に、さらに他の動作を追加できるようにする。
一例としては、画面内に情報を教えてくれる妖精がいて、表示文中のキャラクターの名前をマウスオーバーすると、その説明を表示する、のように使える。

色々実験をしてみる。

; puttextにくるんでみる。
puttext "テキストボタンテスト<100ここをクリック>してみてください。\"

動いた!

; rubyを絡めてみる。その1
テキストボタンテスト<100ここを(CLICK/クリック)>してみてください。\

フリーズした!

; rubyを絡めてみる。その2
テキストボタンテストここを(<100CLICK>/クリック)してみてください。\

表示がおかしくなるけれども、動いた! CLICKの部分だけがボタンになった! rubyと絡める時は、番号の指定はない方がよいかも。外見を気にするなら、やらない方がよいかも。

; rubyを絡めてみる。その3
テキストボタンテストここを(<CLICK>/クリック )してみてください。\

ルビの後に全角スペースを一つ入れると、まあまあちょっと見苦しい程度になる。

; rubyを絡めてみる。その4
テキストボタンテストここを(CLICK/<100クリック>)してみてください。\

クリックはできたけれども、その後でフリーズした! ルビをボタンには使えない!

まとめ

うんまあ、色々面白いこともできそうだけど、古い方の入力システムを使わなければならない点が非常に問題です。

どうしよう

nsluaと絡めるなら、ほぼ相当な機能をbexecとスプライトで実装できそうです。