システムカスタマイズで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