夜鷹偽者計画
趣味の虹絵を細々と研究する落書きブログ。
Entries
同人ソフト作るよ!の4;分割したり分岐したり
さて、前回はテキストを表示するところをやった。
今回はテキストの2、「テキスト分割」と「分岐」をやっていこう。
テキスト打ちがある程度進むと、多分テキストで0.txtが膨れ上がっていくことだろう。
えー、ちなみに私は00.txtとして使っているので、そちらに表記を統一するとしよう。システム的にもそちらを推奨してるし。
テキスト量が多いときには、以下のこともあって、二桁表示可能な形にする方が都合がよいので。
そこで、「テキスト分割」を、場面転換などで適宜行っていくようにしたい。
具体的には、最初のテキストは00.txtだが、それに続けて01.txt、02.txt……と、テキストを増やしていくことができるのだ。
連続した数字のファイルを順番に読んでいくので、00.txtに書いてある最初のスクリプトの定義設定を、改めて書く必要はない。
00.txtの続きを、どんどん続きナンバーのテキストファイルに書いていけばいいのだ。
ただし。
一番最後のナンバーのファイルには、必ず "end" タグがはいってないといけない。
他のファイルには逆に入れない。入れると、「そこで終り」になるから。
ゲームの終りに入れて、「ここで終りッスよ」というマーカーなのだ。
例えば、00〜08.txtまであったら、08.txtの最後に「だけ」"end"を入れる。
ただし、途中でendが入ってると、スキップしない限りはそこで強制終了になってしまう。
例えば途中の06.txtの最後にendを入れたままだと、07.txt、08.txtの内容は全く表示されないままムダになる。
例外として、下で書くが、「分岐」で「これを選択したらゲーム終了」となるように「あえてしてある」のなら問題はない。
デバッグ用にすぐ終わらせたいときには、「endタグへ飛ばす」よう分岐コマンドで書けばいい。
もちろん、普通に右上の×を押せばいいって話もあるが。
さて、テキスト分割はこれでおkだろう。
次は、ただ一本道として流れていくテキストに変化を出すために、「分岐」を作る。
分岐を作ることで、アドベンチャーゲームらしくなってくるではないか。
さて、分岐を作るためのコマンドは「csel」。「Command SELect」の略ね。
テキストウインドウに選択肢が出て、選んだ先の「タグ」へと分岐が飛んでいく。
ADVサンプルのラストにこんなのが入っていたと思うが、これが分岐コマンドの書き方である。
-----------------
csel "分岐1",*tag1,"分岐2",*tag2,"分岐3",*tag3
-----------------
ウインドウには、↓のような感じで表示されるので、それをクリックして選んでもらう。
-----------------
分岐1
分岐2
分岐3
-----------------
で、クリックされると、それぞれ上から*tag1、*tag2、*tag3と書かれた「タグ」へとジャンプする。
ただ、これはあくまで「選択肢だけの分岐」であって、飛んだあとにまた別の処理を考えなくてはならない。
飛んだ先で、選択肢に応じたフラグ立て(潰し)、パラメータの変化、それぞれの場合に出すテキストを変えたり、表示する絵を変えたり……といった、ことを記述して実行するのである。
これはどういう構造かといえば……
例えばこういう表記をしていると、上のコマンドセレクトから*tag1、*tag2、*tag3へ飛んだあと、
-----------------
*tag1
(イベント1処理をいろいろここへ書く、以下同様)
goto EV4 ;「*EV4へジャンプ」というコマンド(*tag2、*tag3をすっとばす)
↓
*tag2 ↓
↓
(イベント2) ↓
↓
goto EV4 ;「*EV4へジャンプ」(*tag3をすっとばす)
↓
*tag3 ↓
↓
(イベント3) ↓
↓
; こ↓こは別にジャンプしなくてもすぐ↓なので書かない
↓
*EV4 ←←+ ;で、ここへ到着
(イベント4)
end ;終了ー
-----------------
スクリプトっていうのは基本的に、「上から順番に処理していく」のである。
だからこういう「処理をとばす」コマンドがないと、処理の重複があっても省略できないし、選択肢が基本的に作れないのである。
それではスクリプト言語としては欠陥品だ。
↑の例だと、「goto EV4」てのがないと、
イベント1→イベント2→イベント3(→共通イベント4→終了)
と順番に処理していく。
「どんな場合」でも。cselでどんな選択をしても、同じイベントになってしまう。
それぞれのイベントが独立して発生する場合、上から順番に処理していったのではおかしいことになる。
イベントを選択できる状態の場合、どこを選択しても上から順に起こる=「全て同じ」では、選択肢の意味がない。
なので、この分岐が役に立つ。
分岐で選択した番号が、それぞれイベント1・2・3に対応して、対応するイベントだけを起こし、次に移るようにしたい場合には、これを使うことになる。
「goto ××」というコマンドは、「タグ *××へ行け」というコマンドで、処理を指定の場所まで飛ばすコマンドである(飛び先のタグは必ず頭に半角「*」をつけること)。
これで全て、共通イベントタグ"*EV4"へ飛ばすように指定してある。
↑の場合では、イベント1・2・3が分岐選択イベントで、その選択に応じて、
分岐1: イベント1(→2・3飛ばす)→4→終了
となったり
分岐2: イベント2(→3飛ばす)→4→終了
分岐3: イベント3→4→終了
となったりするのである。
これは後に書く「条件分岐」とは別の、テキストのみの「分岐表示」の話で、パラメータを変化させたければ、これに変数(後述)の操作コマンドを加えて使う。
今日のまとめ。
分岐を作ってゲームらしくするよ!
これができなきゃ、アドベンチャーすら作れまへんでー。
分岐の方法は他にもあるけど、とりあえずこれは基本中の基本ってことで。
スポンサーサイト
今回はテキストの2、「テキスト分割」と「分岐」をやっていこう。
テキスト打ちがある程度進むと、多分テキストで0.txtが膨れ上がっていくことだろう。
えー、ちなみに私は00.txtとして使っているので、そちらに表記を統一するとしよう。システム的にもそちらを推奨してるし。
テキスト量が多いときには、以下のこともあって、二桁表示可能な形にする方が都合がよいので。
そこで、「テキスト分割」を、場面転換などで適宜行っていくようにしたい。
具体的には、最初のテキストは00.txtだが、それに続けて01.txt、02.txt……と、テキストを増やしていくことができるのだ。
連続した数字のファイルを順番に読んでいくので、00.txtに書いてある最初のスクリプトの定義設定を、改めて書く必要はない。
00.txtの続きを、どんどん続きナンバーのテキストファイルに書いていけばいいのだ。
ただし。
一番最後のナンバーのファイルには、必ず "end" タグがはいってないといけない。
他のファイルには逆に入れない。入れると、「そこで終り」になるから。
ゲームの終りに入れて、「ここで終りッスよ」というマーカーなのだ。
例えば、00〜08.txtまであったら、08.txtの最後に「だけ」"end"を入れる。
ただし、途中でendが入ってると、スキップしない限りはそこで強制終了になってしまう。
例えば途中の06.txtの最後にendを入れたままだと、07.txt、08.txtの内容は全く表示されないままムダになる。
例外として、下で書くが、「分岐」で「これを選択したらゲーム終了」となるように「あえてしてある」のなら問題はない。
デバッグ用にすぐ終わらせたいときには、「endタグへ飛ばす」よう分岐コマンドで書けばいい。
もちろん、普通に右上の×を押せばいいって話もあるが。
さて、テキスト分割はこれでおkだろう。
次は、ただ一本道として流れていくテキストに変化を出すために、「分岐」を作る。
分岐を作ることで、アドベンチャーゲームらしくなってくるではないか。
さて、分岐を作るためのコマンドは「csel」。「Command SELect」の略ね。
テキストウインドウに選択肢が出て、選んだ先の「タグ」へと分岐が飛んでいく。
ADVサンプルのラストにこんなのが入っていたと思うが、これが分岐コマンドの書き方である。
-----------------
csel "分岐1",*tag1,"分岐2",*tag2,"分岐3",*tag3
-----------------
ウインドウには、↓のような感じで表示されるので、それをクリックして選んでもらう。
-----------------
分岐1
分岐2
分岐3
-----------------
で、クリックされると、それぞれ上から*tag1、*tag2、*tag3と書かれた「タグ」へとジャンプする。
ただ、これはあくまで「選択肢だけの分岐」であって、飛んだあとにまた別の処理を考えなくてはならない。
飛んだ先で、選択肢に応じたフラグ立て(潰し)、パラメータの変化、それぞれの場合に出すテキストを変えたり、表示する絵を変えたり……といった、ことを記述して実行するのである。
これはどういう構造かといえば……
例えばこういう表記をしていると、上のコマンドセレクトから*tag1、*tag2、*tag3へ飛んだあと、
-----------------
*tag1
(イベント1処理をいろいろここへ書く、以下同様)
goto EV4 ;「*EV4へジャンプ」というコマンド(*tag2、*tag3をすっとばす)
↓
*tag2 ↓
↓
(イベント2) ↓
↓
goto EV4 ;「*EV4へジャンプ」(*tag3をすっとばす)
↓
*tag3 ↓
↓
(イベント3) ↓
↓
; こ↓こは別にジャンプしなくてもすぐ↓なので書かない
↓
*EV4 ←←+ ;で、ここへ到着
(イベント4)
end ;終了ー
-----------------
スクリプトっていうのは基本的に、「上から順番に処理していく」のである。
だからこういう「処理をとばす」コマンドがないと、処理の重複があっても省略できないし、選択肢が基本的に作れないのである。
それではスクリプト言語としては欠陥品だ。
↑の例だと、「goto EV4」てのがないと、
イベント1→イベント2→イベント3(→共通イベント4→終了)
と順番に処理していく。
「どんな場合」でも。cselでどんな選択をしても、同じイベントになってしまう。
それぞれのイベントが独立して発生する場合、上から順番に処理していったのではおかしいことになる。
イベントを選択できる状態の場合、どこを選択しても上から順に起こる=「全て同じ」では、選択肢の意味がない。
なので、この分岐が役に立つ。
分岐で選択した番号が、それぞれイベント1・2・3に対応して、対応するイベントだけを起こし、次に移るようにしたい場合には、これを使うことになる。
「goto ××」というコマンドは、「タグ *××へ行け」というコマンドで、処理を指定の場所まで飛ばすコマンドである(飛び先のタグは必ず頭に半角「*」をつけること)。
これで全て、共通イベントタグ"*EV4"へ飛ばすように指定してある。
↑の場合では、イベント1・2・3が分岐選択イベントで、その選択に応じて、
分岐1: イベント1(→2・3飛ばす)→4→終了
となったり
分岐2: イベント2(→3飛ばす)→4→終了
分岐3: イベント3→4→終了
となったりするのである。
これは後に書く「条件分岐」とは別の、テキストのみの「分岐表示」の話で、パラメータを変化させたければ、これに変数(後述)の操作コマンドを加えて使う。
今日のまとめ。
分岐を作ってゲームらしくするよ!
これができなきゃ、アドベンチャーすら作れまへんでー。
分岐の方法は他にもあるけど、とりあえずこれは基本中の基本ってことで。
スポンサーサイト0件のコメント
コメントの投稿
0件のトラックバック
- トラックバックURL
- http://yaounisemono.blog110.fc2.com/tb.php/41-d87936e4
- この記事に対してトラックバックを送信する(FC2ブログユーザー)


