リプレイの作成法には、いくつか手法がある。
まず、公式の「HSPで3D格ゲーを作ろう」によると、
- 全てのフレームの情報を記憶して、それを加工しながら再生するという方法
- 変化があった事柄だけを記録し、記録されたデータを補間しながら、再生するという方法
があり、両者の特徴としては、
- 前者は、シーンを忠実に再現できることや、プログラムが簡単なもので済むという点で、優れている。
しかし、記録用のデータが、大きくなり、長時間のシーンのリプレイには、向いていないという欠点もあり。 - 後者は、記録用のデータが少なくて済む、という点で優れているが、補間計算が必要で、プログラムが複雑になるという欠点がある。
さらに、この手法を細分化するといくつかの方法があるので、記録しておく。
すべてのフレームの情報を記憶して、それを加工しながら再生する場合
キャラクターに関するすべての情報を保存する方法
まず、キャラクターの情報を(配列にしておいてある場合が多いと思うが)を、
すべて保存しておく形式。公式の格闘ゲームサンプルもこの手法。
dim replayinfo, INFO_MAX, REPLAY_FRAMENUM, 2
という部分を見ると分かりやすい。
replayinfoは、キャラクターの情報全部(INFO_MAX)を、リプレイに要するフレーム分(REPLAY_FRAMENUM)格納する配列ですよということ。最後の2は、キャラが2人分ということ。
キャラの姿勢、モーションなどすべてを格納してしまう。
リプレイのときは、これらをロードして、再生してやればOK
わかりやすさと再現度の高さでは、これが一番優れているだろう。
キャラクターのキー入力をすべて保存しておく方法
格闘ゲームなどは、キー入力でキャラが動くようになっているから、
このキー入力を保存しておくという方法も有効
具体的には、
dim replayinfo, REPLAY_FRAMENUM, CHAR_NUM
のようになる。
replayinfoには、E3DGetKeyBoard系の命令で取得したキーボード番号を格納しておく。
そして、メイン画面中は、ユーザーからの入力によってキャラが動くが、
リプレイ中では、replayinfoからデータを引っ張って、オート再生すればOK
ポイントは、NPCも、ちゃんとキー入力で動くシステムにしておくこと(たいていはそうなっていると思う)。
この方法は、メイン部分をほとんどいじらず再現できる上、保存する情報も少なくて済む。