Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
『アナザーエデン 時空を超える猫』スマートフォンでのRPG体験の実現のためにしてきたこと
Search
gree_tech
PRO
March 30, 2018
Technology
0
470
『アナザーエデン 時空を超える猫』スマートフォンでのRPG体験の実現のためにしてきたこと
GAME CREATORS CONFERENCE '18にて発表されたスライドです。
http://www.gc-conf.com/
gree_tech
PRO
March 30, 2018
Tweet
Share
More Decks by gree_tech
See All by gree_tech
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
3.5k
マネジメントに役立つ Google Cloud
gree_tech
PRO
0
41
今この時代に技術とどう向き合うべきか
gree_tech
PRO
3
2.5k
生成AIを開発組織にインストールするために: REALITYにおけるガバナンス・技術・文化へのアプローチ
gree_tech
PRO
0
270
安く・手軽に・現場発 既存資産を生かすSlack×AI検索Botの作り方
gree_tech
PRO
0
260
生成AIを安心して活用するために──「情報セキュリティガイドライン」策定とポイント
gree_tech
PRO
1
1.6k
あうもんと学ぶGenAIOps
gree_tech
PRO
0
380
MVP開発における生成AIの活用と導入事例
gree_tech
PRO
0
410
機械学習・生成AIが拓く事業価値創出の最前線
gree_tech
PRO
0
280
Other Decks in Technology
See All in Technology
Data Hubグループ 紹介資料
sansan33
PRO
0
2.8k
Agentic Software Modernization - Back to the Roots (Zürich Agentic Coding and Architectures, März 2026)
feststelltaste
1
170
クラウド時代における一時権限取得
krrrr38
1
160
「使いにくい」も「運用疲れ」も卒業する UIデザイナーとエンジニアが創る持続可能な内製開発
nrinetcom
PRO
1
780
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
7
2.1k
男(監査)はつらいよ - Policy as CodeからAIエージェントへ
ken5scal
5
730
LY Tableauでの Tableau x AIの実践 (at Tableau Now! - 2026-02-26)
yoshitakaarakawa
0
1.3k
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
30
9k
Oracle Cloud Infrastructure:2026年2月度サービス・アップデート
oracle4engineer
PRO
0
220
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.4k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
72k
LINEヤフーにおけるAI駆動開発組織のプロデュース施策
lycorptech_jp
PRO
0
400
Featured
See All Featured
Accessibility Awareness
sabderemane
0
73
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.8k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
140
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
120
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
93
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
300
Balancing Empowerment & Direction
lara
5
930
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
170
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
Statistics for Hackers
jakevdp
799
230k
Transcript
『アナザーエデン 時空を超える猫』 スマートフォンでのRPG体験の実現のためにしてきたこと 2018/3/30 ⻄⽥ 綾佑
None
⻄⽥ 綾佑 (Nishida Ryosuke) Wright Flyer Studios アナザーエデン @hosi_mo 2014年
東京⼤学⼤学院 情報理⼯学系研究科修了 同年 グリー株式会社 ⼊社
消滅都市 (2014/5/26~) ららマジ (2017/1/25~) 武器よさらば (2017/3/30~) アナザーエデン (2017/4/12~) ダンまち 〜メモリア・フレーゼ〜
(2017/6/19~) VR スタジオも内包 2014年2⽉21⽇設⽴ 現在5年⽬の社内ゲームスタジオ Wright Flyer Studios
None
⽬次 •システム⾯から⽀えたRPG体験のための⼯夫 •膨⼤なイベントスクリプトから創られたRPG体験
システム⾯から⽀えたRPG体験の ための⼯夫
差異の解消 ≒ 進化 スマートフォン ゲーム コンシューマゲーム との差異の解消 ≒ ? よりコンシューマゲームっぽい作り⽅をしてみる
スマホゲーム vs コンシューマゲーム スマホ コンシューマ ゲームサイクル ホーム -> ゲーム ゲーム
-> 設定 運⽤形態 サービス パッケージ 更新頻度 ⾼ 低 1プレイ時間 5分から10分 数⼗分 データ通信頻度 ⾼ 低 ダウンロード 分割か逐次 ⼀括 ユーザデータ サーバ ローカル
スマホゲーム vs コンシューマゲーム スマホ コンシューマ ゲームサイクル ホーム -> ゲーム ゲーム
-> 設定 運⽤形態 サービス パッケージ 更新頻度 ⾼ 低 1プレイ時間 5分から10分 数⼗分 データ通信頻度 ⾼ 低 ダウンロード 分割か逐次 ⼀括 ユーザデータ サーバ ローカル
コンシューマライクのために
アナザーエデン の場合 スマホ コンシューマ アナザーエデン ゲームサイクル ホーム -> ゲーム ゲーム
-> 設定 ゲーム -> 設定 運⽤形態 サービス パッケージ サービス 更新頻度 ⾼ 低 中 1プレイ時間 5分から10分 数⼗分 数⼗分 データ通信頻度 ⾼ 低 ⾼ (Background) ダウンロード 分割か逐次 ⼀括 選択性 ユーザデータ サーバ ローカル ハイブリッド
アナザーエデン の場合 スマホ コンシューマ アナザーエデン ゲームサイクル ホーム -> ゲーム ゲーム
-> 設定 ゲーム -> 設定 運⽤形態 サービス パッケージ サービス 更新頻度 ⾼ 低 中 1プレイ時間 5分から10分 数⼗分 数⼗分 データ通信頻度 ⾼ 低 ⾼ (Background) ダウンロード 分割か逐次 ⼀括 選択性 ユーザデータ サーバ ローカル ハイブリッド
オートセーブ機能 コンシューマライクの第⼀歩
オートセーブのゴール • プレイヤーの没⼊感を邪魔しない • ネットワーク環境に依存しない • いつ中断しても途中からやり直せる • 割り込みの多いスマフォでも納得感のある挙動を
• ゲームプレイ中、左上に「Auto Saving…」と 表⽰されるタイミングがある • アプリをkillしても、最後に表⽰されたタイミン グの状態でゲームが復帰する 「Auto Saving…」
None
オートセーブのタイミング • 各種設定UIクローズ時 • フィールドのエリア移動時 • luaイベント終了時 • シナリオ進捗時 •
バトル終了時 • 1分に1回(プレイ時間が積み上がる)
ステートが変わる時にセーブ処理 ExplorerState 装備画⾯などのUI表⽰ イベントスクリプト実⾏ エリア移動中 バトル中 釣り中 プレイヤー操作中 ExplorerStateに戻る タイミングでオートセーブ
FishingState WarpState BattleState EventScriptStat GlobalUIState
クライアントからサーバへの同期 GameServer msgpack AutoSave! msgpack Push diff Background }Size =
100 Request Queue Diff リクエストごとローカルDBに保存 たくさんリクエストくる スケーラビリテイだいじ msgpack msgpack msgpack msgpack
バックグラウンドで同期することで 通信していないか のように⾒える 通信状態にプレイ を邪魔されない レイテンシを気にせず DBを選択できる プレイヤー Game Server
None
オートセーブまとめ 1.オートセーブ制御 2.キューイングとバックグラウンド通信の組み合わせ
アナザーエデンにおける⾮同期オートセーブを⽤いた 通信待ちストレスのないゲーム体験の実現 http://cedec.cesa.or.jp/2017/session/ENG/s58e0fb2eb6330/ https://www.slideshare.net/greetech/ss-79467627 http://gamebiz.jp/?p=192603
None
膨⼤なイベントスクリプトから 創られたRPG体験
None
イベントスクリプト C++製 RPGエンジンのAPIをできる限り多くLuaに解放
イベントスクリプトの種類 Area Script AreaEvent Script Story Script Quest Script Lottery
Script Enemy Script Skill Script - 1エリア1つ。毎フレupdateされる。ランチャ機能付き - フィールドのギミック全般 ⼀番量が多い - メインストーリーが記述される。キャラ劇なども記述 - サブクエストが記述される。キャラ劇なども記述 - 出会いキャラ劇の実装 - バトル中の特殊キャラのギミック - バトル中の味⽅キャラの特殊ギミック
Area Script AreaEvent Script - 1エリア1つ。毎フレupdateされる。ランチャ機能付き - フィールドのギミック全般 ⼀番量が多い フィールド系
フィールド班 AreaScript Area EventScriptをたくさん登録してる AreaEvent Script 部屋の中へ移動 バルーンを表⽰ タップするとプレイヤーのHPを満タンにする
Story Script Quest Script Lottery Script - メインストーリーが記述される。キャラ劇なども記述 - サブクエストが記述される。キャラ劇なども記述
- 出会いキャラ劇の実装 シナリオ系 シナリオ班 QuestScript AreaScriptからフラグをみて追加される エルジオンまで到達していたら、 クエスト解放 if Common_isQuestStepActive(quest_step_erujion_chihatokiwokoete_step1) then Common_registQuestEvent(quest_erujion_chihatokiwokoete, "step1", true)
Enemy Script Skill Script - バトル中の特殊キャラのギミック - バトル中のスキルの特殊ギミック EnemyScript 特定のボスでHPが⼀定以上削れたら
特殊ギミック発動 等 バトル系 バトル班
製作体制 フィールド班 シナリオ班 バトル班 - シナリオ演出 - キャラ劇の演出 - フィールド作成
(マップエディタ) - フィールドギミック組み込み - フィールドパラメータ調整 - fogや天候調整 - シェーダプログラム調整 - レベルデザイン - バトルギミック設計 レベルデザインから 実装まで⾏う 演出から 実装まで⾏う フィールドデザインから 実装まで⾏う アートチーム アートチーム アートチーム
製作体制 イベントスクリプト(Lua)を記述できる⼈が25⼈ チーム全体が70~80⼈ ⼈によってそれぞれに味わい深いイベントが組まれる
イベントスクリプト事例 実装を⾒てみましょう
⼆度寝
⻤ごっこ
時間によって変化する床
フィールド効果事例 制御をみてみましょう
カメラの画⾓を毎フレーム調整 if pos.x <= 0 and pos.x >= posD.x then
Common_setCameraInfoFOV(fov) Common_setCameraInfoAngleV(15) elseif pos.x <= posD.x then Common_setCameraInfoFOV(60) Common_setCameraInfoAngleV(15)
特定の箇所のみキャラクターのライトを変更 if v_chr_1.x >= v_left.x and v_chr_1.x <= v_right.x then
Common_setCharacterLightColor(0.1, 1.4, 1.5, 1.3, 1) else
特定の場所で全体ライトを変更 if pos.z < posT1.z and pos.x > posT2.x and
pos.x <= posT3.x then Common_setForegroundLightColor(0.3, 0.7, 0.7, 0.7, 1) Common_setCharacterLightColor(0.3, 0.7, 0.7, 0.7, 1) else Common_setForegroundLightColor(0.3, 1, 1, 1, 1) Common_setCharacterLightColor(0.3, 1, 1, 1, 1)
余談 ⻤のようなミニゲームスクリプト
運⽤とイベントスクリプト これらの⼊稿にもはやエンジニアという職種は関わっていない フィールド班 シナリオ班 バトル班 PC版ビルド (Mac, Windows) Shift +
Rでリロード イベントスクリプト修正 ok? ⼊稿
APIリスト C++がLuaに公開してるAPI数 525 バトル カメラ制御 フィールドオブジェクト制御 UI アイテム サウンド、ムービー フィールドエフェクト
(fogとか影とか) 移動 フラグ - 約 50 API - 約 30 API - 約 150 API - 約 20 API - 約 10 API - 約 20 API - 約 100 API - 約 30 API - 約 100 API
スクリプトの規模 リリース時(2017年4⽉) : 63万⾏ 20170531 709077 +72238 20170630 804724 +95647
20170731 861798 +57074 1年で100万⾏ペース 現在(2018年3⽉) : 146万⾏
イベントスクリプトに 最⼤限の裁量を
スクリプトまとめ •C++製 RPGエンジンのAPIをできる限り多くLuaに解放 •イベントスクリプト x オートセーブの合わせ技 •職⼈スクリプター
セキュリティの話 クライアント主導のデータ変更
サーバにロジックを置くケース
サーバにロジックを置くケース 1. サーバからクライアントへ命令送信(APIコールのレスポンスに⼊れる • クライアントから完了通知が来るまでサーバの命令は不揮発性 2. クライアントがデータを変更 3. オートセーブ時に差分をサーバへ送信(完了済の命令idも送信 4.
サーバは命令を削除 サーバからデータ更新命令を送信 Operation Builder
OperationBuilderの流れ : 図 diff API Call 抽選 OperationBuilde DB 変
AutoSave 出会い実⾏ 命令削除 完了報告
OperationBuilderのキモ • サーバ • クライアントから完了報告が来るまでは、処理が終わっていな いものとみなす • 終わったときちんと⾔ってくるまで、何度も命令を送りなおす • クライアント側
• 処理完了をかならず差分と⼀緒に保存する • ⼆回実⾏するのを防ぐ • ⼆回実⾏してもいいが、実⾏前の状態に巻き戻してからだ
None
クライアントがデータ作っていることについて
クライアントがデータ作っていることについて •Luaに全開放している • データ群、スクリプト群、DB群は暗号化 • イベントスクリプトのチェックサムlogを収集 • メモリも単純なチートツールからは⾒れないよう難読化 • データの発⾏は出所がわかるように全てにタグをつける
• 何か怪しいと思ったらlogを遡る
チートリスクへの対応 • クライアント > サーバとすると、チートリスクが⼀気に増⼤する • 制御不能になる可能性さえある • だが、いずれにせよ「完璧に網羅して塞ぐ」はありえない •
ログを適切にとり、調査可能にする • 個別に⼿続きを⽤意して、ひとつひとつ認証していく 署名
終わりに
•システム⾯から⽀えたRPG体験のための⼯夫 •膨⼤なイベントスクリプトから創られたRPG体験
本格スマホRPG『アナザーエデン』開発の裏側を包み隠さずお話します 〜コード 資産も無く、チームとしての経験も豊富ではない中エンジニアはどう挑んだのか〜 http://cedec.cesa.or.jp/2017/session/ENG/s591428ca963a1/ https://www.youtube.com/watch?v=dEZ31MWhC40 http://gamebiz.jp/?p=192924
引き続き、RPGに全⼒で挑みます!
None