ティラノスクリプトでゲーム制作したときのメモ

テキストベースのゲームを1本公開しました。 とりあえず思い出した順でこの記事に追記して、長くなりそうなものはあとから別記事に分けます。

ティラノスクリプト v597b 時点の内容です。

目次

ptextのこと

  • <br>で改行できる
  • HTMLエンティティ(&ensp;)が使える
  • メッセージレイヤ、前景レイヤーより上に表示したいときはlayer="fix"にする
  • nameを付けておくと画面から消すときに[free layer="fix" name="A, B, C"]カンマ区切りで複数まとめて消せる

エラー全般

エラーが起きている場所が分からないときは、素直にConfig.tjsでdebug=trueにする。コンソール部分、エラー右端の「VMxxx:xxx」をクリックすると、エラー箇所を表示してくれたりする。

Cannot read property 'find' of undefined

ゲームを起動してわりとすぐ出てきた場合。 使用するメッセージウィンドウや前景レイヤーの数が、Config.tjsで指定した数より多いのが原因かも。

システム画面も画像も使わないからと、前景レイヤーを0にしていたときに出た。

Unexpected token '?'

[iscript]内でNull合体演算子を使った部分で出た。

const name = obj.name ?? "John";

ティラノスタジオ内部のGoogle Chromeはバージョン78。Null合体演算子はバージョン80から使える。調べて出てきたJavaScriptがスタジオでも使えるかどうか確認してから使う。

参考リンク:Null 合体 (??) - JavaScript | MDN

Invalid or unexpected token

Cannot read property 'pm' of undefinedと一緒に出てくることもある。

[iscript]の中のJavaScriptに入力ミス(イコールが抜けたりかっこを閉じ忘れたり)があるとよく出る。雑にコメントアウトしたときも出る。複数行コメントはちゃんと改行する。

[iscript]
// OK
/*
if(test) {
  const a = "A";
}
*/

// NG 改行しないとエラーになる
/* if(test) {
  const a = "A";
}
*/
[endscript]

Cannot read property 'caller' of undefined

ロード後、fixボタンを押して開いた画面を閉じたあとに出たエラー。

fixボタンなど常時画面に表示するものは、make.ksで[clearfix]などで一度消して、再度表示しなおす。しないとエラーになるから。

Cannot find module 'jquery'

layer_obj_click.swipe is not a function と一緒に出てくる。

ティラノスタジオの左メニュー->プレビュー->ゲーム再生で「デバッグを表示する」にチェックを入れる。ゲームを再生する。

Toggle device toolbar(Ctrl+Shift+M)を「オン」にすると、スマホやタブレットではどう見えるか確認できる(バックログの上下矢印が出てきたり)

chrome devtoolsのtoggle device toolbarの場所

この状態でリロードボタンを押すと出てくるエラー。リロードするときはオフにする。表示確認したいときだけオンにする。

Cannot find module 'nw.gui'

ノベコレバッジが取得できるか初めてテストして、取得用タグ[give_emblem id="xxxx" pid="xxxx]を通過するときに出た。

ティラノスタジオのコンソール部分で、Toggle device toolbar(Ctrl+Shift+M)を「オフ」にすると消える。

その他

ノベコレ掲載用のスクショサイズ

ティラノスタジオで新規作成時に選べるサイズに合わせて2回撮りなおしたけど、どちらも画像の端が切れた。

「973x615px」1.582:1? でいい感じに収まった。

参考リンク:【ノベコレ】作品を登録しよう|ねこの|note

ティラノスタジオでのスクショの撮り方

Toggle device toolbar(Ctrl+Shift+M)を「オン」にして「More options」から「Capture Screenshot」をクリックする。保存場所を指定して保存。

Toggle device toolbarが「オフ」の時は「リロード」ボタンをドラッグして画面外へ放り投げられる(=きれいなスクショが撮れる)

chrome devtoolsのmore optionsとcapture screenshotの場所

なんてことをしなくてもコマンド(Ctrl+Shift+P)で撮れることをこちらのツイートで知った。

[if]の中で[jump]しない

[if]の中では行き先を変数に代入するだけ。[endif]のあとに[jump]する。

[if exp="条件…"]
  [eval exp="f.target = 'choice_a'"]
[else]
  [eval exp="f.target = 'choice_b'"]
[endif]
[jump target="&f.target"]
[s]

stackか何かの関係でときどき思った通りに進まなくなる。とても静かにおかしくなった。

アンチエイリアス設定がWin無効の理由

Mac OS X/macOSだけがサポートしているCSSプロパティを使っているから。

Config.tjsの;defaultAntialiased = 1 or 2;は、CSSのfont-smoothing/webkit-font-smoothingでアンチエイリアスを適応している。

参考リンク:font-smooth - CSS: Cascading Style Sheets | MDN

Twitterカードに古いスクショが表示される

ノベコレでスクショを差し替えても古いものが表示される場合。たぶんTwitter側に古い画像のキャッシュが残っている。

Card Validator | Twitter Developersで、作品ページのURL(novelgame.jp/games/show/xxxx)を入力して、新しい画像でTwitterカードが表示されるか確認する。何度か繰り返すと反映される。

おわりに

エラーが出てその原因がどこか分からないと気が遠くなります。

制作時の思い出は、モンスターの攻撃方法とドロップアイテムを考えているとき「ムカデ」を画像検索してSAN値がごっそり減ったことです。