見出し画像

今作っているゲームの話05

どうも、にごうです。

今回は現在、開発まっしぐらの『Mortality 夢幻の牢獄』の開発していく中で、そう言われれば当然なんだけど、リファレンスに書いてないから取りこぼしそう、となった事を備忘録兼ねて書いていきます。

まず、僕も使用しているTyrano系統のツール(僕はTyranoStudio Pro)ですが、これはティラノスクリプトという独自の言語を使用しています。

まぁ、それは書いてあるから分かるよ、って話なんですけど、このティラノスクリプトってJavaScriptベースなんですよね。僕も「そういえばそうだな」って気付かされたんですけど。

なんで気付いたかというと、ここ最近、[if]タグによる条件分岐を実装しようとしてたからです。

チャプターセレクト画面。この段階で押せるのは「タイトルへ戻る」のみ
特定の箇所まで進めることで『幽魂の章 前編』の頭から遊べるようになった

やりたいこととしては、上のスクリーンショットのように、シナリオを初めて通過した(読み始めた)時に、そのシナリオの頭から再生できるボタンを開放して、未読に関しては選べないようにする、というシステムを構築することでした。

まずは、変数を作成して、初期は各変数を0に……そして、シナリオの頭で初回時のみそれを1にする処理を入れて、特定のシナリオエンド時にそれをみた証となる変数を1にして……と進めていきました。

そして、いざ、if文を書き始めると困ったことが……。

あれ、[if]タグって重ねられるのかなぁ……(ifの中にif書く=ネストを作る)とか、評価式の中で等しいかどうかの判定はどうするんだ……?と……。

公式ページのタグリファレンス。今後、いろいろ追加される……はず

タグリファレンスに飛んでも実はこれしか記載されていません。

exp = の中で評価するのだが、リファレンス見てる限りでは1つの変数に対してしか評価出来ない、みたいな感じで読み取れますね……(自分だけ?)
というか、これだといちいち直前で計算したりしなきゃいけないので保守性を高める意味でも何とかせねばならぬ……と。

そして、書いたのが……

[if  exp="sf.hoge = 100"]

※sfは『システム変数』にするためのものです(ティラノスクリプトの機能)

まぁ、パッと見合ってると言うか、これでも動くのですが、期待した動きにならず、あれ?……と思いつつ夜遅かったのでその日は、

[if  exp="sf.hoge > 100"]

にして、想定通りの挙動になった所で寝ようとしました。

実際に組もうとしてたスクリプト。バカである(理由は後ほど)

そして、まぁ、ツイートをしつつ整理してて、ふと気付きました。

スクショは18:00ですが、これを書いたのは夜中です

比較演算子は "==" なんじゃね?

……と。

そして、最初に書いたことを思い出してください。

そう、ティラノスクリプトはJavaScriptがベースなんです。

JavaScriptにおいて等価判定をする際に使われる演算子は "==" です。
そりゃあ、何度やっても "=" で等価判定できず、変数に値が入っていくわけです。

あ、ちなみにこういう書き方をしていると「Javaの比較演算子も"=="ですよね」とか「そもそも"="は代入演算子ですよね」とか言われそうですが、その辺は分かってます。
僕が言いたいのはあくまで「ティラノスクリプト独自の書き方があるのかと思っていた。JavaScriptベースなんだから、比較演算子使うよな」って意味で書いてますので悪しからず。

こんな事してたら恥ずかしすぎて元技術者とか言えませんわ……。

ただ、やはり、リファレンスの書き方見てるだけだとちょっと気付きにくいのかなー、って思います。
拡張とかやってて、JavaScript使えるの知ってる、って人はすぐ分かると思うのですが……。

まぁ、そんなこんなで、今は思った通りの魚道になった訳ですが、いやぁ、恥ずかしすぎる。

あと、

[if  exp="sf.hoge==100"]

    [if  exp="sf.hoge2==200"]

        処理内容

    [elsif  exp="sf.hoge2==400"]

        処理内容

    [endif]

[else]

    処理内容

[endif]

※elsifの書き方はティラノスクリプトのタグのため合ってます

みたいな処理も可能でした。
endifはifの数だけ必要なので、間違えないよう……。

そんなこんなで、備忘録兼ねた記事でした。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?