システムカスタマイズでTIPSっぽいものを実装してみる。

虚空に吠えろ!負け犬の遠吠え!! TIPSをつけたいを読んで考えた。
あー、TIPSいーよねTIPS。
そんな訳で、システムカスタマイズをちょろっと使って、TIPSを実装してみた。

使い方

set_tips命令を追加した。

第一引数
TIPS番号(0から、tips_max_num番まで)。好きな数値をつけられる。同じ画面内に複数のTIPSがある場合に使う。
第二引数
TIPS扱いされる文字列。これをクリックすると、TIPSが表示される。
第三引数
TIPSを格納した文字列変数の番号。

 かまいたちの夜、や街のように、テキスト内の文字をクリックすることによってTIPSへ飛べるようなシステムならうまくいくのではないかと思うのですが、

この文章の「TIPS」の部分を、クリックすると説明文が出るようにしたいとする。

 かまいたちの夜、や街のように、テキスト内の文字をクリックすることによって/
set_tips 0,"TIPS",1000
へ飛べるようなシステムならうまくいくのではないかと思うのですが、

このように書き直す。表示される内容は変わらず、set_tips指定した部分だけが赤くなる。
そうすると、クリック待ちになった時、TIPS部分をクリックすると、文章を進めるかわりに、設定したTIPSを表示するようになる。表示されたTIPSを消すには、画面のどこかをクリックすればいい。クリックすると、またクリック待ちに戻る。
どのように表示されるかは、*print_tips以降に設定されているので、好みの背景画像を使うとか、透明度をもっと下げるとか、色々できる。
また、使い方の性質上、TIPSの内容を先に変数に登録しておかなければならない。

注意点

  • 変数を若干使っている。
  • スプライト番号の998と999を使っている。他の部分でこの番号を使っていたら、適宜変更して欲しい。(*print_tips部分)
  • TIPSの表示にはdraw系の命令を使っているので、すべてのスプライトに優先して手前に表示されるため、メタ視点とかを考慮しなくてもよい、はず。
  • システムカスタマイズを使っているので、既にシステムカスタマイズをしている場合は、同時に組み込むのに多少の考慮がいる。応相談。

00.txt

*define

mov %0,100
numalias tips_num,%0:inc %0
numalias tips_word,%0:inc %0
numalias tips_x,%0:inc %0
numalias tips_y,%0:inc %0
numalias tips_width,%0:inc %0
numalias tips_height,%0:inc %0
numalias tips_text,%0:inc %0
numalias tips_max_num,10
numalias font_size,26

dim ?tips_num[tips_max_num]
dim ?tips_x[tips_max_num]
dim ?tips_y[tips_max_num]
dim ?tips_width[tips_max_num]
dim ?tips_height[tips_max_num]
dim ?tips_text[tips_max_num]

numalias system_click,%0:inc %0

defsub set_tips
defsub reset_tips
defsub print_tips

textgosub *use_tips

game
*start
mov $1000,"TIPSってさあ、どうなんだろうね。\\改行ってできるのかな。"

saveoff
 EP5が出る前に一度ネタとかなしのガチ考察オリスクを作りたいと目論んでいるのですが、これがなかなか難しい。@
br
 仮定を設定するには根拠となる箇所をあげなくちゃならないのですが、それをいちいち本文でやっていたらまとまりの無い文章になってしまいます。@
 かまいたちの夜、や街のように、テキスト内の文字をクリックすることによって/
set_tips 0,"TIPS",1000
へ飛べるようなシステムならうまくいくのではないかと思うのですが、じゃあそのシステムをどうやって実装するのよ。@
と言うお話。\
 今回試してみたのは、/
set_tips 1,"TIPS",1000
へ飛ぶキーワードを文字スプライトで表示させ、SPBTNで飛ぶと言う物。\
end

*set_tips
getparam %tips_num,$tips_word,%tips_text
mov ?tips_num[%tips_num],1
getcursorpos %tips_x,%tips_y
mov ?tips_x[%tips_num],%tips_x
mov ?tips_y[%tips_num],%tips_y
len %tips_width,$tips_word
mul %tips_width,font_size
mov ?tips_width[%tips_num],%tips_width+%tips_x-1
mov ?tips_height[%tips_num],font_size+%tips_y-1
mov ?tips_text[%tips_num],%tips_text
; TIPS用文字の色
#FF0000/
puttext $tips_word+"/"
; 元の色に戻す。
#FFFFFF/
return

*reset_tips
for %tips_num=0 to tips_max_num
	mov ?tips_num[%tips_num],0
next
return

*use_tips
erasetextwindow 0
repaint
mov %system_click,-1
clickpos %tips_x,%tips_y
for %tips_num=0 to tips_max_num
	if ?tips_num[%tips_num]=0 jumpf
	if %tips_x<?tips_x[%tips_num] jumpf
	if %tips_y<?tips_y[%tips_num] jumpf
	if %tips_x>?tips_width[%tips_num] jumpf
	if %tips_y>?tips_height[%tips_num] jumpf
	mov %system_click,%tips_num:break
	~
next
if %system_click>-1 print_tips %system_click
reset_tips
texec
return

*print_tips
	getparam %tips_num
	strsp 999,$?tips_text[%tips_num],0,0,20,23,26,26,0,2,1,1,#FFFFFF
	vsp 999,0
	lsph 998,":c;>640,480,#000000",0,0
	drawsp 998,0,128,0,0
	drawsp 999,0,255,8,16
	draw
	click
	print 1
return *use_tips