どり〜むきっず 〜ゲーム制作支援サイト〜
トップ | 初めての方へ | プロフィール | メールマガジン | リンク

同人ゲーム制作支援 | ゲームアルゴリズム勉強法 | C言語入門

今日のみなせけ | インフォプレナー | ゲームプログラム講座

めるまがきっず「2種類のゲームデータ」


////////////////////////////////////////////////////////////////////////////////
//
//         ☆ めるまがきっず ☆
//
//     〜ゲームプログラミングを主とした、ゲーム制作支援メルマガ〜
//
//
// 配信者:
//   早瀬 竜也(たつにい)
//
// 配信日:
//   2009/04/23
//
//
// 第32回 「2種類のゲームデータ」
//




号外でない通常配信は本当に久々になります。

楽しみにしてくれた方、なかなか配信できずに
申し訳ございませんでした。

その代わり、今回はとても重要な内容について
お話します。


その名も「2種類の露天風呂」です。

女湯になる前に見ておいてくださいね。


……。

……嘘です、ごめんなさい。


実際のタイトルはメールの件名にもあるように
「2種類のゲームデータ」です。

でも、まず先に報告があります。




●メルアド入力ミスについて


2009年4月20日 9:26:32 にOCNのメールアカウントで
gamelibマニュアル+αのご注文があったので
入金案内のメールを送信したのですが、
メールアドレスの入力ミスがあったらしく
メールを送信することが出来ませんでした。

もし、上記のご注文に心当たりのある方が
このメルマガを読んでくださっているのなら、
その伝をメールで僕に伝えてくださるか、
再度正しいメールアドレスを入力して
ご注文頂ければ、もう一度、入金案内の
メールを送信いたします。

この場を借りて、ご報告させていただきました。


上記のメールに関係の無い皆様も、何かしらの
メールアドレス入力が必要な際は入力ミスに
ご注意くださいね。




●2種類のゲームデータ


今回のメルマガはゲームプログラムに関することなのですが、
おそらく難易度の高い内容になっているかと存じます。

全て理解できる読者も居るかもしれませんが、
全然意味がわからない読者の方も居るかもしれません。

でも、本格的にゲームプログラミングを行うなら、
避けては通れない箇所ですので配信させていただきます。

たとえ現時点で理解できずとも、もし宜しければ
心のうちに留めて置いてくださると嬉しいです。


さて、ゲームデータ……まぁ読んで字の如く
ゲームのデータは大きく2種類に分ける事が出来ます。

それは「セーブデータとして保存する必要のあるデータ」と
「ゲームを動作させるために必要なデータ」になります。


本格的なゲームを作る場合、当然の如く、
データをセーブする機能を作る必要があります。

チョロっとプレイするミニゲームですら、
ハイスコアをセーブできたりしますからね。


実際に想像してみて欲しいのですが、
例えばRPGのゲームプログラムを作るとします。

RPGのセーブデータってどんな感じに見えますか?

ゲームによっては特定のセーブポイントでしか
セーブできなかったり、フィールド上ならどこでも
セーブできたりとか、セーブできる上限数は
3ファイルまでとか色々ありますね。

まぁセーブファイルの上限数は、この際置いておくとして
どうしてセーブポイントなどと
セーブできる位置を特定なんてするのでしょうか?

普通に考えたら、いつでもセーブできたほうが便利ですよね?

これには理由があります。


想像してみてください。

RPGのゲームプログラムが稼動しています。

その場合、様々な変数に様々なデータが入ってますよね?

キャラクターのHPに現在HPのデータが入っていたり、
どの建物に入っているかのデータ、建物のどの位置にいるか、
どの向きを向いているか、BGMは何が流れているか、
敵とのエンカウント率はいくらか、どのようなアイテムを
所持しているか、シナリオの進行度はいくらか、所持金、
攻撃力やすばやさなどのパラメータ、建物内のオブジェクト、
建物内にいるプレイヤー外の人たちとか、ボスとか……。

こうして挙げていくとキリが無いですよね。


では、その地点でセーブをとったとします。

プレイヤーはセーブをとったら安心して、
ゲームの電源を切ってしまいますよね?

そして後日、そのセーブしたデータをロードします。

そのとき、もし仮にどれかの変数が記録されておらず、
セーブをとったときの状況と違っていたらどうですか?

たとえば敵とのエンカウント率を下げる、
ステルスという呪文を唱えて、その場でセーブし、
ロードしてみたら、その呪文の効果が消えていたら
「マジックポイント損したーっ!」って思いますよね。

まぁ、それくらいなら我慢できますが、セーブして
ロードしてみたら、キャラクターのHPのデータが
何故か初期化されていて、仲間になった当初の
初期HPになっていたらプレイヤーは激怒しますよね?


では、セーブしたときはキャラは右方向を向いていたのに
ロードしてみたら下方向を向いていた場合はどうですか?

別に気にも留めずにゲームを再開しますよね?

では、ゲーム内部で動作している汎用カウンターの
値が初期化され、セーブしたときは27841だったのに
ロードしたときは0だった場合はどうですか?

乱数テーブルから乱数データを探し出すカウンターが
セーブしたときは218だったのにロードしたら51に
変わっていて、乱数のパターンが違っていたらどうですか?

そもそもプレイヤーは気づきもしないはずです。


きちんと想像して見れは、僕が言わんとしていることが
なんとなくわかると思われます。


セーブデータとして保存する必要のあるデータ。

ゲームを動作させるために必要なデータ。


ゲームプログラムはゲームの電源が切られれば、
全ての変数のデータを失います。

その前に、データをセーブすれば、
そのセーブしたデータは残ります。

ゲームを起動すれば、全ての変数は初期値で
ゲームがスタートします。

セーブしたデータがあれば、そのデータだけを
ロードして、変数に代入する事が出来ます。

そして、セーブしたデータから変数データを
ロードすることにより、プレイヤーの視点から
問題なく状況を再現することが必要になります。


セーブデータの役割はゲームの状況を再現することです。


コレを非常に忠実に再現しているのが、パソコンで
ファミコンやスーファミを遊べるエミュレータです。

これらはボタン一つで、いつでもセーブ&ロードができる
リアルタイムセーブが標準のシステムになっている場合が
ほとんどです。

アクションゲームなどが苦手なプレイヤーでも
いつでもどこでもセーブできるリアルタイムセーブを
使うと、小刻みにセーブをしていけば大抵クリアできて
しまいます。

RPGなどでも、例えば戦闘画面で、コマンド入力時に
セーブし、戦闘時にクリティカルが出るまでロードしなおして
戦ったり、戦闘後にランダムアイテムが入手できるまでロード
し直すなどの、ゲームバランスを崩すようなプレイが可能です。


このリアルタイムセーブは全ての変数を記録する力技です。


ファミコンやスーファミなどは現在では低スペックなため、
全メモリをセーブしたところで、パソコンからしてみれば
大した容量ではないため、可能になっております。

でも、だからといって同人ゲームを作ったとして
リアルタイムセーブのように、全ての変数をセーブして
ロード時に全ての変数を読み込んで、ゲームの状況を
再現するのは、あまり褒められた方法ではありません。

何故なら先ほどのRPGの例でも挙げたように、
別に保存する必要の無いデータだってあるわけです。

もっと突き詰めて考えて欲しいです。

もしPS2のメモリーカードのように、
8MBしか保存できなかったらどうですか?

一つのデータを記録するのに1MBも使ったりしたら
「何してんだ!」と思われても仕方が無いです。

保存データを減らせるなら、
どんどん減らしたほうがいいですよね?

もちろん、セーブしたときのゲームの状況を
出来る限り忠実に再現する為に必須のデータは
きちんと保存しておく必要がありますけどね。


セーブデータはなるべく小さくすることです。


あと、ここは難しいところなのですが、
僕はセーブデータにはint型の変数を
使わずshort型やlong型の整数変数を
出来る限り使うように心がけております。

理由は僕も少しうろ覚えなのですが、int型の変数は
コンパイラかOSかによって、ビット数が違っている
場合があるという話を聞いた事があるからです。

たしか、その環境で最も適したビット数になるらしく
16ビットになるか32ビットになるか64ビットになるか
環境によって変わってくるらしいです。

僕も詳しいことはわかりませんので、興味のある方は
各自で調べてみてください。

とにかく、環境やコンパイラの設定などで、いちいち
ビット数が変わってしまったらセーブデータの保存時や
ロード時にも変化が起こってしまい、不可解なバグに
なる可能性が極めて高いです。

次の言葉をキモに命じておいてください。


セーブデータは動作環境に依存しないようにする。


そして、先ほど話しそびれたのですが、
なぜRPGではセーブポイントなど、
セーブできる位置を特定している場合があるのか。

それはゲームデザインにかなり関わってきます。

システム的な側面から言えば、どこでもセーブできれば
とても親切で快適にゲームがプレイできます。

特に現代人は忙しいため、どこでもセーブできれば
ちょっと空いた時間にでもRPGのレベル上げを
したり、ダンジョンを少しずつ進めたりとか
いろいろ出来るでしょう。

ただし、どこでもセーブ出来てしまうと、
ロード時にセーブ時の状況を再現するときに
キャラの座標位置やら、なんやらかんやらと
色々なデータを保持しておく必要があります。

もし、セーブポイントが決まっているなら、
そのセーブポイントの番号のデータだけを保持し
プログラム側の方で定数設定していた座標や
BGMやらをコピーすれば保存データを
かなり削減することが出来るのです。

まぁ、最近のメモリ事情から見れば
微々たるものかも知れないですけどね。


さて、ゲームデザイン的な側面から言うと、
緊迫感とか達成感とかの話になります。

例えばラストダンジョン。

どこでもセーブできれば、ラスボスに到達するのは
こまめにセーブをとれば意外と簡単だったりします。

でも、セーブポイント制で、しかもセーブポイントが
極端に少なかったら……。

今のご時勢では「不親切だ!」なんて思う方も
いるかもしれませんが、ゲーマーは戦略を立てます。

事前に回復アイテムを準備し、装備も万全にし、
雑魚専用のスキルとボス戦用のスキルを用意し、
ラストダンジョンに赴きます。

そして難解なダンジョンを突き進むも、
途中で出てくる中ボスと戦う際、
回復アイテムを温存しようとしていたら
やられてしまって悔しい思いをします。

悔しくて、今度こそはと再挑戦します。

また、ラストダンジョンの最初からです。

面倒だとは思いつつも、悔しいため、
再度、先ほどと同じ難解なダンジョンを突き進みます。

そして、さっき見落としていた通路で宝箱を見つけ
最強の武器「レヴァ剣」を手に入れます。

そして中ボスをなんとか倒して、さっきの悔しさ分の
達成感を得るのです。

中ボスを倒した地点にセーブポイントがあり、
ひとときの休息をとります。

その後、ダンジョンを更に進みます。

コレまでよりも難解なダンジョンに苦労するも
なんとか乗り越え、とうとうラスボスまで到達します。

もし、ラスボスとの戦いで負ければ、さっき中ボスで
負けたときのように、また難解なダンジョンを
攻略しなければならないという苦痛が待っています。

プレイヤーの緊迫感はかなり高まっているでしょう。

そして、最強のラスボスに苦戦をするも、
先ほど入手した最強の武器のおかげで
なんとかラスボスを倒すことが出来て、
耐えようも無い達成感を得るのです。

どこでもセーブ出来たとしたら、
大抵はラスボスの一歩手前でセーブしますので
やられてもすぐに再挑戦すれば良いだけです。

緊迫感などそんなに無く、ただただラスボスと
戦うだけでしょう。

勿論、緊迫感から開放される達成感も薄れるでしょう。

今回の例はRPGでしたが、
色々と応用できるかと存じます。


要はセーブできるタイミングに注意することです。


さて、最後になりますが、
これは親切なシステムになります。

それは、いつでもどこでもロードできるという、
システムです。

セーブに関しては、先ほどの緊迫感と達成感の
話もあるため、制限を設けるのはアリかと思いますが、
コンピュータゲームであるが故に、プレイヤーは
ゲームの状況が気に食わなければリセットします。

そして再度起動するのにイライラ。

長いタイトルロゴを見るのにイライラ。

間違ってニューゲームを選んでしまって、
また電源を切らなければいけなくてイライラ。

でも、もしどこでもロードできれば、
プレイヤーがリセットしたいときに、
変わりにパッっとロードすることにより
そのイライラがなくなります。


ロードはいつでも出来ると親切です。


ちょっとしたコラム的な話でしたが
一応書いておきました。


さて、今回の内容のまとめになります。


ゲームデータには二種類のデータがあります。


それは、
セーブデータとして保存する必要のあるデータ。

そして、
ゲームを動作させるために必要なデータ。

この二つです。


そしてセーブデータでの要点は下記通りです。


セーブデータの役割はゲームの状況を再現すること。

リアルタイムセーブは全ての変数を記録する力技。

セーブデータはなるべく小さくすること。

セーブデータは動作環境に依存しないようにする。

セーブできるタイミングに注意すること。

ロードはいつでも出来ると親切。


結構難しい内容の箇所もありましたが、
少しでもあなたの為になったのなら幸いです。




追伸:

先日、ウチの兄上が出張で一時的に上京しました。

そのとき、兄から電話がありました。

生活費がヤバイから金を貸してくれとの事です。


普段の兄は、結構遊び人で、ギャンブルしたり、
何なりと、色々と遊びにお金を使う人だったので
大抵の場合、僕が兄に金を貸すのは出し渋ります。

でも、上京したときにお金が足りないのは命取りなので
僕のなけなしのお金から3万ほど兄の講座に入金しました。

僕も田舎者ですが、東京でいくらか生活したことがあるので
一人で心細かったり、お金に困ったりとかの経験があります。


あ、別にオレオレ詐欺とかではなく、きちんと実物の兄に
間違いなく入金しましたよ。だいいち、通帳は家にあるしww

まぁ、しばらくは僕も金欠になるでしょうが、
兄も先日、無事に帰ってきましたし、良しとしましょう。




最後までお読み頂き、ありがとうございました!

もしよろしければ感想くださいね。

飛んで喜びますので(笑)




メールマガジン「めるまがきっず ゲーム制作支援メルマガ」

発行責任者:早瀬 竜也(たつにい)
公式サイト:「どり〜むきっず」 http://dreamkids.sakura.ne.jp/
問い合わせ:hakka17@hotmail.com
発行サイト:「まぐまぐ!」 http://www.mag2.com/
登録・削除:http://www.mag2.com/m/0000254884.html



上記の記事は僕が配信しているメールマガジンのバックナンバーです。

配信は不定期ですが、忘れた頃にゲーム制作に関しての有益な情報を
受け取ることにより、ゲーム制作の潜在的意欲が上がるかもしれませんよ?

登録は無料ですので、興味のある方は下記フォームよりどうそ!

メルマガ登録・解除
 


過去バックナンバー




メニュー






トップ | 初めての方へ | プロフィール | メールマガジン | リンク
Copyright (C) 2009 どり〜むきっず, All Rights Reserved