; 組み込みやすいように、「クリック制限を20に固定、スコア表示無しに」 ;組み直してみました。*ongame〜*finder3までがメインセットです。 *define caption "組み込み型" humanz 100 windowback ; humanzは、ld命令で表示される「立ち絵」と、スプライトとの ;層順を指定します。記述した数値より若い番号のスプライトは、 ;立ち絵の上に表示されます。 ; windowbackは、humanzで指定されたスプライトと立ち絵の間に ;テキストウィンドウを表示するようにします。humanzと併用。 ;テキストウィンドウの上にスプライトを重ねたい時に使います。 ;・組み込む際に、以下の変数やスプライトは弄らないで下さい・ ;%2,%3 ターゲット(★)の配置座標。 ;%6 メッセージと終了判定。11〜19の値を取ります。 ;%7 クリック数 ;$0〜$20 メッセージ及び全角数字 ;sp10 ターゲットの★ ;sp11 クリック数に付随する「Click」文字 ;sp12 クリック数 ;・------------------------------------------------------・ game *start goto *ongame *ongame ; 画面設定 setwindow 20,20,30,10,20,20,0,5,20,1,0,#000000,0,0,640,90 erasetextwindow 0 ; erasetextwiddowに1を指定すると、テキストウィンドウはCG描画 ;の度に消えるようになります。 lsph 10,":s/40,40,0,0;#ffaa44#ffaa44★",0,0,255 lsph 11,":s/20,20,0,0;#ffcc88#ffcc88Click",520,65,255 ; 以下、カウント変換テーブル用、及びクリックメッセージ mov $0,"0" mov $1,"1" mov $2,"2" mov $3,"3" mov $4,"4" mov $5,"5" mov $6,"6" mov $7,"7" mov $8,"8" mov $9,"9" mov $10," " mov $11,"発見〜。" mov $12,"メチャクチャ近いです。" mov $13,"だいぶ近いですよ?" mov $14,"このへんにいるような気が…。" mov $15,"見当たりません。気配はするんですが。" mov $16,"まだまだ遠いですねー。" mov $17,"どこ探してるんですか。" mov $18,"アンタそりゃ論外だよ。" mov $19,"それだけは、絶対ないです(汗)。" ; 以下、実画面処理 ; 背景画像を変える場合は、下のbg命令を弄って下さい。 bg black,1  画面の青い部分のどこかに、#ffaa44★#ffffffが隠れています。 delay 800 textclear  適当な場所をクリックして、返ってくるメッセージをヒントに、隠れてる#ffaa44★#ffffffを見つけてください。 delay 1500 textclear goto *newfinder *newfinder ;開始画面処理です。 ;%2と%3が*finder2に、%7が以降に継承されます。 ; クリック数を0にしておきます。 mov %7,0 bg #335588,10,500 br #ffcc66        New Game Start!! #ffffff delay 1000 textclear vsp 11,1 :print 1 ; 以下、★をランダムな位置に配置する作業。 ; ★はlsphで読み込んでいるので、画面には表示されません。 rnd2 %2,10,590 rnd2 %3,100,430 amsp 10,%2,%3,255 print 10,200 goto *finder2 *finder2 ;画面のクリックから、ターゲットとの距離判定までです。 ;%6と%7が以降に継承されます。 clickpos %0,%1 if %1<90 mov %6,19 :goto *finder3 mov %4,(%0-%2-20)*(%0-%2-20) mov %5,(%1-%3-20)*(%1-%3-20) add %4,%5 if %4<=400 mov %6,11 ;r<=20 if %4>400 && %4<=1600 mov %6,12 ;201600 && %4<=6400 mov %6,13 ;406400 && %4<=14400 mov %6,14 ;8014400 && %4<=25600 mov %6,15 ;12025600 && %4<=40000 mov %6,16 ;16040000 && %4<=57600 mov %6,17 ;20057600 mov %6,18 ;r>240 ; カウンターを回す。 inc %7 ; 以下、クリック数表示処理(以前サブルーチンだった部分)。 ; スプライト文字列全体を、文字変数に格納する。 mov %0,%7/10 if %7<10 mov %0,10 mov %1,%7 mod 10 mov $20,":s/20,40,0,0;#ffffff#ffffff" add $20,$%0 add $20,$%1 add $20,"/20" lsp 12,$20,420,50,255 print 1 goto *finder3 *finder3 ;クリック位置からの反応メッセージ。 ;クリア、ゲームオーバー、継続、の分岐処理です。 if %6==11 vsp 10,1 :print 10,200 :delay 1000 $%6 ; %6の値によって、$11〜$19の文字列がテキストとして表示されます。 ; %6の値は、*finder2で設定されています。 delay 500 if %6==11 goto *nextgame if %7>=20 goto *gameover ; %6==11なら、ゲームクリア。%7>=20なら、ゲームオーバー。の処理。 ;%7>=20を先にすると、場合によっちゃオカシな処理になります。 ; どちらでもなかった場合は、*finder2へ戻ってクリックを待ちます。 textclear goto *finder2 *gameover ;制限以内にターゲットを見つけられなかった場合、ここに跳んできます。 ;そのままシナリオへ跳んでOKですが、画面上のスプライトを整理しときましょう。 delay 500 textclear delay 200  制限回数以内に、#ffaa44★#ffffffを見つけられませんでした。 delay 800 textclear  ちなみに正解は/ vsp 10,1 :print 10,200 :delay 400 ここでした。 click textclear vsp 10,0 :vsp 11,0 :vsp 12,0 :print 10,200 bg black,10,400 delay 600 goto *outgame *nextgame ;制限以内にターゲットを見つけた場合、ここに跳んできます。 ;どこへ跳ぶにしても、画面を整理しておきましょう。やっぱり。 delay 1000 textclear vsp 10,0 :vsp 11,0 :vsp 12,0 :print 10,200 bg black,10,400 delay 600 goto *outgame *outgame goto *newfinder