Unmiracle Tail

この記事は定期ゲ・竹 Advent Calendar 2020 - Adventar 20日目の記事です。

f:id:teamatsuti:20201220000122p:plain

 

前 (進捗ダメです※執筆中)TRPGのキャラ作成論を定期ゲでそのまま使うやつ【平面・半円・円形のキャラ造形】|GT|note

次 (Story of Lost Artifactさん!)

 

f:id:teamatsuti:20201219092101p:plain

ウーウーウーウー・・・

「この中に定期ゲGMはいないか!?助けてくれ!すぐに定期ゲを作りたいヤツがいるんだ!!! 」
「まずい…やる気が低下している!このままじゃ完成までもたない…!!!」
「応援絵!応援絵はまだなの!?」
「制作停止!うちの子マッサージを!」
「しっかりしろ!資料はアドカレに作った!ソースも言われれば出す!だから・・・!だから・・・!!!」

ウーウーウーウー・・・

「・・・もう、だめだ・・・。ゲームを作るには、ゲームをやめなきゃいけない・・・。それも一日二日とかじゃあない。年単位だ。耐えられるわけがない・・・。」
「・・・こいつはもう・・・」
「う、うわぁああああああぁぁぁ・・・!!!!」

ピンポーン♪

ここで定期ゲ制作に必要な技術を整理してみよう!

一つWebサイトを作る技術
二つバッチを作る技術
三つゲームを作る技術
四つシナリオを用意しPCを燃やす攻撃力
五つ叩かれても動じない防御力
六つ運営し続ける体力
七つ更新失敗しても諦めない精神力

無理!!!!!!!

\ チュドーン /

ザザーーーッ ブツ

 

こんにちは。秋瑞てんです。今年の2月頃から定期更新ミニゲーム「不奇跡世界はお散歩日和」を趣味で細々と運営しているGMです。今日は不奇跡世界はお散歩日和について・・・それとアドカレのためにシミュレータを作ったお話しをします。

まずは改めて、「不奇跡世界はお散歩日和」について簡単に紹介します。このゲームは1日1回ダイスを振って探索する定期更新ミニゲームです。ゲームそのものにクリアはなく、今のところプレイヤーがエディタ機能で作ったイベントを拾って、ミニゲームの範囲で気楽に楽しみながら、キャラクターをのんびり育てる感じです。そして、プレイヤーは「異世界」を作ることができます。つまり、簡単なシナリオであればサーバを用意しなくても定期更新ゲームを作れちゃいます。

f:id:teamatsuti:20201219150947p:plain

しかし元々初公開時に告知していたように、GMの砂場・実験場なので、いろんなものが中途半端です。最近はあまりないですが、毎日更新なので、更新失敗するとGMからぐぅの音が出てました。それでも遊んでくれてとんでもないステータスまで育ったキャラクターがいたり、直接応援してくれている方々がいらっしゃったおかげで、「ありがたぁい…!ありがたぁい…!」という気持ちで、更新失敗にもめげず、今日まで続いています。もうすぐ一年なので、既に第300回更新は超えていますね。ありがたぁい…!

ちなみに今から登録しても大丈夫です。PK・直接的な交流要素はないのでソロでものんびりできますし、異世界ではステータス補正を受けて調整されます。定期ゲというジャンルに気兼ねなく触ってみたい・とにかく定期ゲに飢えている・本番前のウォームアップ、どれでもよしです。うちの子をとにかく動かしたい向けのゲームなのです。

 

Q. 進捗どうですか?
A.

f:id:teamatsuti:20201219092112p:plain

 

表からはいつまでたっても進んでないように見えますが、裏では黙々と実験してます。ここ最近の実験をかいつまんで振り返ってみます。ここからは技術用語が草むらから飛び出してくるので、読めなかったら踊ってあげてください。

不奇跡世界はお散歩日和

f:id:teamatsuti:20201219150745p:plain


「うちの子を気が向いたときに旅させられないかな」

真面目に考えると大人の事情で色々面倒で、誰も思いつかなかったわけじゃないタイプの理想論。とにかくやってみようかという気持ちで、基礎部分は前作(ケルベロス戦記)を使い回し、2週間ほどで初版を作りました。

本当は表の部分をもっと作ってばんばんアピールしたかったのですが、有名どころの定期ゲは素晴らしいアイデアを競うようにアップデートしています。なので自分が攻めるべきは表じゃなく裏の方だなと思い、逃れて地下にこもり、野望を胸に抱いた悪の科学者のように開発を続けているのでした。コミット回数だけで言えば不奇跡だけで440回、打ったバージョンは49個なので、およそ毎日1回以上更新し、週一回はバージョンアップしてた計算になります。…ほんとに?(驚愕)

動画風更新結果

f:id:teamatsuti:20201219153037g:plain

ケルベロス戦記の流用で、一般的なログの結果とは別に、動画風の更新結果が出るようになっています(上記はケルベロス戦記の動画風結果)。去年の記事でも動画風の結果は紹介しましたが、現状動画風の側で表示できる情報量が少ないので「何が起きているかわからない」といった声もあり、不奇跡では普通のログ形式の結果と両方出すことにしました。
これ単体はスマホとの相性も悪くなく、見た目にパワーはありますが、この機能で一番やりたいのはリアルタイム放送なんです。近い機能が不奇跡TVって形で既にありますが、これを更新中にyoutubeとかで垂れ流し放送して、終わったら更新結果公開みたいなのが理想です。

この機能はphina.jsというゲームライブラリにお世話になっています。直感的に扱えて、中身もシンプルなので応用が作りやすくとても助かってます。ゲームを作ってみたい初心者にお勧めです。

phinajs.com

canvasの描画はwebGLを使った方がパフォーマンスがより良いですね。不奇跡の雨の表現の実験で、pixi.jsを混ぜこんでます。ゲーム制御としてはphina.jsが使いやすく、重い描画とかはpixi.jsをうまく使っていきたいですね。

www.pixijs.com

 

AWS Lambda連携

定期ゲの更新バッチ、どこで更新しますか?

ダウンロードして手元のPCで更新が一番手堅いですね。規模が小さければサイトのサーバ上でそのまま更新するのも良いでしょう。定期ゲ開発のちょっと悩ましい問題に、更新処理バッチの運用があります。

不奇跡の更新処理はAWS Lambdaというサービスを利用しています。更新処理の時だけ借りられるサーバみたいなものです。使った分だけ課金されるのでスケールに強いです。あと、無料利用枠が結構大きいです。定期的に時速100kmで走る気分で使うくらいなら枠の中に納まると思います。ちょっとの開発の手間でサイトのサーバの負荷を安全に分担できることを考えれば、悪くない選択肢かなと思い、土足で踏み入るごとくPerlで開発し始めました。LambdaはPerlを公式には対応してないのでちょっとの手間どころではなくそこそこひどい目にあいました。
苦労の甲斐あって今のところ快適そうに動いています。とはいえ、Lambdaにもタイムアウトは存在するので、タイムアウト回避の開発をしなければいけません。この物理的な課題が理由で、今のところ大きな声で宣伝できないという状況にあります。

なぜわざわざクラウド上で更新するシステムを作ったのかというと、将来的に更新処理サーバを公開して貸し出すためです。
更新処理のスクリプトと行動宣言データをサーバに投げれば更新結果が返ってくるの、どうでしょう?制作者は定期ゲサイトの作成に集中できるわけです。私は欲しい。早く作って。

異世界創造

f:id:teamatsuti:20201219154225p:plain

定期ゲにはRPGツ○ールみたいなのがないですね。近いのは見かけるんですが。更新処理バッチ、独特なシステム、交流要素、サーバ公開の仕組み、この辺を丸っと提供するのは、手が出しづらいと思います。しかし定期ゲをもっと広めるならば、ライブラリやフレームワークだけでなく、このようなサービスの存在も不可欠です。

不奇跡では、「とりあえず自分用にシナリオを画面上で作って動かせるものを作りたいな~」ということで、異世界創造機能ができました。2か月くらいで。稼働開始からステータスを基本ステータス以外も自由に持てるようにしたり、ルールを選択できるようにしたのも、全てこの辺まで視野に入れています。

このようなシステムの話とは別に、もともと作りたかった物語の世界観的に「他の世界とつながる」というのは必須でした。作った世界は独立しておらず、スポットから侵入でき、既存キャラクターで世界を渡り歩く冒険者のようなプレーが可能になっています。

また、7月ごろにテストプレー機能ができました。任意のタイミングで更新処理を回せるという恐ろしい機能です。Lambdaのおかげで何とかなりそうです。10月にはカードインポート機能ができ、他の世界で作成したカードを共有できるようになりました。これは、他の世界の世界観・法則そのものを共有できることを意味します。

 

ほうほう、Lv2では異世界創造機能。ではLv3はどうなりますか?

不奇跡世界はお散歩日和Lv3

私は「定期ゲ作りましょう!」と勧めるのは慎重です。いくらフレームワークやライブラリを用意しても、プログラミングを扱う以上、専門知識や助けは必要ですし…。

一方、業界的に、WebアプリはReactやVueなどのフレームワークと、それに支えられてNoCode(プログラムを書くのではなく、GUI上でぽちぽちしてサービスを作るサービス)なんかが最近注目されているようです。NoCodeについては、サイト制作面で定期ゲには有用かもしれないと思う一方、やはり更新処理をどこでやるかが問題になります。

つまり、中~上級の開発者向けにフレームワークやライブラリやシステムを用意しつつ、ライト層向けに定期更新ゲームのツールを地道に作るのが個人でギリギリ活動できる範囲だと思いました。・・・本当かい???

f:id:teamatsuti:20201219155732p:plain

で、この中で提供できそうなのは「動画風更新結果」「更新処理サーバ」「不奇跡世界はお散歩日和」ですね。そして、不奇跡世界はお散歩日和Lv3とは「定期更新ミニゲーム」から進化し、「定期更新ゲーム制作ツール」になるということです。Lv3に向けて裏の仕組みを整備し終えたら、表の部分…すなわち、コミュニティ関係の機能・サンプルシナリオを爆撃の雨のように作っていきます。

Unmiracle Tail

「…スキルは…管理が難しいんだよねぇ…」

いつだったか、TLで定期ゲのマスクデータの話で盛り上がっていた頃、てんは悩んでいた…。

 

 

当たり前だがスキルはスキル毎に動作が違う。効果単位で扱わず、全スキルを平のプログラムとして書けばメンテできずに破綻してしまう。スキルの説明文をTCGのように1つ1つ人力で、機械的に、一言の矛盾もなく、翻訳するのはプログラムを書くよりも辛いと思っていたてん「あ 言語を作ってプログラムからテキスト作れるようにすればいいじゃん

 

トン!!テン!!カン!!!

 

というわけでこちらが「Unmiracle Tail」になります。※初公開

amatsuti.github.io

ようやく本題に入れますね。

これはダイスバトルのシミュレータです。ダイスバトルは一日一回実行できるメイン行動の一種で、10個のダイスを持ってNPCと戦います。このシミュレータは自由に両チームを設定して試行できます。見た目は簡素なシミュレータです。

  • カード追加・編集可能 :カードはJSON形式で書かれたプログラムで、自由に追加・変更することができます。JSONなのでエディタを作りやすい。
  • ダウンロード制 :ブラウザ版・デスクトップアプリ版の2つ用意しています。どちらもクライアント側でシミュレートを実行するので、お使いの端末が壊れない範囲でいくらでもお試しできます。
  • オープンソース :シミュレータのサイトごとGitHubに公開しています。
  • モジュールインポート可:エンジン部分はバイナリで、理論上はPHPPerl・Nodeにモジュールとしてインポートすることが可能です。
  • テキスト自動生成 :サイトのカード一覧にカードの効果説明が記載されていますが、このテキストはカードのプログラムから自動的に生成されています。
  • ルールを作成可能 :将来的にオリジナルの定期ゲーム制作のために、ルールもJSON形式で自作可能な用意があります。

さすがに思いついてから一か月では間に合わなかったので、最低限の形しかないです。すみません。たぶん、冬の間はこれとバッチの方の開発に付きっきりになりそうです。

この言語そのものは実は3年前くらいからあったのですが、Perl製だったので、今回別の言語に書きなおしました。Lv3や今後の制作のコアになると思います。

おわりに

なんだかんだでちゃんとした定期更新ゲームを一本も出せてないので、作るのは楽しいんですが、歯がゆさも感じてます。応援いただけるととても喜びます。

あ、進捗を呻くディスコードがあります。本当に呻いてるだけですが、よければお気軽にコメントしていってください。

discord.gg

それでは良い定期ゲライフを!次はSoLaさんです!

 

【ぎょうむれんらく】

noteからはてなブログに移行します。noteの記事は復元しない可能性があります。