ティラノスクリプトでゲームを作ろう!番外編①[if]や[cond]に気を付けよう!
おはこんにちばんは! 富井サカナです!
今日も元気にゲームを作りましょう!
ティラノスクリプト記事ってもう相当久々なんですね。
修学旅行やタイマン学園のあれやこれやが溜まってますので、
また制作が落ち着いたら記事まとめようと思います。
(私自身「自称」中級者なので完全に初心者の方向けですよ!)
今作っているゲームが完成したら、
ティラノスクリプト関連記事を備忘の為に色々残すつもりですが、
それに先駆けて"if"や"cond"周りの注意喚起だけしておきます!
はじめに
本記事をぱっと見て「そもそも何言ってるのか良く分からない」
と思われる方がいたら上級者もしくは超初心者の方と思いますので、
上級者の方は生暖かい目で見守って頂くこととして、
超初心者の方はまずは以下からご参照ください!
■タグリファレンス
慣れるまでは常にこのサイトを開きながら制作するべしな重要サイト!
■ティラノスクリプト 製作テクニックwiki
初心者向けに丁寧に書かれている部分も多いとっても有用なサイト!
というわけで早速いきましょう!
全て『市立タイマン学園』の制作時に実際に発生したものです!
👇いきなり宣伝を入れてくるパターン👇
2022年8月末~9月初に公開予定です!
1.[If exp="条件"]の"条件"の中に"="
一番オーソドックスなミスになります。
〇[if exp="tf.flag_01 == 1"]
✖[if exp="tf.flag_01 = 1"]
ってやつですね。
プログラムとかに元々親しんでいない人からすると
「変数」=「条件」ということで等号的に正しそうですが全然ダメです。
感覚的には"="は"⇒"を意味していて、
"=="と2つ重ねて初めて"="の意味になると言ったところでしょうか。
(パラメーター指定は"="で良いので変数に限った話ですが)
「こんなミスしないよな~」と注意などを見て自分でも思いますし、
スクリプトを自分でパチパチと打っている時はミスはもうしないのですが、
[eval]の規定からコピペで持ってきて修正失念してるパターンでありえます。
2.cond属性の中に"="
〇[jump target=*scene_02 cond="tf.flag_01 == 1"]
✖[jump target=*scene_02 cond="tf.flag_01 = 1"]
上と同じじゃねーか!という話ですがこちらもほぼ同じ頻度でやります。
"if"や"cond"を使う時には必ずその中は"=="です!
頭で覚えるのではなく、目で見て違和感に気付けるようにならないとです!
ちなみにこの状態だとcondの中身は無視されてなかったことになります。
エラーメッセージが出ないので、プレイして気合で違和感を感じ取るしか!
[jump ~~~ cond="条件"]を並べて置いて、
いずれかの条件に引っかかったらどこかに飛ぶようにしている場合は
初めのjumpで確実に飛ばされてしまいますし、
[image ~~~ cond="条件"]を並べて置いて、
条件によって表示される画像が変わるようにしている場合は
全ての画像が表示されてにぎやかになります!
3.[If]タグと[endif]タグの数がずれる
テストプレイを行っていてたまに発生する悲劇。
「[if]と[endif]の数が異なります」 えー、そんな殺生な。
たった今直していたところが該当していれば問題ないのですが、
・ksファイルの行数が4桁後半~5桁くらいになってる
・調子に乗ってスクリプトいじりまくってた後に気付く
・";"や"*/"で無効化しているものもあって検索ヒット数が無意味
・インデントしていないので視覚的に見つけにくい
みたいな状態が合わせ技でやってくると大変です。というか大変でした。
(みっちりデバッグが必要な時に起きたので問題なかったですが)
4.逆に[Eval exp="条件"]の"条件"の中に"=="
〇[eval exp="tf.flag_01 = 1"]
✖[eval exp="tf.flag_01 == 1"]
ってパターンです。
私は(普通は?)先に変数を規定してから条件を設定することが多いですが、
たまに「あ、ここでも変数ゼロにしとこうっと」みたいなことがあります。
その場合、ifのタグから"=="のまま持ってきたりして起こる状況です。
残念ながらこの[eval]タグではエラーメッセージは確か出ないので、
こちらも一度発生してしまうと自力で気付くまでタイムラグがあります。
5.cond属性を"cond=="条件""としてしまう
〇[jump target=*scene_02 cond="tf.flag_01 == 1"]
✖[jump target=*scene_02 cond=="tf.flag_01 == 1"]
「"cond"を使う時は絶対に"=="だからな!」という意識が強くて、
「condは"=="だ!」とだけ念仏のように頭で繰り返していたら、
「cond=="変数 == 条件"」としていることがありました。
いや、"="重ねるのそこじゃねーから!という。。。
ちなみにこの"cond"も単純にまるっと無視されてエラーが出ません。
6.">="じゃなくて"=>"としてしまう
〇[if exp="tf.flag_01 >= 1"]
✖[if exp="tf.flag_01 => 1"]
~以上とか~以下というのは学校で習った時は"≧"であり"≦"でした。
不等号は等号の上に置くものだ!という常識が染みついているため、
スクリプト上で等号より前に来るのか後ろに来るのか分からなくなります。
この間違いの場合も確かエラー表示はなかったような気がします。
これは最後に全ksファイルを"=>"と"=<"で検索すればチェックできますね!
7.”elseif"としてしまう
〇[elsif exp="tf.flag_01 == 2"]
✖[elseif exp="tf.flag_01 == 2"]
こちらは今作ではなくスクリプト初めて直ぐの頃に良くやってました。
英語のelseのイメージが強いのでelsifに違和感を覚えてました。
調べてみたら他のコンピューター言語では"elseif"使うこともあるそう。
へ~。もう色々使ってたら絶対に混乱するやつじゃんか!
ちなみに今ではelsifに完全に慣れたので、
"elseif"を採用している言語を使ったら絶対しばらく間違えそう。
8.変数特定時にtf.を忘れる
〇[if exp="tf.flag_01 == 1"]
✖[if exp="flag_01 == 1"]
自作レトロゲーはゲームの雰囲気を損ねたくないので、
デフォルトで準備されているセーブシステムを使っていません。
(デフォルトを改造して見栄えを整える技量がないとも言う)
変数は基本的にほぼ全てtfでしてそこに意識が向いていないため、
"tf."を省略して条件式を書いたりということが割とあります。
おわりに
というわけで今回の記事はここまでとなります!
次回以降の制作時の注意点としてメモっていた発生事例が溜まったので、
noteのネタ切れも相まってこの度まとめてみることにしました。
選択肢のないノベルゲームであっても、
システム上の条件分岐は1つくらいは多分使用することになると思います。
こんなミスをしている人がいるということを頭のどこかに入れておくと、
ひょんなタイミングでデバッグのタイムロスを防げるかもしれません!
以上、富井サカナでした。
みなさまもよき制作ライフを。
↓↓ティラノスクリプトでゲームを作ろう!記事一覧はこちら↓↓
👇入れそびれたCi-enの宣伝を最後に無理矢理入れるスタイル
この記事が気に入ったらサポートをしてみませんか?