feature image

2020年5月15日 | ブログ記事

【新歓ゲーム制作特集 第2弾】Inverse製作秘話

この記事はtraP新歓ブログリレー68日目の記事です。

 

こんにちは.Saltnと申します。

今年で5周年を迎えるtraPでは,今までに15作品以上のゲームがリリースされてきました.このブログをご覧になっている方の中にも,traPのゲーム製作に興味がある! という方が大勢いらっしゃると思います.
過去にもtraPのゲーム製作の流れを紹介する記事を書きましたが,今回紹介するInverseはかなり手短に説明しました.そこで,この記事ではInverseを例に,traPではゲームがどのように製作されているかを紹介します.(今年度はCOVID-19の影響で製作スケジュールが大きく変わる可能性があります.)

 

製作の裏話なんてどうでも良い!! 俺はゲームの内容が知りたいんだ!! さっさと遊ばせろ!! って方はこちらのページへどうぞ.
Inverse

 

Inverseってどんなゲーム?

Inverseは2つの画面を行き来する縦スクロールシューティングゲームです.動画を見て貰うのが一番分かりやすいと思うので↓のPVをご覧下さい.

 

 

2つの画面を行き来する("遷移"する)ことで,難しい場面から逃げたり,敵の多い場所でスコアを稼いだりと,実力に合わせてプレイスタイルを変えることができます.また,独自のシステムとしてスコア消費型の"スペシャル"(所謂ボム)を採用しており,スコアラーは勿論,クリアするためにもある程度の稼ぎを意識して貰うゲームデザインとなっています.詳しくはInverseのダウンロードページやreadmeをご覧下さい.

 

製作経緯

tarPの製作プロジェクト設立の流れ

traPのゲームやアプリの製作は,プロジェクトという単位で行われます.半年に一度,全体集会でプロジェクトのプレゼンの機会があります.プレゼンの内容は,大まかな仕様(決まっていなければジャンルとか),製作予定期間,必要人数の目安です.ゲームやアプリのアイデアがある人が発表をし,その後興味がある人が集まって大まかな方向性を話し合います.

製作の目処が立ったら,期日までにプレゼン者またはプロジェクトリーダーになる予定の人がtraPの役員会にプレゼンの内容を発展させた仕様書を提出します.役員会で製作スケジュールや人数に無理が無いか判断し,問題がある部分は調整してから,部員全体に対してプロジェクト参加のアンケートを採り,希望者が割り振られて製作がスタートします.traPの部員であれば必ずプロジェクトに参加しなければならない,なんてことはなく,プロジェクトに参加せずに,一年を通して一つのテーマで活動する,班だけに所属する人も多いです.

 

Inverse製作プロジェクト設立の経緯

部員全員が新規プロジェクトのアイデアを持っていて,次々と新しいプロジェクトが提案される,というのが理想的ですが,これは人によってはなかなか難しいことです.2017年度も幾つかのプロジェクト案が出たものの,自分にしっくりするプロジェクトが無い,しかし何らかのプロジェクトには参加してゲーム製作に携わりたいという状態でした.

そこで,急遽プレゼンが終わった後の話し合いの場で,ゲーム製作プロジェクトには参加したいが,プレゼンの中に参加したいものが無いという人を集め,一から話し合いを行いました.そこで出た案が,何か今までにない要素を持った縦スクロールシューティングゲームでした.一つのゲームを作るだけのアイデアを持っていなくても,複数人で意見を出し合って世に出せる作品を作れることは,グループ製作の利点の一つだと思います.

 

初期案からInverseへ

最初の時点では,独自の要素として,直方体の側面を移動するという2.5次元の移動を考えていました.しかし,後日話し合いを進めていく内に幾つかの問題が明らかになりました.

話し合いの時点では,プログラム志望者は全員新入生で,完成目標が半年だったので,技術でこれらの問題を解決するのは難しいと判断し,これらを解消するためのアイデアを出し合いました.それまで直方体の4面だったのを,横に並べた2画面を行き来する形にする案が採用され,画面を反転する事からゲーム名が「インバース」と名付けられました.(後にInverse表記に変更)

 

 




これ,画面分割した斑鳩じゃね……?

 

メンバー集め

話し合いのメンバーの中で,グラフィック担当とサウンド担当はまかなえたのですが,上記の通りプログラム担当は経験の少ない1年生だけで,このままでは製作が難航することが明らかでした.そこで,プロジェクト参加のアンケートを採る際に,役員の方にお願いして,Inverseを第2志望としてた2年生の経験者(D君)をメンバーに加えて頂きました.彼をプログラムリーダー,最初にメンバーの収集を書けたSaltnがプロジェクトリーダーとした9人のチームでInverseの製作が始まりました.

(勿論1年生でも実力のある人はプログラムリーダーやプロジェクトリーダーになれますし,実際そうした人が他の1年生を引張って,1年生だけで完成させたプロジェクトもあります.)

 

製作開始

集会

プロジェクトの集会は前期は隔週,後期は毎週集まって行いました.最初に進捗報告を行い,それに応じて出てきた問題を話し合ったり,新しい仕様を決め,最後に次の集会までに行う事を各班に割り振るという流れでした.

当時はDiscordや部内の会話ツールを使用していなかったので,夏休み中も集まって集会を行いました.予定が合わなくてあまり集まれなかったりと問題もありましたが,定期的に集まることで,長期休みに開発がだれてしまうのを結果的に防げていたと思います.

 

プロジェクトリーダー

プロジェクトリーダーは,全体集会での発表,プロジェクト集会の進行,案出しのまとめ,進捗の確認と催促を行い,案がなかなか出ない時は積極的に発言しました.また,各班と話し合い,次の集会までの目標をどうするかを決めるといった舵取りを行いました.また,積極的にデバッグを行いプログラム班に報告する,宣伝用のPVを作製する,readmeを作る等,各班の手が回らない仕事を行いました.一方で,開発の中身を引張っていくのは各班のリーダーに任せ,適材適所で開発の判断ができるような仕組みをとりました.特に工大祭などの大きな目標に向け,どこまで実装するのかや,開発最後の追い込みの舵取りは,リーダーが責任を持って行いました.

リーダーの仕事を見て分かるように,リーダーをする上で特別な技能は必要ありません(PVは無くても問題無いので).事実,私はプログラムに関しては1年生の共通授業で扱った範囲しか分かりません.リーダーの一番の仕事は仕事を振り期日を守らせることなので,意思疎通ができるだけの知識があればなんとかなります.リーダーとして大切なのは,プロジェクトにかける意欲です.リーダーの意欲が足りなければ,開発が長引いたときにだれてしまい,プロジェクトが動かなくなってしまいます.逆に言えば,新入生でもやる気さえあればリーダーは務まるのです.

もちろん理想としては勉強して技術を身に付けることが望ましいので,できればチャレンジするべきでしょう.私はそれをしなかった人間なので,強く言えませんが.

 

プログラム班

D君をリーダーとして,1年生4人がプログラム班となりました.Javaで開発することになり,基幹部分はリーダーが担当し,1年生が勉強と並行して.簡単な所から実行するように分担しました.また,メンバーの実力や忙しさに応じたプログラムの仕事の割振りもリーダーが行いました.更に,プロジェクトの集会の後に,プログラム班の集会を行って,仕事の割振りの他に,仕事をする上で何を勉強しなくてはならないのかについて話し合ったりしました.

 

リソース班

リソースはグラフィック班とサウンド班に分かれ,兼任の人も含めてそれぞれ3人と2人でした.リソースは全体の進捗状況に合わせて必要な素材を作製し,クラウドにアップロードして共有しました.

 

開発の紆余曲折

種々の仕様
ボム

初め,ボムは使用回数が決まっていて,アイテムを取ることで1回分回復するという仕様の予定でした.しかし,ただ2つの画面を行き来するだけでは独自性が足りないと思い,ボムに関して一工夫することになりました.そこで,ボムを"スコアを消費"して使用するようにしました.ボムを使わないことによるスコアボーナスはよく見受けられますが,ボムを使えば使うほどスコアが減る代わりに,クリアするだけならスコアが尽きるまでボムを使えるようにすることで,独自性を確保するだけでなく,スコアラーでもクリアラーでも楽しめるゲーム設計を実現できました.また,ボムの使用回数を稼ぐためにクリアラーでもスコアをある程度意識してもらい,ボムを使うことで逆にスコアを稼げる場面を作ることでスコアラーにとってもボムが不要にならないようにしました.更に,機体ごとの個性を出した結果,攻撃力のないボムが登場したため,名前をボムから"スペシャル"に改めました.

 

機体

3種類の機体にはそれぞれかなりの個性を持たせました.機体のデザインも3機体でそれぞれ別の人が担当するという拘りっぷりです.ショット,ボム共に広範囲の攻撃を得意とし,密着すれば火力も期待できるReinmuth,移動速度は遅いものの弾速が速く,ショットもボムも正面殲滅力の高いDonati,そして速い移動速度と高い威力とスペックが高い一方,とにかく癖の強いKohoutek.特にKohoutekは,サブショットの存在しないInverseにおいて,ショットが画面の半分ほどしか届かないという他のシューティングゲームでもなかなか見ないハンデを負っています.弾速も遅いため,そのスペックを発揮するには慣れが必要です.さらにスペシャルは時間を止めるという攻撃力がないもので,止めた時間の中で何をするのかがボムの効力を大きく左右します.

機体のバランス調整で特に苦労したのがDonatiです.バランスの良いReinmuthや元々癖の強いKohoutekに対して,Donatiは正面しか攻撃できず,遅い移動速度と相まって敵の追従が難しく,正直他の機体の劣化でした.結局,ショット関係をいじって弾速を大きく上げ,移動が遅い代わりに弾速がとても速い機体となりました.

 

ボス

ボスのコンセプトとして,それぞれのボスが,異なる理由で遷移しないと倒せないというものがあります.2つの画面の遷移はInverseの目玉なので,やはりボスではそれを活かしてもらうためです.それぞれについて書いてしまうとネタバレになってしまいますが,例として1ステージ目のボスを挙げると,遷移しないと回避できない攻撃を放つため,遷移が必要といった感じです(他にも遷移した方が倒しやすい理由があります).もっとも,1ステージ目に限って言えばスペシャルのごり押しで倒せなくもないですが.

 

開発期間の延長

初めはプレゼン会で突発的に発生したプロジェクトということもあって,1期(半年)で完成させる予定でしたが,初心者の多いInverseではなんとか1機体,1ステージを完成させるのが限度でした.このまま体験版の様なものを公開してプロジェクトを畳むこともできたのですが,開発を通じてチームの結束が高まり,皆Inverseをしっかりとした形で公開したいとなったので,満場一致で半年間開発を続けることになりました.当初は秋の工大祭が目標だったものを,コミックマーケット93としました.さらに,traPがC93に落選してしまったので,1月初めのニコニコゲームフェス2018に向けた開発に切り替えました.

 

バグ

ゲームに限らず,プログラミングに必ずついて回るのがバグです.以下に開発終盤になって悪戦苦闘させられたバグを2つ紹介します.

Reimnuthのスペシャル(範囲攻撃)が描写されない

他のスペシャルは正常に動作しているにも関わらず,範囲攻撃の描画のみがうまくいっていませんでした.画像を差し替えた結果,サイズの大きい画像を使用していることが原因と判明しました.初めはプログラム上で画像を切り取り描画しようとしましたがそれでもうまく行かず,結局元画像のサイズを小さくするという原始的な方法で乗り切りました.

後に似たようなバグがスタッフロールでも起こりました.このときは(恐らく)このバグのせいで,本来ループしないBGMがループするという現象が起こっていたのですが,結局スタッフロールの画像を分割して表示することで直りました.

 

特定の環境で動作しない

個人的にはInverseの開発で一番やっかいだった部分です.元々,開発の途中から,自分のパソコンでInverseを起動すると,GPUの消費量が非常に多くなる現象が起きていました.確かに自分のパソコンはノートパソコンで,外付けのグラフィックボードも付けていませんでしたが,同じような環境の人でも問題ない人もいて,自分の環境でも動作自体には問題がなかったため無視していました.

しかし,ニコニコゲームフェス2018の締切り数日前に完成版として出力されたjarフィルを起動しても,Inverseが実行されないという問題が発生しました.急いで他の人にも検証をお願いしたところ,Windowsの一部のパソコンで同様の問題が発生することが分かりました.しかし,プログラム班の人は誰もこの問題が起きず,なかなか原因を究明できずにいました.結局,正月返上で自分の環境で色々検証し,出たエラーメッセージをプログラム班に送って何が問題なのかを探ってもらいました.

結論としては,開発用に使っていたJDK(Java SE Development Kit)がパソコンに入っていないと,Windowsでは正常に動かないことが分かりました.そのためプログラム班ではこの問題が発見されず,最後になって一部の環境で問題が起きたことが分かりました.既に開発で使ったJDKを使わないというわけにもいかないので,Windowsの人にはJavaだけでなく,JDKのインストールもお願いしています(Inverseのダウンロードページにリンクがあります).

ちなみに,特定の環境でのみ起こるバグというのは次年度に所属したプロジェクトでも起こり,そのときもプログラム班ではない自分が検証を行うことになりました.非開発環境でのみ起こるバグはプログラム班の人には見つけられません.プログラム班以外の人も,積極的に開発中のゲームをプレイし,デバッグに協力することが大切です.

最後に

最後はドタバタしつつも,無事Inverseは完成し公開することができました.残念ながらニコニコゲームフェスでは落選となりましたが,アイデアさえ0の状態から独自性のあるシューティングゲームを製作することができました.ここまでこの記事を読んで,Inverseに興味を持って頂けたら幸いです.

Inverseの他にも,様々なゲームが作品紹介のページで公開されています.どれも面白い作品ばかりなので,是非遊んでみて下さい.また,この記事を読んでいる新入生の皆さんや,東工大への進学を考えている中高生の方は,是非traPの入部して,チームによるゲーム製作にチャレンジしてみて下さい.プログラミングに興味がある方も,プログラミングは分からないという方も,きっと楽しく良い経験ができると思います!

 

明日は@temmaさんと@ryohaさんの記事です.是非そちらもご覧下さい!

Saltn icon
この記事を書いた人
Saltn

参加プロジェクト他  ・モグラさんがコロんだ!(BGM,イラスト)  ・sushiyatoon(BGM,SE)  ・titeQuest(BGM,企画)  ・DeliSobaya(BGM,SE)  ・Inverse(チームリーダー,BGM,SE)  ・FeSt(案出し)  ・Seek Tracks(BGM,SE)  ・ぱぱぷ!(BGM,SE)  ・traP 5周年PV  ・サウンド班

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2019年5月16日
Party Kingdom
Double_oxygeN icon Double_oxygeN
2018年12月12日
多重スリーブの世界と,各種進捗報告。
Silviase icon Silviase
2018年4月17日
春休みにゲームを作りました
uynet icon uynet
2018年3月17日
traPのゲーム制作ってどんな感じ?
Saltn icon Saltn
2020年5月19日
【新歓ゲーム制作特集 第6弾】個人でゲームを作る話
Facish icon Facish
2019年12月13日
ゲーム紹介「League of Legends」【AdC2019 44日目】
Yataka_ML icon Yataka_ML
記事一覧 タグ一覧 Google アナリティクスについて