莞爾の草原。

RGSS3(RPGツクールVX Ace)や自作のことを主に書いていくブログです。不定期で更新していきます。

パズルスクリプト(コモンイベント)

 このイベントに触れると……

f:id:kanjinokusa0405:20170208134417p:plain

f:id:kanjinokusa0405:20170208134441p:plain

 十字の形に炎が付く。そんなパズルシステムを作るためのコモンイベントです(詳しくはこのゲームを参照

http://www.freem.ne.jp/win/game/14045(宣伝))。

 スクリプト(RGSS3)を使って組んでいますが、システムを変換すればツクールやウディタ全体でも使えると思います。イベント一つ一つにどこの炎をこう消して……みたいに設定することもできるでしょうが、まあそれじゃあ面倒だし、何よりロマンがないですよね(

 これはそんなロマン派の方向けのものです。作り方は簡単。

こうです。

f:id:kanjinokusa0405:20170208135159p:plain

 

 

 

 

 

 いや、こうですって言われても……って感じだと思うので、順を追って詳しく解説していきます。

 

[How To Make]

1.ます、上記のコモンイベントを作ります。

スクリプトはこちらを引用(

begin;s=event_id;v=$game_variables
x=v[9];y=v[10];g=v[12];k=v[13]#主要変数
k=[] if !k.instance_of?(Array)
b=Array.new(x*y) {|i| i+g};a=[s-1,s,s+1,s-x,s+x]
a=a & b;i=(s-g)/x+1;u=g+x*i;r=u-1-x
if x > 1;a-=[u] if s==u-1;a-=[r] if s==r+1;end
for i in 0..a.size
$game_self_switches[[map_id,a[i],"A"]]^=true;end
for i in g...x*y+g;next if k.include?(i)
@b=$game_self_switches map_id, i, "A" 
break if @b==false;end;rescue;end

)。

また、使用する変数はスクリプト二行目で設定されています。それぞれ変更可能です。

x=v[9]#横に並ぶ炎の数(画像では4)

y=v[10]#縦に並ぶ炎の数(画像では3)

g=v[12]#イベントの先頭ID(後述)

k=v[13]#クリア判定を回避する炎ID(後述)

 こんな感じです。ちなみに、全ての炎に炎がつけられたかの判定は、イベント内の@bに格納されます。

 スクリプトの下の条件分岐は、全ての炎が付いたときに実行されるものですので、クリアフラグのスイッチがtrueになるように設定してください。

 

2.次にイベントを作ります。

 イベント1ページ目は炎が付く前の画像で、さっき作ったコモンイベントを呼び出すようにします。

f:id:kanjinokusa0405:20170208141910p:plain

 2ページ目は、実行内容は同じですが、炎の付いた画像に変え、出現条件に「セルフスイッチAがON」を選びます。

f:id:kanjinokusa0405:20170208142039p:plain

 3ページ目は、実行内容は空にして、出現条件に、「クリアフラグのスイッチがON」を選びます。

f:id:kanjinokusa0405:20170208142253p:plain

4.次にマップにイベントを並べます。

 このときに大切なのは、イベントのIDです。

f:id:kanjinokusa0405:20170208143056p:plain

 イベントIDは、必ずこのような、並び順でなければなりません。

 先頭のイベントは左下で、最後尾は必ず右上になければなりません(この通りに並べないと正常に動作しません)。

 上記のスクリプトで描いてあったg#イベントの先頭IDには、この図の+0の場所にあるイベントのIDを代入する必要があります。

 また、上記のスクリプトにあるk#クリア判定を回避する炎ID(後述)は、自由な描写をするために必要な変数で、Arrayで格納されています。これを使うことによって、四角形だけでなく、いろいろな形を作ることができます。

f:id:kanjinokusa0405:20170208145858p:plain

f:id:kanjinokusa0405:20170208145849p:plain

 

 以上です。なにか不足があったらコメントでお伝えください。

莞爾の草でした。