CEDEC2017

[CEDEC2017]本格スマホRPG『アナザーエデン』開発の裏側を包み隠さずお話します 〜コード資産も無く、チームとしての経験も豊富ではない中エンジニアはどう挑んだのか〜

本格スマホRPG『アナザーエデン』開発の裏側を包み隠さずお話します 〜コード資産も無く、チームとしての経験も豊富ではない中エンジニアはどう挑んだのか〜

講演者

阿部 智司 さん(グリー株式会社)
井田 勝 さん(グリー株式会社)

講演内容

アナザーエデンの概要

  • 2017年4月12日にリリース
  • 現時点で300万DL
  • 開発開始は2015年4月
  • 現在は2~3週間の頻度でバージョンアップを行っている

開発環境

  • Mac
  • git
  • Jenkins
  • Cocos2d-x
  • Spine
  • LWF(Lightweight SWF)
  • Cricret Audio
  • CRI Sofdec

開発人員

約60名でアート職が一番多かった。
リリース時期までのコンシューマ開発経験者が6名程度しかいなかった

開発中の課題解決と現在

  • 開発開始時

10名程度の人員で開発を開始し、まず初めに目指すゴールの共有を行った。
1ヶ月間で2DライクなRPGを作成し、飛び出す絵本のような表現を目指して開発を行った。

  • トライアルアンドエラーを効率よく

動作確認→データ入力→長いアセットビルド→アプリビルド→インストール
このPDCAサイクルを効率よく回す必要がある。

  • Furutyを使用

MacOS上でネイティブに動作するゲームクライアント
実機/MacのSchemaを切り替えて動作するようにしている。

通常ゲームモードとマップ編集モードの2種類で動作するように行っている。

  • 通常ゲームモード

・製品版と同様の動作を行う
・各種デバッグ機能を搭載しており、デバッグ関連だけでも100カテゴリに及ぶデバッグ項目を用意
・約300ファイルに上るデバッグ用コードが存在
・mac上で動作するため各種キーボードのショートカットを用意

  • マップ編集モード

・通常モードに編集用UIを被せ、移動経路の設定やオブジェクト配置などのエディット機能
・配置情報などのデータは開発中はjsonで出力し、最終的にはFlatBuffersで出力を行っている

  • イベントスクリプト

・各種イベント(フィールドやクエストなど)をLuaスクリプトを使用して作成
・約450命令に上るC++の命令処理が存在している。

  • マップ作成

・上記のマップ編集モードを用いてデータを作成している。
・壁と床の種類はそれぞれ4種類ずつ
・一番重いマップではオブジェクトが1900個ほど配置されているとのこと

ゲーム開発未経験者の苦悩と闘い

  • バトル部分を担当

バトル部分のコード資産が無い状態で始めたため、スクラッチで実際に触るところまでとにかく
実装、仕様や演出のブラッシュアップを行っていた。
レベルデザインを行えばいずれは面白くなるはずを計5回繰り返して完成。

最初はアクションゲームとして実装を行っていたが、2016年にある事件が発生し、
ユーザーにアクション制かターン制かのアンケートを行い、ターン制ゲームとして作ることとなった。

その他の課題

エリア切り替えなどをシームレスで実装することとなったため、
切り替わるときのカクツキの対策を念入りに行っていた。

  • 原因

・膨大な量のアセットをロードする際にcocos2d-xのI/O処理がブロッキング処理だった。
・JSON形式のファイルのパース処理が重い

  • 対策

・独自スレッドを立ててロード処理を非同期で行うように対応
・パース処理が重たいのでバイナリ形式のファイルに変更

  • さらなる課題

非同期処理に切り替えたことにより、クラッシュが頻発するようになってしまった。
そこでXcodeのAddressSanitizerを使用して原因の特定修正を行った。

作業の効率化

作業の効率化を行うために以下ものを実装

Hubotで実装したchatbot

  • 定型業務のサポート
  • アプリのビルド
  • デプロイ
  • ビルド
  • 各種検索

これらをチャットベースで行えるように対応

マスターデータの入力ミス

マスターデータはエクセルベースで作成を行っている。
また、バージョン管理システムがgitを使用しているためロックすることが出来ずに
巻き戻りやコンフリクトが発生してしまっていた。
Excelの差分なので修正差分を表示することが出来ないため、
ロックや差分ができるようなものを作成して運用を行っている。

まとめ

コード資産が無い状態で開発を行った際の問題点や
コードではない部分の問題点のお話を聞くことが出来、
非常にためになりました。開発環境が無いなら作るという
チーム全体の意思やゴールを明確化していた
部分などどのような開発でも応用が利くものと思っています。