ティラノスクリプトではじめてのノベルゲーム制作をした (作業編)

前回の記事

wandervogel.hateblo.jp

でティラノスクリプトで制作してノベルゲームコレクションで公開中の「探しものは、夏ですか。」を制作するにあたって使用したツール類を紹介しました。
今回は実際に僕の行った作業の中で、「制作開始時と終了時で大きく方法が変わった部分」について記事にしてみようと思います。

具体的には

  • マクロの使用方法
  • シナリオ担当者から貰うテキストをシナリオファイルにする時の手順
  • プリロードのファイル等、いくつかの作業の自動化
    の3点です。

当然、ティラノスクリプトを使用しない方にはあまり関係のない話となりますので、その点はご了承ください。

その前に宣伝!笑

探しものは、夏ですか。

f:id:unity-ta:20180905221709j:plain

2018年8月、数年ぶりに帰省した田舎町で僕は何故かビー玉を探す不思議な女の子と出会った。
「──じゃあ、私のお願い……聞いてくれない?」
きっと忘れることのない、僕の見つけた平成最後の夏休み。

https://novelgame.jp/games/show/1111

圧倒的夏感を感じていただければ嬉しいです。

ティラノスクリプトではじめてのノベルゲーム制作をした (作業編)

マクロの使用方法

ティラノスクリプトにはいくつかのタグのまとまりをマクロとして登録し、呼び出す便利な機能があります。
このマクロですが、使い始めた頃は適当に書いていたものの、途中で大きく方針を変更したところ大変効率が上がりました。
そこで、「マクロはこんな感じで書くと調子いいよ」という意味を込めて、今回実装したマクロの作成ルールについて説明したいと思います。

1.命名規則

ティラノスクリプトはたぶん歴史的な経緯により、タグの命名が実装された時期等によって異なります。

たとえば、 [reset_camera][resetdelay]といった具合に、lower_snake_caseだったり、アンダーバーがなかったりします。
また、[chara_show][playse]のように、[名詞_動詞][動詞名詞]も存在します。
あまり詳しくはないのですが、タグの源流が吉里吉里から続いているらしいという経緯を鑑みると、ティラノの実装がこのようになっているのは仕方ないのだろうと思います。
しかし、初心者からするといかんせん覚えづらかったりします。
シケモクMKさん、今のタグをdeprecatedにしろとはいいませんが、ぜひラップした新タグの実装を……

そこで、

  • マクロは[動詞_名詞(_補足)]で書く

を徹底するようにしました。

2.すべてのパラメータにデフォルト値を設定したラッパーマクロを作成する

まずやったことは標準のタグをラップしただけのマクロを作ることです(よく使うものに限り)

たとえば標準で存在するレイヤの表示非表示を切り替えるタグlayoptであれば

;メッセージ枠隠す
[macro name="hide_mes"]
    [layopt layer=message0 visible=false]
[endmacro]

;メッセージ枠表示
[macro name="show_mes"]
    [layopt layer=message0 visible=true]
[endmacro]

といった具合にラップしました。
余談ですが、マクロの定義では[macro name=~~]から[endmacro]の中はインデントすることで可読性が上がります。
シナリオファイル内でも、例えば暗転と暗転解除の間などインデントを利用すると可読性がよくなるのでオススメです。

また、引数(パラメータ)のあるタグについてはなるべくデフォルト値のある状態で定義しました。

; --- 暗転.
[macro name=start_dark]
    [backlay]
    [image layer=3 page=back folder=bgimage storage=black.jpg name=black width=1280 height=720 top=0 zindex=99]
    [trans layer=3 time=%time|500 wait=true]
    [wt]
[endmacro]

; --- 暗転解除.
[macro name=finish_dark]
    [backlay]
    [free layer=3 name=black page=back time=%time|500]
    [free layer=3 name=black page=fore time=%time|500]
[endmacro]

といった感じですね。

3.アスタリスクは使わない

アスタリスク(*)をマクロ内で利用すると呼び出し側でパラメータを決めることができます。

[macro name=change_message_visibility]
    [layopt layer=message0 *]
[endmacro]

と設定した場合、呼び出し側は[change_message_visibility visible=true]と呼び出すことができます。
これは便利な機能ですが、僕は今回使わないようにしました。その理由は上記の「デフォルト値」にこだわったためです。
背景変更時のwidthheightといったパラメータはおおよそゲームを通して、同一の値が設定されることが多いと思います。

下記が「サガナツ」で使った背景トランジションのマクロの定義になります。

; - 背景変更 -
[macro name=transition]
    [backlay]
    [image layer=%layer|1 page=back folder=%folder|bgimage storage=%storage name=%name|name width=%width|1280 height=%height|960 top=%top|-100]
    [trans layer=%layer|1 time=%time|1]
    [wt]
    [free layer=%layer|1 name=%delete_image|"" time=1 wait=true]
[endmacro]

呼び出し側は[transition name=back storage=back.jpg]と呼び出すこともできますが、[transition name=after storage=after.jpg width=2560 height=1920 time=1000 delete_image=before]といったようにパラメータも設定できます。

この3つのルールを徹底したところ、シナリオファイルの可読性が一気に上がりましたと思っています。

以下、背景変更時の記述の比較です。

;macroの作成なし
[layopt layer=message0 visible=false]
[backlay]
[image layer=3 page=back folder=bgimage storage=black.jpg name=black width=1280 height=720 top=0 zindex=99]
[trans layer=3 time=500 wait=true]
[wt]
[backlay]
[image layer=1 page=back folder=bgimage storage=hoge.jpg name=hoge width=1280 height=960 top=-100]
[trans layer=1 time=1]
[wt]
[free layer=1 name=fuga time=1 wait=true]
[backlay]
[free layer=3 name=black page=back time=500]
[free layer=3 name=black page=fore time=500]

という冗長な記述が

;macroを利用
[hide_mes]
    [start_dark]
        [transition name=hoge storage=hoge.jpg delete_image=fuga]
    [finish_dark]
[show_mes]

と簡潔になります。

シナリオファイル作成時の手順

まず、サガナツの制作ではシナリオ担当者にはプレーンテキストでシナリオを書いてもらったうえで、いくつかのルールを守ってもらいました。

  • コメントを入れる行は行頭に*を入れる
  • 鉤括弧の前の名前欄に表示したい名前には+をつける

など。

これをおこなったテキストファイルは、

*会話シーン

+k
「これは会話シーンだよ」
+女の子
「そうなの?」

彼女は不思議そうな目でこちらを見つめている。

といった感じになります。
(頻出する名前は+k等の省略方法を決めました)

その上で上記形式のテキストファイルから、ティラノスクリプトで利用する拡張子.ksのシナリオファイルに変換するコンバータをpythonで書くことで効率をあげました。
具体的には+/+を#に置換したり、*/*を;に置換。:ファイル名とした行にファイル名.jpgに背景を変更するタグを挿入。
」で終わっている文の次の文が#で始まらない時は名前欄の表示を消すために#1文字の行の挿入、タグやコメントではじまらない行末に[p]を追加……
のような感じですね。 pythonのソースを公開してもいいんですが、ちょっと雑に書きすぎて恥ずかしいので、リファクタする気分になったら記事にしますw

コンバータによって

*もとのテキストファイル
+女の子
「場面転換!」
:hoge
+男の子
「場面転換したよ」

というプレーンテキストをボタンひとつで

;もとのテキストファイル
#女の子
「場面転換!」[p]
#
[hide_mes]
    [start_dark]
        [transition name=hoge storage=hoge.jpg]
    [finish_dark]
[show_mes]
#男の子
「場面転換したよ」[p]

といったように変換できるようになりました。

もちろん、ここから調整やら演出追加やらを行うのですが、ゼロからやるのに比べて何倍も作業速度が上がりました。(このツールを作るまではちまちまエディタの置換機能使ってました。ちょっと正規表現に強くなれた気がするのでいい経験ですw)
なので、ちょっとpython書いて単純な作業はツール任せにしていくと幸せになるなぁと、極めて当たり前でとっても重要なことを再認識しました。
pythonは割と初学者にもオススメできる言語なので、pythonナニソレな方もこれを機にpythonを一緒に勉強しましょう!w

その他、一部の自動化

まず、サガナツはタイトル画面の前にリソースファイルのプリロードを行っているのですが、このプリロードをスクリプト(正確にはスクリプトインナーのjs)で書くと、各リソースのパスの配列を定義しなきゃいけなくて。
タイポ怖いし、リソース変えていちいち変更しなきゃいけないの面倒だったので、これもpythonで自動化。
bgimageフォルダ以下、fgimageフォルダ以下の画像のパスをすべて取得してプリロード時の配列を定義させることにしました。

これで、ひとまずタイポやミスがないので「プリロード対象のリソースがない」といった事態は避けられるようになりました。
こちらも大したコードではないですが、需要があればリファクタして共有します。

他に、これは公開後に作成したのですが、シナリオファイルの中で
* storage=で指定しているリソースファイルが見つからない場合に警告を出す
* シナリオファイル内に閉じられていない[]や、全角の#や;を検知したら警告を出す

といったツールを作成しました。 公開最初のバージョンで上記のミスが残っていた為です。こういう凡ミスはなるべく人の目で確認しないでも発見できる方が幸せです。

まとめ

マクロにしてもpythonで作ったツールとも呼べないレベルのツールにしても、実装者を疑う(補助する)ための方法ですね。
演出や効果音のタイミングなどクリエイティブな作業に時間を使うことは結構ですが、機械的な作業に時間を使うのは無駄だと思い、できる範囲で自動化しました。

特にpreloadのところは人間の手で書いたら100%ミスが絶対出てイラつくだろうなって思ったので。笑 今度はこれらのpythonを順に実行し、警告がなければzipで固めるようなプログラムでも書こうかな、なんて思ったりしてます。
pythonについては参考にはならないかもしれませんが、マクロ作成ルールを決めるというのは結構オススメです。 「マクロの使用回数を減らす」よりも「マクロの記述量を減らす」ことを前提に汎用性のあるマクロの定義を意識すると使いやすくなるなぁといった印象でした。

僕の検索が足りないのかもしれませんが、特定の実装方法についての記事は見られても、ティラノスクリプト全体の使い方や効率化の方法があまり見つからなかったので、今回はちょっと真面目に書いてみました。
マクロにしても、変換ツールにしても、おそらくこのあたりはプロジェクトごとに全然違うものになると思いますので、「こんなやり方をしてる人もいるんだ」程度に思っていただければ幸いです。

ティラノスクリプトではじめてのノベルゲーム制作をした (ツール編)

ご無沙汰になってしまったブログ投稿です。
どうやら僕はブログやSNSが苦手なようで。別に嫌いという意味での苦手ではなく、特に発信についてはそのインターバルを(一般的な)短さで行うことについて、向いていないのではないかと思っています。笑
それで、今日は急に思い立って書き始めたわけですが、流石にノーテーマで一記事書ききることも難しいので、最近公開したゲームの制作環境についてちょっと話をしてみたいと思います。

という書き出しで打ち始めたのですが、思いのほか長くなってしまったので2回に分けて記事にしようと思います笑
今回は「ツール編」ということで制作に利用したツールについて記していきたいと思います。 あ、「この制作環境すばらしいからYOUもこうしなYO!」みたいなつもりはなく、「こんな環境で作ったよ!」という報告のつもりで書いていきたいと思います。
あと、「こっちのツール使うと調子いいよ」みたいなご意見を貰えると僕ぁ嬉しいです。

なお開発機は主に家で使っているMacBookProと持ち運びのGPD pocket(windows)です。

ティラノスクリプトではじめてのノベルゲーム制作をした(ツール編)

作ったモノについて説明(という体の宣伝)

探しものは、夏ですか。

f:id:unity-ta:20180905221709j:plain

2018年8月、数年ぶりに帰省した田舎町で僕は何故かビー玉を探す不思議な女の子と出会った。
「──じゃあ、私のお願い……聞いてくれない?」
きっと忘れることのない、僕の見つけた平成最後の夏休み。

夏をテーマにしたプレイ時間2〜3時間程度の短編(中編)ノベルゲームです。ぜひプレイしてください。
https://novelgame.jp/games/show/1111

ざっくりと概要を説明するとノベルゲームエンジンTyranoScriptを使用しており、僕のほかにシナリオライタとイラストレータ、BGM担当の方がいて、僕は主にスクリプトと雑用係をしておりました。

最初はコードは書かないだろうしファイルはGoogleDriveとかで管理すればいいかな〜なんて思っていました。
でも、途中で気が変わり色々しっかりやったら、割としっかりやった分の恩恵を感じています。というか、やってなかったら間に合ってなかったかもしれない。

というわけで、ティラノのプロジェクトの制作環境まわりの話をしていきます。 (PGにとっては当たり前の話とかがメインです)

エディタ

VScode

https://code.visualstudio.com/

f:id:unity-ta:20180905221747p:plain

エディタは好みもあるとは思いますが、僕が使っているのはVScodeです。
まぁエディタはメモ帳でなければ(ある程度エディタとしての機能が揃っていれば)良いとは思いますが、VScodeを選んだ理由としては

  • 豊富な拡張性(ティラノ制作に関わらず)
  • 軽い
  • Gitと連携できる
  • jsもマークダウンもpython(後述)もおなじエディタで書ける
  • Win、Mac問わない

が挙げられます。

中でも特筆するならGit連携できること、マークダウンのプレビューを編集中のスクリプトと並べて見られる事でしょうか。
OS間での差もほとんどないので、操作への慣熟も早いと思います。 あと、何より軽い。

僕は作成したマクロやらスクリプト書く上でのルールとかのメモをマークダウンで書いてまとめているのですが、それをプレビューをしながら編集できるというのが中々調子が良いですね。

あれ、あのタグのデフォルトってなんだっけ?→ブラウザ開いてリファレンス見る
あれ、あの効果音のファイル名ってなんだっけ?→ファインダー開いて確認
のような工程が殆どなくなりました。

コミュニケーションツール

Slack

https://slack.com/

コミュニケーションツールは流行りのSlack。
slackを選んだ理由はチャンネルでトークテーマを切り分けられること、導入が簡単なこと、多数決とかタスク管理とか便利なアプリも入れられる(僕はほとんど初期状態のまま使ってますが)

イラストやシナリオといった部門の切り分けによるチャンネルの使い分けも有意義であると思いますが、僕たちは規模も小さいので「ミーティング用」と「決定事項」での切り分けを行なっています。
チャットは最も簡単なコミュニケーションですが、どうしてもログが流れてしまい後から読むのがつらいです。
ですが、チャット的使ったミーティングの結果を掲示板的使い方をする決定事項チャンネルにまとめていくことで、後から見たときに議事録というか以前のミーティングの内容を掴みやすくなりました。

ファイル(バージョン)管理

bitbucket + ソースツリー

アトラシアンのステマみたいになっちゃいますが、個人リポジトリ(無料)の導入で作業効率が凄い上がりました。 (最初はdropboxでファイル管理していたのを途中からbitbucketに変更)

ほんと一人で何か作ってる人とかプログラマでない方にこそgit(バージョン管理)の有用性は伝えたいですね。

まず、僕らはスクリプト担当者とシナリオ担当者が別人なので、シナリオの加減筆の差分が見れるのは大きいです。
それだけでなく、二端末で作業しているので家でガッツリ作業してるブランチ放置してても、出先でMasterブランチの動作確認とか、シナリオさんのプッシュしてくれたものの確認とかもできる。いちいち連絡貰わなくても、プッシュの連絡もメールで来る。
今回はプルリク使ってないけど、プルリクの運用もレビュー漏れが防げますし。作業自体もコミット単位で何かしら意味のある切り分けがされて、整理される。
これまでgitを個人制作で使っていなかったことを結構後悔しました。始めは他の方のツールへの慣熟等懸念がありましたが、有り余る恩恵です。
とりあえずgitナニソレな人は「git」とか「バージョン管理」でググると作業効率が上がるかもしれません。

とか言いつつ、近々GitLabに移行の予定なんですが。笑

デバッグ

ティラノライダー & Google Chrome

ティラノライダーはいわずと知れたティラノデバッグツールなので、いいとして。chromeでのデバッグですね。
ティラノのindex.htmlはChromeではそのまま開けないのでpythonのSimpleHTTPServerで確認って感じです。確認したい時にコマンド一発なのでストレスはないです。
macでもwinでもほぼ同じですぐに実行できるので助かりました。

その他

ツールとは違いますが、作業中のメモはマークダウンで書く癖をつけてます。
基本的にスクリプト書く上で忘れがちな事などのメモはマークダウンで書いてプレビューを表示すると効率が上がります。プレーンテキストと違って画像が入れられるので、助かってます。 きっと後からメンテナンスや改修する時にも、役立つと信じています。笑
また、シナリオ担当から貰ったテキストファイルを読み込んでスクリプトに変換するツールやゲーム開始前のリソースのプリロードを行うスクリプトを自動で書き出すツールをpythonで書いたりしました。
このあたりは次回、作業編でお話できたらなぁと思います。

結論?

小規模だったり個人開発でも多少まじめに環境作るとちゃんと効率が上がるよってことでしょうか。 僕もこれまでは面倒だし、どうせローカルでしか作業しないしって理由でリポジトリ建てないでいたのですが、実際Git導入したおかげでVScodeもその真価を発揮していい感じになりました。
制作環境は一人だろうと少人数だろうと手を抜いちゃだめですね。

関連記事:

wandervogel.hateblo.jp

スマホでADVゲームを作ってみた話(iOS&TyranoScript)

このブログを始めてから早くも2ヶ月が経とうとしているのに、全く何も書いていない状態だったわけですが。

今日はふと思いついて、iPhoneのみでADVゲーム制作ツールTyranoScriptを使ったゲーム制作を行う方法について書いてみようと思います。

続きを読む

ブログ始めます!

今更ブログを始めた訳

どうもこんにちは、アサカワです。

もう年の瀬ですが、早くも僕は来年の目標を考えたわけですよ。

 

ズバリ、SNSを活用する」です。

 

えー、説明すると、僕ぁ大人になってからというものSNS……例えばツイッターやらなんやらが見るのはいいけど、投稿することが苦手になってきてしまっていて。

概ねの原因は書き込むのが億劫だったり、コミュ障精神を発揮してしまうからだという自覚があります。

だけど、その一方でツイッターとかでUnity開発者の方とか趣味の合う方と繋がりたいなぁという思いもあったりして。

つまり、まぁ、来年はツイッターも頑張るしブログでも書いてみるか!と思い立ったわけです。笑

 

そんなわけではてなブログデビューですよ。

ん、アラサーがすることじゃないって? そんなこたぁわかってるよ笑

 

自己紹介

とまぁ、ブログ開設の経緯だけ説明してお終いってのも味気ないので、ちょっと自己紹介しておきます。

 

僕はアサカワと申しまして、Unityでモバイル向けのゲームを作ったりしてます。

とはいえ、プログラミングレベルは超低いクソ野郎でございますので「作ったりしてます」は語弊を招く表現かもしれません。

さしずめ、「Unityでモバイル向けのゲームを作ったりしていたい人」といったところでしょうか。笑

 

過去に二度ほど広告型の無料アプリをリリースしましたが、鳴かず飛ばずで自らリジェクトした苦い経験がございます。

現在はそれらの経験を糧に新しいゲームを製作中です。まだお見せできる段階ではないですが、いずれは公開できればなぁと思っております。

 

趣味はクルマや音楽で、当然ゲームも好きです。

最近はアトラスの激ムズパズルゲームのキャサリンがリメイク?されるとの噂を聞いて、小躍りするくらい喜びました。

 

まぁ大体そんな感じの人間です。

これからはUnityの話(というか、ここ分からないんだけど誰か教えろ下さい的な)やら趣味の話やら、雑多に書いていこうかなと思っています。

今後ともよろしくお願いしまーす。