皆様、お疲れ様です。
私はこれまでPCノベルゲーム(百合)の体験版を作成していましたが、先日ついに製品版を完成させられました!
終末百合(R15~18)というニッチなゲームですが、多分内容は面白いです!
まずは、どんな記述を「first.ks」に行ったか
さて、そんなものの制作の最中に私は真ルート作成……
つまり一定数のシナリオクリアにてタイトル画面の変化と隠しエンドの発生が出来れば面白いのではないかと考えました。
都合よく、小説版本編もPROLOGUE、番外、ルート、グランドルートに分けて書いていましたし。
さて、しかし使っているのはちょっと背伸びしてティラノスクリプト。
ならば少しはテンプレ使うだけでなく記述せねばなるまいと発奮しました。
シナリオフォルダの中でも基本的にゲームで最初に呼び出される「first.ks」というファイル。
それにシナリオからタイトル画面に戻る前に必ずリンクをさせるようにしてからとある記述を行いました。
それが、以下となります! ※ご覧の通り蕎麦はTeraPadでやってます。
うむむ……私は書いた本人ですから多少理解出ますが、ローマ字と記号ばかりでなんじゃこれですよね?
でも理解したいな、という方のためにもそれでは、一つひとつ解説していきたいと思います!
取り敢えずは意味だけでも
色々と書いてありますが、取り敢えず一つ一つ進めていきます。
これは、簡単ですね。keyconfigを止めろ。
つまり、キーコンフィグ(マウス、キーボード、タッチなどのあらゆる操作)を無効化するという意味です。
これは、今回直接は関係ありませんが、[start_keyconfig]というものとセットで使うこと、覚えておいて下さい。
(私はシナリオの最初に必ず[start_keyconfig]を入れるようにしています)
これが効いている間は、特にタイトル画面などを不自由にさせその分ある程度画面情報をスッキリさせられます。
上記は二行となっていますが、実際意味合い的にはセットです!
意味は、もし「sf.clear」の定義経験がなければ「title.ks」に移動してね、となります。
さて、「undefined」が未定義というのは英語勉強してた方などは分かると思いますが、「sf.clear」とはなんぞやとなりますよね。
唐突に出てきたこの言葉。しかしちゃんと意味はあるのですね。
後述しますが、シナリオ内に「sf.clear」がスクリプトとして記述されたシナリオ(正確にはsf.clear=true;)を読んだ後にはなんと定義経験を受けたことになります。
つまり、この書き方だとある程度シナリオを進むそれまではずっと「title.ks」への移動が発生するということですね。
次が厄介だったこの文です……長ったらしいですが、&や=の個数を一つミスしただけでもう意味が通じなくなりますのでご注意を。 ※二敗
まあ、訳すと意外と簡単です。
もし前の[if]または[elsif]が違った場合に、sf.ed1~7までの記述を経験していたら「title3.ks」に移動してね、となります。
はい。ここで出てきました謎の文言「elsif」。(elseifではないので注意です)
これは、前述の通り前の[if]または[elsif]が違った場合にという意味合いとなりますね。
つまり、前のもし「sf.clear」の定義経験がなければ「title.ks」に移動してね、じゃない、つまり「sf.clear」を経験している状態でもし、という場合ですね。
これは、私のルートが複雑だったため間に挟んだのでした。
私「sf.clear」(共通ルート)まで行かせてからエクストラ(個別ルート)を開放、その上で真エンド開放をさせようと目論んでいたのですね。
この部分は、本当のところ「sf.clear」(共通ルート)、「sf.ed1~7」(個別ルート)を経験してたら真エンドのためのタイトル「title3.ks」に移動出来るよ、ということとなります。
個別ルートなどなければ、あまり要らない文章かもですね……面倒くさいことしてすみません!
ただ、似たようなことをしたいと思っていた方の参考になれば幸いですー。
さて、ここまで来たなら理解できる方も多い(と嬉しいです)かもしれない、記述。
もし前の[if]または[elsif]での結果が違った場合に、「sf.clear」を経験していたら「title2.ks」に移動してね、となります。
はい、これを私は共通ルートクリア:「sf.clear」したらエクストラタイトル:title2.ksへの移動が可能になるよ、という利用の仕方をしています。
「else」ということでこれまでの記載全部違ったら、この文がやっと活かされるのですねー。
そして最後の締め。
意味は[if]文の終了、ですねー。何事もはじめたら終わらせるのは大事です!
それ以外にしないといけないこと
さて、取り敢えずは「first.ks」内に書いたことはお話できました。
そして、その上でじゃあこれで終わりかと言えばそうではありません。
そう、シナリオに「sf.clear」と「sf.ed1~7」を記述しなければいけないのです!
まあこれはそんなに難しくはありません。
私はまず共通ルートの終わりの辺りに以下を仕込みました。
正直なところ、ここらはあまり分かって使っていません。
[iscript]と[endscript]の間にJavaScriptを用いた変数を入れられる、ということなのですが……まあ、取り敢えず簡単に「sf.clear」経験を定義出来る方法の一つということでしょう。
ちなみに、ここでの=は一つだけです! お間違えなくー。※一敗
これを共通シナリオ最後辺りに仕込めば、一つは完成ですー。
そして、次は個別ルートに「sf.ed1~7」を仕込む段ですね。
ほぼ一緒ですが、取り敢えず例示する「sf.ed1」はこんな感じですね。
sf.ed1~7まで間違いなく仕込むのですね……ちょっと大変ですが、シナリオ数少なければ楽ですよー。
すると、処理が[if]、[elsif]、[else]の順で行われて判断されていきます。
もし書き間違ってなければ多分最終的に「title3.ks」※真エンドへとたどり着けるかと。
ぜひ、上記アレンジの上お使い下さいー。
終わりに
if文面倒……これは、プログラミング文を目にしたはじめたての方々の多くが感じるところかと思います。
ただ、まだまだひよっこ極まりなく上記も恐らく非効率だとは思うのですが、何とか私も動かせました。
しかし真エンドについて調べると、意外とティラノビルダーについてばかりが出てしまうので、少しでもお役に立てればとこんな文章を書いてみました。
分かりにくかったかもしれませんが、僅かでもお役に立てればと思ってなりません!
コメント