Web+DB Pressのドラクエ10特集
ドラクエ10の特集が掲載されたWeb+DB Press 90号について、以前Twitterにつぶやいたもののまとめです。
私は職業プログラマで、ドラクエ10のような多数のクライアントとの通信が必要なサーバアプリケーション開発を仕事にしていますが、スクエニの中の人ではないので全く見当違いのことを言っている可能性はあります。話半分くらいで読んでください。
まずバトル処理とエリア処理は別プロセスになっている。これ驚き。同じマップで動いてるんだから同一プロセスと思っていた #dqx
— hisanori (@nullpon) December 23, 2015
ドラクエ10の場合、他人のバトルには干渉できなくて応援ぐらいしかできないので別プロセスでも問題ないのだろうね。応援はプロセス間通信してるらしい。ドメインソケット使ってるのかな #dqx
— hisanori (@nullpon) December 23, 2015
これやってる理由は後で。必要とはいえバトルに入るたびにパーティ全員が即座に別プロセスに再接続するとか過激なことやってんなーという感想 #dqx
— hisanori (@nullpon) December 23, 2015
同じフィールドで戦闘するのに画面切り替えが発生するのはプロセス移動完了をプレイヤー間で同期させるための待ち時間かなぁとか邪推。バトル終了に画面切り替えがないのは同期する必要がないから?とかさらに推測してみる #dqx
— hisanori (@nullpon) December 23, 2015
連続で戦闘できないのも、次々と襲われないようにするゲームとしての仕様以外に、プロセス移動の足並みをそろえるって裏の目的もあったりするのかも。もしそうなら王家の迷宮で連続バトル可能なのも時間制限のためだけじゃないのかもね #dqx
— hisanori (@nullpon) December 23, 2015
プロセス移動でのデータ受け渡しはKVSのキャッシュ経由のみで Oracleには保存してない。バトルのたびにオーバーワークなOracleアクセスするわけにいかないもんな。サーバ移動も今はキャッシュ経由。今はルーラで簡単に別サーバに移動できるからね #dqx
— hisanori (@nullpon) December 23, 2015
相撲の話。通常はクライアント側の位置情報を正としているが、敵と相撲している時だけサーバ側の位置情報を正としている。サーバで押し合いの計算をして結果の位置情報をクライアントに送信して表示 #dqx
— hisanori (@nullpon) December 23, 2015
なので移動の表示に1.5秒の遅延が発生する。敵にぶつかって相撲状態になった時、逆キーを押しても即座に相撲が解除されないのは、おそらくこの遅延が理由だろう #dqx
— hisanori (@nullpon) December 23, 2015
バトルのプロセスをエリアと別にしたのは、この相撲の計算を重たいエリア処理から分離して処理させるための工夫 #dqx
— hisanori (@nullpon) December 23, 2015
Web系ツールのバックエンドにCassandraを使ってるらしい、まじかーww、Cちゃんを選んだ理由が知りたいww #dqx
— hisanori (@nullpon) December 23, 2015
やー、今回の特集は現役ドラクエ10プレイヤーとしてはかなり面白かったです。元プレイヤーの各位も是非読んでみてね〜
— hisanori (@nullpon) December 23, 2015