Pokémon TCG Pocket の安定したバトル実装を支えるカードロジック基盤設計 ~3種のコード生成技術を添えて~
原田 大輝
- セッション分野
-
ENG(エンジニアリング)
- キーワード
-
QA
- 対象プラットフォーム
-
なし
- セッション難易度
- 求められるスキル
- - C# のコーディング経験がある方
- DCG のカードロジック設計に興味がある方
- C# コードの自動生成に興味がある方
- C# の文字列補完の深淵を覗きたい方
※ Unity の知識は不要です - 得られる知見
- - DCG 類型のゲーム開発における、大規模・長期運営に耐えうるカード固有ロジック群の基盤設計事例
- Incremental Source Generator および custom protoc plugin の大規模運営タイトルにおける活用事例
- C# 10 で追加された補完文字列ハンドラのカスタム実装の(黒魔術的)活用事例 - 写真撮影 / SNS投稿
セッション内容
『Pokémon TCG Pocket』はリリース以降、膨大な数のカードを追加し続けています。
これらが持つバトルにおける効果や固有のダメージ計算処理(以下、カードロジック)は、パラメータ差異を除いても約500種類に及び、今後も留まることなく増加していきます。
通常、固有ロジックの増加は保守コストや学習コストの増大を招きますが、本作では独自のコーディング基盤を設計することで、長期運営における高い開発効率と堅牢性を両立しています。
本セッションでは、複雑なルール体系の上で固有ロジックを持つ大量のエンティティが干渉し合う「デジタルカードゲーム(DCG)」類型特有の課題に対し、我々がいかにカードロジック実装基盤を設計・運用して対応してきたかを、ひとつの解決方針としてご紹介します。
また、その裏側を支える以下の3つの技術要素についてもサブトピックとして掘り下げます。
- Incremental Source Generator による、メソッドを起点とする関連メソッドチェーンの自動生成
- Protocol Buffers + custom protoc plugin による、通信スキーマをもとにした基盤実装の自動生成
- 補完文字列ハンドラのカスタム実装による C# string のテンプレートエンジン化
コード自動生成を用いたエンバグリスク・レビューコストの低減は、DCG に限らず様々なゲーム開発において有用なアプローチです。
大規模タイトルにおけるひとつの活用事例として、皆様のご参考となれば幸いです。
講演者
-
原田 大輝
株式会社ディー・エヌ・エー
ゲームサービス事業本部開発運営統括部第一技術部ゲームエンジニアリング第七グループ ゲームクライアントエンジニア
講演者プロフィール
21新卒として株式会社ディー・エヌ・エーに入社。
現在は Pokémon Trading Card Game Pocket のバトル班テックリードを務めている。受講者へのメッセージ
ドメイン知識の差、経験の差、今日はなんか眠い――様々な要因で人間や LLM の出力はブレて、バグを生みます。
バグが生まれるのは仕方がない、しかしそれを世に出してはならない。そのための検査・修正を人間や LLM がやるとどうなるか? そう、バグを生みます。
ゆえに決定論的コード生成や、不具合を静的解析可能な設計が重要視されるわけです。
……待てよ、そもそも仕様をコード化する過程がなければバグは生まれないのでは? そんな夢物語を現実に落とし込んだ話をします。