(57)【要約】【課題】  一般ユーザによる安易なゲームデータの改変を防止する。【解決手段】  まず、ゲームデータの配置に先立って、各ゲームパラメータ値が配置の度に異なる格納領域に配置されるように、内部メモリにおけるゲームデータの格納領域を設定する。次に、各ゲームパラメータ値の格納領域を直接的にまたは間接的に示す配置情報を前記内部メモリの特定領域に格納する。そして、こうして設定された格納領域に外部記憶媒体からゲームデータをロードする。さらに、ゲーム処理において内部メモリ内のゲームパラメータ値を参照または書換える必要があったときに、配置情報を参照して当該ゲームパラメータ値の格納領域を判定する。【選択図】  図５
2005144055.tif 000002
【特許請求の範囲】
【請求項１】
ゲーム装置に接続された外部記憶媒体に記憶されているゲーム進行状況を示す複数のゲームパラメータ値から成るゲームデータを、ゲーム処理で利用するために当該ゲーム装置の内部メモリに配置するためのゲームデータ制御プログラムであって、コンピュータを、
ゲームデータの配置に先立って、各ゲームパラメータ値が配置の度に異なる格納領域に配置されるように、前記内部メモリにおけるゲームデータの格納領域を設定する格納領域設定手段、
前記外部記憶媒体から前記格納領域設定手段によって設定された格納領域にゲームデータをロードするゲームデータロード手段、
前記格納領域設定手段がゲームデータの格納領域を設定した時に、各ゲームパラメータ値の格納領域を直接的にまたは間接的に示す配置情報を前記内部メモリの特定領域に格納する配置情報格納手段、および、
ゲーム処理において前記内部メモリ内のゲームパラメータ値を参照または書換える必要があったときに、前記配置情報を参照して当該ゲームパラメータ値の格納領域を判定する格納領域判定手段として機能させるためのゲームデータ制御プログラム。
【請求項２】
前記格納領域設定手段は、前記内部メモリの少なくとも１つのアドレスを指定することによってゲームデータの格納領域を直接的にまたは間接的に設定することを特徴とする、請求項１に記載のゲームデータ制御プログラム。
【請求項３】
前記ゲームデータ制御プログラムは、前記コンピュータを、ゲーム処理において前記内部メモリ内のゲームデータを前記外部記憶媒体に保存する必要があったときに、前記配置情報を参照して、当該ゲームデータを本来の所定の形式で当該外部記憶媒体に保存するゲームデータセーブ手段としてさらに機能させるものであることを特徴とする、請求項１に記載のゲームデータ制御プログラム。
【請求項４】
前記格納領域設定手段は、乱数に基づいて前記内部メモリにおけるゲームデータの格納領域を設定するものであることを特徴とする、請求項１に記載のゲームデータ制御プログラム。
【請求項５】
前記格納領域設定手段は、ゲームデータの格納領域が配置の度に異なるように、前記内部メモリにおけるゲームデータの格納領域を全体的にシフトさせるためのオフセット値を指定するものであり、
前記ロード手段は、前記内部メモリの特定アドレスに対して前記オフセット値を加えたアドレスを基準として、当該内部メモリにゲームデータを各ゲームパラメータの格納位置関係が維持されるように一体的にロードするものであることを特徴とする、請求項１に記載のゲームデータ制御プログラム。
【請求項６】
前記格納領域設定手段は、ゲームデータを構成する複数のブロック間の格納位置関係が配置の度に異なるように、前記内部メモリにおけるゲームデータの格納領域をブロック毎に設定するものであることを特徴とする、請求項１に記載のゲームデータ制御プログラム。
【請求項７】
前記ブロックが、前記内部メモリの１アドレスに対応するデータであることを特徴とする、請求項６に記載のゲームデータ制御プログラム。
【請求項８】
前記ゲームデータ制御プログラムは、前記コンピュータを、
前記内部メモリにロードされた各ゲームパラメータ値の格納領域をゲーム処理中の所定のタイミングで変更する格納領域変更手段、および、
前記格納領域変更手段による格納領域の変更結果に基づいて各ゲームパラメータ値を再配置する再配置手段としてさらに機能させるものであり、
前記配置情報格納手段は、前記再配置手段が各ゲームパラメータ値を再配置した時に、前記配置情報を更新するものであることを特徴とする、請求項１に記載のゲームデータ制御プログラム。
【請求項９】
ゲーム装置に接続された外部記憶媒体に記憶されているゲーム進行状況を示す複数のゲームパラメータ値から成るゲームデータを、ゲーム処理で利用するために当該ゲーム装置の内部メモリに配置するためのゲームデータ制御プログラムであって、コンピュータを、
前記外部記憶媒体から前記内部メモリにゲームデータをロードするゲームデータロード手段、
前記内部メモリにロードされた各ゲームパラメータ値の格納領域をゲーム処理中の所定のタイミングで変更する格納領域変更手段、
前記格納領域変更手段による格納領域の変更結果に基づいて各ゲームパラメータ値を再配置する再配置手段、
前記再配置手段が各ゲームパラメータ値を再配置した時に、各ゲームパラメータ値の格納領域を直接的にまたは間接的に示す配置情報を前記内部メモリの特定領域に格納する配置情報格納手段、および、
ゲーム処理において前記内部メモリ内のゲームパラメータ値を参照または書換える必要があったときに、前記配置情報を参照して当該ゲームパラメータ値の格納領域を判定する格納領域判定手段として機能させるためのゲームデータ制御プログラム。
【請求項１０】
前記格納領域変更手段は、前記内部メモリの少なくとも１つのアドレスを指定することによって、変更後のゲームデータの格納領域を直接的にまたは間接的に設定することを特徴とする、請求項９に記載のゲームデータ制御プログラム。
【請求項１１】
前記ゲームデータ制御プログラムは、前記コンピュータを、ゲーム処理において前記内部メモリ内のゲームデータを前記外部記憶媒体に保存する必要があったときに、前記配置情報を参照して、当該ゲームデータを本来の所定の形式で当該外部記憶媒体に保存するゲームデータセーブ手段としてさらに機能させるものであることを特徴とする、請求項９に記載のゲームデータ制御プログラム。
【請求項１２】
前記格納領域変更手段は、乱数に基づいて前記内部メモリにおけるゲームデータの格納領域を変更するものであることを特徴とする、請求項９に記載のゲームデータ制御プログラム。
【請求項１３】
前記格納領域変更手段は、前記内部メモリにおけるゲームデータの格納領域を全体的にシフトさせるためのオフセット値を指定することによって前記内部メモリにおけるゲームデータの格納領域を変更するものであり、
前記再配置手段は、前記内部メモリの特定アドレスに対して前記オフセット値を加えたアドレスを基準として、当該内部メモリにゲームデータを各ゲームパラメータの格納位置関係が維持されるように一体的に再配置するものであることを特徴とする、請求項９に記載のゲームデータ制御プログラム。
【請求項１４】
前記格納領域変更手段は、ゲームデータを構成する複数のブロック間の格納位置関係が再配置により変化するように、前記内部メモリにおけるゲームデータの格納領域をブロック毎に変更するものであることを特徴とする、請求項９に記載のゲームデータ制御プログラム。
【請求項１５】
前記ブロックが、前記内部メモリの１アドレスに対応するデータであることを特徴とする、請求項６に記載のゲームデータ制御プログラム。
【請求項１６】
請求項１または９に記載のゲームデータ制御プログラムによって内部メモリに記憶されたゲームデータに含まれる所定のパラメータのデータを書換えるためのゲームデータ書換プログラムであって、コンピュータに、
プレイヤに対して第１の検索対象の数値の入力を促すステップ、
前記内部メモリに記憶されるゲームデータの中から前記第１の検索対象の数値に対応する数値を検索し、当該数値が格納された少なくとも一つの第１格納アドレスを検出するステップ、
前記検出された第１格納アドレスに対して絶対的な関係にある複数の格納アドレスの数値と前記第１格納アドレスの数値とを指標として、動的に変化する前記格納アドレスの変化を追跡するステップ、
プレイヤに対して第２の検索対象の数値の入力を促すステップ、
前記第２の検索対象の数値に対応する数値を検索し、当該数値が格納された少なくとも一つの第２格納アドレスを検出するステップ、
前記第２格納アドレスと前記第１格納アドレスと一致する格納アドレスがあるとき、当該格納アドレスを書換対象格納アドレスとして決定するステップ、
プレイヤに対して書換数値の入力を促すステップ、および、
前記書換対象格納アドレスの数値を前記入力された書換数値に書き換えるステップを実行させるためのゲームデータ書換プログラム。
【請求項１７】
請求項１または９に記載のゲームデータ制御プログラムに従って前記内部メモリに配置されたゲームデータを書換えるためのゲームデータ書換プログラムであって、コンピュータに、
所定のゲームデータを所定の値に書換えるためのコードの入力を受け付けるステップ、
入力されたコードと前記アドレス情報格納手段によって前記内部メモリに格納されたアドレス情報に基づいて、書換え対象となるゲームデータの格納アドレスを判定するステップ、および、
判定の結果得られた格納アドレスに記憶されているゲームデータの値を前記コードが示す値に書換えるステップを実行させるためのゲームデータ書換プログラム。
【請求項１８】
請求項１６または１７に記載のゲームデータ書換プログラムを内蔵し、当該ゲームデータ書換プログラムに従ってゲームデータを書換える制御部を備えたゲームデータ書換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲームデータ制御プログラム、ゲームデータ書換プログラムおよびゲームデータ書換装置に関し、より特定的には、外部記憶媒体に記憶されたゲーム進行状況を示す複数のゲームパラメータ値から成るゲームデータをゲーム処理において利用すべくゲーム装置の内部メモリに配置する技術に関する。
【背景技術】
【０００２】
従来のゲーム機では、ゲームプログラムが実行されてゲームが進行すると、ゲームの進行状況に応じたゲームデータがゲーム機本体に内蔵された内部メモリ内に生成される。そして、プレイヤがゲームを中断する場合には、この内部メモリに格納されているゲームデータが、ゲーム装置に着脱自在に装着されているメモリカードに一時的に保存される。その後、プレイヤがゲームを再開するときに、メモリカードに一時的に保存されていたゲームデータが内部メモリにロードされる。こうして内部メモリにロードされたゲームデータを参照してゲーム処理を実行することにより、プレイヤは、中断直前の状態からゲームを再開することができる。
【０００３】
ところで、中断したゲームを再開するとき、メモリカードに保存されていたゲームデータは、常に内部メモリの特定の格納アドレスにロードされる。例えば、ゲームデータに含まれる特定のゲームパラメータの値（例えば、プレイヤキャラクタのライフポイントを示す値）は、常に内部メモリの特定の領域にロードされる。このため、ゲーム処理においては、参照しようとするゲームパラメータに対応する特定のアドレスを参照することによって、そのゲームパラメータの値を直ちに認識できる。具体的には、内部メモリの第１の格納アドレスにはプレイヤキャラクタのライフポイントの数値が記憶され、第２の格納アドレスにはゲーム空間におけるプレイヤキャラクタの位置座標の数値が記憶され、第３の格納アドレスにはゲーム空間における所持金額の数値が記憶され、第４〜１０の格納アドレスにはプレイヤキャラクタが捕まえたモンスターの種類を示す数値などが記憶されるようになっている。
【０００４】
このように、ゲームデータによってゲームの途中の状態が再現できることが知られているので、このゲームデータを書き換えて、例えばゲーム世界におけるお金を増やしたり、ゲームキャラクタのパラメータを最大限にするなどの改変を行なうためのゲームデータ書換装置などが販売されている。
【０００５】
ここで、メモリカードなどのバックアップメモリに記憶されたゲームデータは、上記のような改変を防止するために、暗号化されている場合がある（例えば、特許文献１参照。）。この場合、バックアップメモリに記憶されたゲームデータを改変するためには暗号を解読する必要があるため、ゲームデータを書き換えることは実質困難であった。
【０００６】
そこで、バックアップメモリに記憶されたゲームデータを改変するのではなく、バックアップメモリから内部メモリにロードされたゲームデータをゲーム処理中に適宜に書き換えることのできるゲームデータ書換装置が登場している。
【０００７】
このようなゲームデータ書換装置を利用するユーザは、ゲーム画面に表示される数値などを手がかりに、内部メモリにおいて当該数値が記憶されている格納アドレスを発見する。具体的には、ゲーム画面に例えば所持金額が表示されている場合、内部メモリに記憶されているゲームデータの中から当該所持金額に一致する数値を探しだし、当該数値が記憶されている内部メモリの格納アドレスを見つけるという作業が行われる。その結果、プレイヤは、特定のゲームパラメータの値の格納アドレスを知ることができる。この格納アドレスに記憶されている値を任意に書換えることで、プレイヤは特定のゲームパラメータの値を任意に操作することができる。
【０００８】
なお、プログラムの改変を検知するための発明として、特許文献２に記載のプログラムの起動方法が存在するが、この発明は、プログラムの立ち上げ時にチェックサムを用いてプログラムの改変を検知するものであって、内部メモリに記憶されているデータの書き換えを防止するものではない。
【特許文献１】特開２００１−２６５６５８号公報
【特許文献２】特開平７−４４３７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記のようにして、あるプレイヤによって、特定のゲームパラメータの格納アドレスが知られてしまうと、その情報がインターネットや雑誌などの媒体を通じて不特定多数のユーザに知られてしまう可能性がある。ところで、上記のような作業によってどのゲームパラメータがどのアドレスに格納されているかを特定することは、ある程度の技術知識が必要であるとともに大変な手間がかかるので、一般のユーザにとっては難しい。ところが、どのゲームパラメータがどのアドレスに格納されているかという情報が一旦公開されてしまうと、一般のユーザでも容易にゲームデータを改変することができるようになってしまう。
【００１０】
そうすると、ゲームデータ書換装置を購入することで、誰でも簡単にゲームデータを改変することができるようになるので、多数のプレイヤによってゲームデータの改変が行なわれ、ゲーム製作者が意図しないような状態でゲームが進行してしまう。その結果、ゲームの面白さが半減したり、ゲーム性が崩れてしまう可能性がある。また、特に、ネットワークゲームなどでは、ゲームデータの改変によって異常に強いプレイヤキャラクタが生成されてしまうと、普通に生成された他のプレイヤキャラクタとの能力の均衡がとれず、ゲームバランスが崩れてしまうという問題もあった。さらに、このようなゲームデータの改変は、著作権侵害（例えば、平成１３年２月１３日、最高裁判決、平成１１年（受）第９５５号）を助長するという問題もある。
【００１１】
このような問題を回避するため、内部メモリに記憶されたゲームデータを暗号化することも考えられるが、複雑な暗号データの復元処理は処理負担が非常に高くなるので、ゲームプログラムの実行にも影響を及ぼしかねないという問題がある。また、ゲームの開発段階におけるデバックのために内部メモリのゲームデータを参照したり書換えたい場合に、作業が煩雑になるという問題もある。
【００１２】
つまり、ゲームデータの書換えを必要以上に困難にしすぎると、ゲームプログラムによって読み出すときの処理負荷が高くなり、またデバッグのための作業が煩雑になる可能性もあり、デバッグのための作業を容易にするために内部メモリに格納されるゲームデータを従来のままにしておくとデータ改変が容易に行なわれてしまうという問題がある。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明は下記の構成を採用した。なお、括弧内の参照符号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【００１４】
本発明の第１のゲームデータ制御プログラムは、ゲーム装置（１３）に接続された外部記憶媒体（２３）に記憶されているゲーム進行状況を示す複数のゲームパラメータ値から成るゲームデータを、ゲーム処理で利用するために当該ゲーム装置の内部メモリ（３５）に配置するためのゲームデータ制御プログラムであって、コンピュータを、格納領域設定手段（３１、Ｓ２０３）、ゲームデータロード手段（３１、Ｓ１０７）、配置情報格納手段（３１、Ｓ２０５）および格納領域判定手段（３１、Ｓ５０３）として機能させるためのゲームデータ制御プログラムである。格納領域設定手段は、ゲームデータの配置に先立って、各ゲームパラメータ値が配置の度に異なる格納領域に配置されるように、前記内部メモリにおけるゲームデータの格納領域を設定する（図５、図１４、図１５）。ゲームデータロード手段は、前記外部記憶媒体から前記格納領域設定手段によって設定された格納領域にゲームデータをロードする。配置情報格納手段は、前記格納領域設定手段がゲームデータの格納領域を設定した時に、各ゲームパラメータ値の格納領域を直接的にまたは間接的に示す配置情報（図５、図１４、図１５）を前記内部メモリの特定領域に格納する。格納領域判定手段は、ゲーム処理において前記内部メモリ内のゲームパラメータ値を参照または書換える必要があったときに、前記配置情報を参照して当該ゲームパラメータ値の格納領域を判定する。
【００１５】
なお、前記格納領域設定手段は、前記内部メモリの少なくとも１つのアドレス（例えば格納先頭アドレス）を指定することによってゲームデータの格納領域を直接的にまたは間接的に設定するものであってもよい。
【００１６】
また、前記ゲームデータ制御プログラムは、前記コンピュータを、ゲーム処理において前記内部メモリ内のゲームデータを前記外部記憶媒体に保存する必要があったときに、前記配置情報を参照して、当該ゲームデータを本来の所定の形式で当該外部記憶媒体に保存するゲームデータセーブ手段（３１、Ｓ６０３）としてさらに機能させるものであってもよい。
【００１７】
また、前記格納領域設定手段は、乱数に基づいて前記内部メモリにおけるゲームデータの格納領域を設定するものであってもよい（Ｓ２０１）。
【００１８】
また、前記格納領域設定手段は、ゲームデータの格納領域が配置の度に異なるように、前記内部メモリにおけるゲームデータの格納領域を全体的にシフトさせるためのオフセット値を指定するものであり、前記ロード手段は、前記内部メモリの特定アドレスに対して前記オフセット値を加えたアドレスを基準として、当該内部メモリにゲームデータを各ゲームパラメータの格納位置関係が維持されるように一体的にロードするものであってもよい（図５）。
【００１９】
また、前記格納領域設定手段は、ゲームデータを構成する複数のブロック間の格納位置関係が配置の度に異なるように、前記内部メモリにおけるゲームデータの格納領域をブロック毎に設定するものであってもよい（図１４）。また、前記ブロックが、前記内部メモリの１アドレスに対応するデータであってもよい。
【００２０】
また、前記ゲームデータ制御プログラムは、前記コンピュータを、前記内部メモリにロードされた各ゲームパラメータ値の格納領域をゲーム処理中の所定のタイミングで変更する格納領域変更手段（３１、Ｓ４０５）、および、前記格納領域変更手段による格納領域の変更結果に基づいて各ゲームパラメータ値を再配置する再配置手段（３１、Ｓ４０９）としてさらに機能させるものであり、前記配置情報格納手段は、前記再配置手段が各ゲームパラメータ値を再配置した時に、前記配置情報を更新するものであってもよい（Ｓ４０７）。
【００２１】
本発明の第２のゲームデータ制御プログラムは、ゲーム装置（１３）に接続された外部記憶媒体（２３）に記憶されているゲーム進行状況を示す複数のゲームパラメータ値から成るゲームデータを、ゲーム処理で利用するために当該ゲーム装置の内部メモリ（３５）に配置するためのゲームデータ制御プログラムであって、コンピュータを、ゲームデータロード手段（３１、Ｓ１０７）、格納領域変更手段（３１、Ｓ４０５）、再配置手段（３１、Ｓ４０９）、配置情報格納手段（３１、Ｓ４０７）、および格納領域判定手段（３１、Ｓ５０３）として機能させるためのゲームデータ制御プログラムである。ゲームデータロード手段は、前記外部記憶媒体から前記内部メモリにゲームデータをロードする。格納領域変更手段は、前記内部メモリにロードされた各ゲームパラメータ値の格納領域をゲーム処理中の所定のタイミングで変更する（図７、図１４、図１５）。再配置手段は、前記格納領域変更手段による格納領域の変更結果に基づいて各ゲームパラメータ値を再配置する。配置情報格納手段は、前記再配置手段が各ゲームパラメータ値を再配置した時に、各ゲームパラメータ値の格納領域を直接的にまたは間接的に示す配置情報（図５、図１４、図１５）を前記内部メモリの特定領域に格納する。格納領域判定手段は、ゲーム処理において前記内部メモリ内のゲームパラメータ値を参照または書換える必要があったときに、前記配置情報を参照して当該ゲームパラメータ値の格納領域を判定する。
【００２２】
なお、前記格納領域変更手段は、前記内部メモリの少なくとも１つのアドレス（例えば格納先頭アドレス）を指定することによって、変更後のゲームデータの格納領域を直接的にまたは間接的に設定するものであってもよい。
【００２３】
また、前記ゲームデータ制御プログラムは、前記コンピュータを、ゲーム処理において前記内部メモリ内のゲームデータを前記外部記憶媒体に保存する必要があったときに、前記配置情報を参照して、当該ゲームデータを本来の所定の形式で当該外部記憶媒体に保存するゲームデータセーブ手段（３１、Ｓ６０３）としてさらに機能させるものであってもよい。
【００２４】
また、前記格納領域変更手段は、乱数に基づいて前記内部メモリにおけるゲームデータの格納領域を変更するものであってもよい（Ｓ２０１）。
【００２５】
また、前記格納領域変更手段は、前記内部メモリにおけるゲームデータの格納領域を全体的にシフトさせるためのオフセット値を指定することによって前記内部メモリにおけるゲームデータの格納領域を変更するものであり、前記再配置手段は、前記内部メモリの特定アドレスに対して前記オフセット値を加えたアドレスを基準として、当該内部メモリにゲームデータを各ゲームパラメータの格納位置関係が維持されるように一体的に再配置するものであってもよい（図７）。
【００２６】
また、前記格納領域変更手段は、ゲームデータを構成する複数のブロック間の格納位置関係が再配置により変化するように、前記内部メモリにおけるゲームデータの格納領域をブロック毎に変更するものであってもよい（図１４）。
【００２７】
また、前記ブロックが、前記内部メモリの１アドレスに対応するデータであってもよい。
【００２８】
本発明の第１のゲームデータ書換プログラムは、第１または第２のゲームデータ制御プログラムによって内部メモリ（３５）に記憶されたゲームデータに含まれる所定のパラメータのデータを書換えるためのゲームデータ書換プログラムであって、コンピュータ（７９）に、プレイヤに対して第１の検索対象の数値の入力を促すステップ（Ｓ７０３）、前記内部メモリに記憶されるゲームデータの中から前記第１の検索対象の数値に対応する数値を検索し（Ｓ７０７）、当該数値が格納された少なくとも一つの第１格納アドレスを検出するステップ（Ｓ７０９）、前記検出された第１格納アドレスに対して絶対的な関係（例えば、連続する、数アドレス分だけ離れている）にある複数の格納アドレスの数値と前記第１格納アドレスの数値とを指標として、動的に変化する前記格納アドレスの変化を追跡するステップ（Ｓ７１５）、プレイヤに対して第２の検索対象の数値の入力を促すステップ（Ｓ７２１）、前記第２の検索対象の数値に対応する数値を検索し（Ｓ７２５）、当該数値が格納された少なくとも一つの第２格納アドレスを検出するステップ（Ｓ７２７）、前記第２格納アドレスと前記第１格納アドレスとの間で一致する格納アドレスがあるとき、当該格納アドレスを書換対象格納アドレスとして決定するステップ（Ｓ７３１）、プレイヤに対して書換数値の入力を促すステップ（Ｓ７３３）、および、前記書換対象格納アドレスの数値を前記入力された書換数値に書き換えるステップ（Ｓ７３５）を実行させるためのゲームデータ書換プログラムである。
【００２９】
本発明の第２のゲームデータ書換プログラムは、第１または第２のゲームデータ制御プログラムに従って前記内部メモリ（３５）に配置されたゲームデータを書換えるためのゲームデータ書換プログラムであって、コンピュータ（７９）に、所定のゲームデータを所定の値に書換えるためのコードの入力を受け付けるステップ（Ｓ８０５）、入力されたコードと前記アドレス情報格納手段によって前記内部メモリに格納されたアドレス情報に基づいて、書換え対象となるゲームデータの格納アドレスを判定するステップ（Ｓ８０９）、および、判定の結果得られた格納アドレスに記憶されているゲームデータの値を前記コードが示す値に書換えるステップ（Ｓ８１１）を実行させるためのゲームデータ書換プログラムである。
【００３０】
本発明のゲームデータ書換装置は、第１または第２のゲームデータ書換プログラムを内蔵し、前記ゲーム装置のコンピュータを当該ゲームデータ書換プログラムに基づいて動作させる制御部（７９）を備えたゲームデータ書換装置である。
【発明の効果】
【００３１】
本発明の第１のゲームデータ制御プログラムによれば、バックアップメモリからゲームデータを読み出すたびに、内部メモリの異なる格納アドレスに記憶するようにする。よって、特定のパラメータが記憶された内部メモリの格納アドレスが一度知られてしまっても、次にバックアップメモリからゲームデータが読み出されたときには異なる格納アドレスにそのデータが記憶されるので、雑誌やインターネット上に掲載された格納アドレスのデータを書き換えても、ゲームデータが壊れることになり、一般ユーザによる安易なゲームデータの改変を防ぐことができる。
【００３２】
特に、内部メモリにロードしたゲームデータを再び外部記憶媒体に保存するときに本来の所定の形式に戻して保存するようにすれば、外部記憶媒体に記憶されたゲームデータの形式が統一されるため好ましい。
【００３３】
また特に、内部メモリにおけるゲームデータの格納領域を乱数に基づいて設定するようにすれば、どのゲームパラメータ値が内部メモリのどの領域にロードされるのかを予測することができなくなるため、ゲームデータの改変をより困難にすることができる。
【００３４】
また特に、ゲームデータ全体をロードの度に異なる領域にシフトさせるようにすれば、配置情報として例えばゲームデータの格納領域の先頭アドレスだけを記憶しておくだけでよいため、内部メモリを節約することができる。
【００３５】
また特に、ゲームデータを複数のブロックに分割し、ブロック単位でロードの度に異なる領域にロードするようにすれば、ゲームデータ全体をシフトさせる場合に比べて、特定のゲームデータが内部メモリのどの領域にロードされたかを知ることがより困難となる。なお、ブロックのサイズが小さいほどその困難性は増す。
【００３６】
本発明の第２のゲームデータ制御プログラムによれば、ゲームデータを内部メモリにロードした後に、ゲームデータが記憶されている格納アドレスを動的に変化させる。よって、ゲームが実行されているときにおいても、動的にゲームデータの格納アドレスが変化するので、一般ユーザによる安易なゲームデータの改変をより効果的に防ぐことができる。
【００３７】
本発明の第１のゲームデータ書換プログラムによれば、書換えようとするゲームパラメータ値の格納アドレスをサーチするときに、候補として検出された格納アドレスだけでなく、その格納アドレスと絶対的な関係を有する他のアドレスに記憶されている数値をも考慮して格納アドレスを特定するため、仮に内部メモリにおいてゲームデータの格納アドレスが定期的にシフトする場合であっても書換えようとするゲームパラメータ値の格納アドレスを検出することができる。
【００３８】
本発明の第２のゲームデータ書換プログラムによれば、内部メモリの特定領域に記憶されている配置情報を参照してゲームデータを書換えるため、仮に内部メモリにおいてゲームデータの格納アドレスが定期的に変化する場合であっても、コードを入力するだけで簡単に内部メモリのゲームデータを書換えることができる。
【発明を実施するための最良の形態】
【００３９】
（第１の実施形態）
以下、本発明の第１の実施形態に係るゲームシステムについて図面を参照して説明する。
【００４０】
図１に、ゲームシステムの外観を示す。ゲームシステムは、携帯ゲーム機１３とカートリッジ１１とで構成される。携帯ゲーム機１３には、ＬＣＤ１７や、スピーカ１９や、複数の操作キー（例えば、Ａボタン１５ａ、Ｂボタン１５ｂ、十字キー１５ｃなど）が設けられている。
【００４１】
次に、図２を参照してゲームシステムの内部構成について説明する。カートリッジ１１には、ゲームプログラムが記録されたプログラムＲＯＭ２１や、ゲーム処理の過程で生成されたゲームデータを必要に応じて記憶するためのバックアップＲＡＭ２３が設けられている。バックアップＲＡＭ２３に記憶されるゲームデータは、ゲーム進行状況を示す複数のゲームパラメータ値から成る。プログラムＲＯＭ２１やバックアップＲＡＭ２３のメモリマップについては後述する。
【００４２】
一方、携帯ゲーム機１３には、ゲーム画像を表示するためのＬＣＤ１７や、カートリッジ１１を接続するためのコネクタ２７や、カートリッジ１１から供給されたゲームプログラムに基づいてゲーム処理を実行するプロセッサ２９や、スピーカ１９や、サウンドアンプ４１や、操作キー１５が設けられている。プロセッサ２９は、ゲームプログラムに基づいて各種処理を実行するＣＰＵコア３１や、ＬＣＤ１７を駆動するためのＬＣＤコントローラ３３や、ＣＰＵコア３１のワークメモリとしてのワークＲＡＭ３５や、画像処理に利用されるＶＲＡＭ３７や、サウンド回路やＤＭＡ回路等の周辺回路３９から構成される。
【００４３】
なお、本実施形態では、カートリッジ１１を通じて携帯ゲーム機１３のプロセッサ２９にゲームプログラムが供給されるが、本発明はこれに限らず、ＣＤ−ＲＯＭやＤＶＤなど、コンピュータ読み取り可能な任意の記録媒体を通じてゲームプログラムが供給されても構わない。また、有線または無線の通信回線を通じてゲームプログラムが供給されても構わない。また、携帯ゲーム機１３の内部に設けられた任意の記録装置にゲームプログラムが予め格納されていても構わない。また、本発明は携帯ゲーム機に限らず、据え置き型のゲーム機など、任意のゲーム機に適用することができる。この場合に、ゲームデータのバックアップ先として、メモリカード，ＨＤＤなどの外部記憶媒体が用いられる。
【００４４】
次に、図３を参照してプログラムＲＯＭ２１のメモリマップについて説明する。プログラムＲＯＭ２１には、図３に示すように、ゲーム処理を実行するためのゲームプログラム４３の他に、ゲームデータをゲーム処理で利用するために携帯ゲーム機１３のワークＲＡＭ３５に配置するための各種プログラム、すなわちデータ読出プログラム４５、格納アドレス決定プログラム４７、ワークＲＡＭ格納プログラム４９、データ再配置プログラム５１、データ更新プログラム５３およびデータ書込プログラム５５が記憶されている。なお、本実施例では説明を容易にするため、コンピュータで実行される機能ごとにプログラムと記載して分けているが、実際には全てのプログラムの機能が単一のモジュールとして存在していたり、また、単一のプログラムの機能が複数のモジュールに分かれ存在している場合もある。
【００４５】
次に、図４を参照してバックアップＲＡＭ２３のメモリマップについて説明する。バックアップＲＡＭ２３には、図４に示すように、少なくとも１種類のゲームタイトル（プログラムＲＯＭ２１に記憶されているゲームプログラム）に対応するゲームデータが記憶されている。ここでは、第１〜第３のゲームデータの三種類のゲームデータが記憶されている例を示すが、これらのゲームデータは例えば種類の異なるゲームタイトルごとのゲームデータや、同じゲームタイトルであるが各々異なるゲームの進行状況の時に保存したゲームデータを示しているものである。ゲームタイトルごとに保存されるゲームパラメータの種類や値が異なるが、ゲームデータを構成の一例を図５に示す。図５に示すように、ゲームデータは、ゲーム進行状況を示す複数のゲームパラメータ値から成る。このゲームパラメータ値は、プレイヤ名、ＨＰ（ヒットポイント；キャラクタの体力、ＭＰ（マジックポイント；キャラクタの魔法力）、所持金額、所持する武器の種類、所持する防具の種類、ゲーム中断時のマップ上の位置や時間（図示せず）などを示す値である。ゲームプログラム４３の実行時には、これらのゲームパラメータ値は携帯ゲーム機１３のワークＲＡＭ３５に一時的に記憶され、ゲーム進行状況に応じて適宜更新される。そして、プレイヤがゲームを中断するときなどに、その時点でワークＲＡＭ３５に記憶されているゲームパラメータ値が、図４に示すようにカートリッジ１１のバックアップＲＡＭ２３にゲームデータとして保存される。プレイヤがゲームを再開するとき、このゲームデータは再び携帯ゲーム機１３のワークＲＡＭ３５にロードされる。これにより、プレイヤは中断直前の状態からゲームを再開することができる。
【００４６】
次に、図５を参照して、ワークＲＡＭ３５におけるゲームデータの配置方法について説明する。
【００４７】
従来のゲームシステムでは、中断したゲームを再開するときに、メモリカードに保存されていたゲームデータが常に内部メモリの特定の格納アドレスにロードされることは前述した通りである。一方、本実施形態では、ゲームデータのロードに先立って、ワークＲＡＭ３５におけるゲームデータの格納領域がロードの度に異なるように、その格納領域が設定される。より具体的には、図５に示すように、ワークＲＡＭ３５におけるゲームデータの格納領域の先頭アドレス（以下、格納先頭アドレスと称す）がロードの度に変化するように、格納領域が設定される。その結果、各ゲームパラメータ値（例えば「所持金額」）の格納領域は、ロードの度に変化することになる。
【００４８】
なお、ゲームプログラム４３の実行中においてワークＲＡＭ３５内の特定のゲームパラメータ値を参照または書換える場合には、このゲームパラメータ値の格納アドレスを指定する必要がある。そこで本実施形態では、ゲームデータのロードの際に、図５に示すように、ワークＲＡＭ３５の特定のアドレス（ここではＡｘｘｘｈ）に配置情報として格納先頭アドレスを格納するようにしている。この特定のアドレスは、ゲームデータの格納領域のように頻繁に変化するものではない。また、配置情報とは、各ゲームパラメータ値の格納領域を直接的にまたは間接的に示す情報である。ここで、ワークＲＡＭ３５内の特定のゲームパラメータ値を参照または書換える場合には、特定のアドレスにアクセスされ、当該アドレスに保存されている配置情報（ここでは格納先頭アドレス）が参照され、そして、さらにその配置情報を基準として、ゲームパラメータ値の現在の格納アドレスが算出される。
【００４９】
図６は、ワークＲＡＭ３５における各ゲームパラメータ値の格納領域がロードの度に変化する様子を示す具体例である。この例は、ロードの度にオフセットをランダムに決定し、ワークＲＡＭ３５の特定のアドレス（ここではＡＡＡＢｈ）に対してオフセットを加えたアドレスを格納先頭アドレスとして設定する例である。すなわち、１回目のロード時にはオフセットが０と決定され、このオフセットに基づいてゲームデータの格納先頭アドレスがＡＡＡＢｈと設定され、格納先頭アドレスを記憶しておくための特定の領域（アドレスＡｘｘｘｈ）に値ＡＡＡＢｈが格納される。また、２回目のロード時にはオフセットが＋１と決定され、このオフセットに基づいてゲームデータの格納先頭アドレスがＡＡＡＣｈと設定され、格納先頭アドレスを記憶しておくための特定の領域（アドレスＡｘｘｘｈ）に値ＡＡＡＣｈが格納される。さらに、３回目のロード時にはオフセットが−２と決定され、このオフセットに基づいてゲームデータの格納先頭アドレスがＡＡＡ９ｈと設定され、格納先頭アドレスを記憶しておくための特定の領域（アドレスＡｘｘｘｈ）に値ＡＡＡ９ｈが格納される。
【００５０】
このように各ゲームパラメータ値の格納領域をロードの度に変化させることによって、例えば、あるプレイヤが、ワークＲＡＭ３５のデータをモニタすることによって特定のゲームパラメータ値の格納アドレスを突き止めたとしても、一旦ゲームデータをバックアップＲＡＭ２３にセーブしてしまうと次回にそのゲームデータをロードしたときにはそのゲームパラメータ値の格納アドレスは変化しているため、そのゲームパラメータ値の格納アドレスを再度突き止めない限りゲームパラメータ値を改変することができなくなる。さらには、あるプレイヤが、ワークＲＡＭ３５のデータをモニタすることによって特定のゲームパラメータ値の格納アドレスを突き止めて、その情報を公開したとしても、第三者にとってその情報は無意味となる。これにより、一般ユーザによるゲームデータの改変が抑制される。
【００５１】
なお、以上の説明では、ロードの度にゲームデータの格納領域を変化させる技術について説明したが、ゲームデータをワークＲＡＭ３５にロードした後、所定のタイミングでゲームデータの格納領域を変更し、ゲームデータを再配置するようにすることもできる。とりわけ、以下に説明する技術のみを製品に採用しても充分に効果を挙げることができるが、上述した技術と組み合わせて使えばより効果を期待できるので、本実施例ではその組合せ場合について説明する。以下、図７を参照して、この再配置について説明する。
【００５２】
図７は、ワークＲＡＭ３５における各ゲームパラメータ値の格納領域が、ゲームデータをロードした時点から時間Ｔ（例えば１秒）毎に変化する様子を示す具体例である。図７において、ロード時にはオフセットが−２と決定され、このオフセットに基づいてゲームデータの格納先頭アドレスがＡＡＡ９ｈと設定され、格納先頭アドレスを記憶しておくための特定の領域（アドレスＡｘｘｘｈ）に値ＡＡＡ９ｈが格納される。その後、時間Ｔが経過した時点で、オフセットが再度ランダムに決定される。その結果、オフセットが＋１と決定され、このオフセットに基づいてゲームデータの格納先頭アドレスがＡＡＡＣｈと設定され、格納先頭アドレスを記憶しておくための特定の領域（アドレスＡｘｘｘｈ）に値ＡＡＡＣｈが格納される。そして、こうして設定された格納先頭アドレスに従ってゲームデータが再配置される。その後、さらに時間Ｔが経過した時点（つまりロード時から時間２Ｔが経過した時点）で、オフセットが再度ランダムに決定される。その結果、オフセットが０と決定され、このオフセットに基づいてゲームデータの格納先頭アドレスがＡＡＡＢｈと設定され、格納先頭アドレスを記憶しておくための特定の領域（アドレスＡｘｘｘｈ）に値ＡＡＡＢｈが格納される。そして、こうして設定された格納先頭アドレスに従ってゲームデータが再配置される。
【００５３】
このように各ゲームパラメータ値の格納領域をゲーム処理中に所定のタイミングで変化させることによって、特定のゲームパラメータ値の格納アドレスを突き止めることがより困難となる。なぜなら、特定のゲームパラメータ値の格納アドレスを見つける一般的な方法では、ゲーム画面に表示されている特定のゲームパラメータ値（例えば「プレイヤキャラクタのレベル」）が例えば１９ｈ→１Ａｈ→１Ｂｈと変化したときに、ワークＲＡＭ３５内で値が同様に変化した領域（すなわち値が１９ｈ→１Ａｈ→１Ｂｈと変化した領域）をそのゲームパラメータ値の格納領域の候補として抽出するが、ゲームパラメータ値の格納領域が途中で変化する場合にはこの方法は無効になるからである。特に、時間Ｔが短いほど、特定のゲームパラメータ値の格納アドレスを突き止めることがより困難となる。したがって、ゲームデータの再配置のための処理負荷が問題とならない範囲において、時間Ｔはできるだけ短い時間に設定するのが好ましい。
【００５４】
次に、図８に示すフローチャートを参照して、本実施形態に係るゲームシステムの動作を説明する。
【００５５】
まずＣＰＵコア３１は、バックアップＲＡＭ２３に格納されているゲームデータの一覧をＬＣＤ１７に表示する（Ｓ１０１）。そして、いずれかのゲームデータがユーザによって選択されたかどうかを判定し（Ｓ１０３）、いずれかのゲームデータが選択されるとステップ１０５の格納アドレス決定処理に進む。
【００５６】
図９を参照してステップ１０５の格納アドレス決定処理について説明する。ここでは、まずＣＰＵコア３１は、乱数を発生させる（Ｓ２０１）。本ステップでは不規則性を持った値を発生又は生成できればよく、乱数を発生させる方法は任意である。例えば、ソフトウェアまたはハードウェアによって乱数を算出してもよいし、所定の乱数表を用いてもよいし、リアルタイムクロックのカウント数の値を用いてもよいし、ステップ１０１でゲームデータの一覧が表示されてからユーザがステップ１０３でゲームデータを選択するまでの時間を用いてもよいし、また、操作スイッチを押したときのカウント数の値などでもよい。続いてＣＰＵコア３１は、ステップ２０１で発生させた乱数に基づいてオフセット値を決定する（Ｓ２０３）。具体的には、プログラムにはゲームデータを格納するための基準アドレスとなるワークＲＡＭ３５のアドレスをもっており、この基準アドレスに加えるための値を算出する。次のステップでは、先に算出されたオフセット値を基準アドレスに加えることにより、ランダム性をもった格納先頭アドレスが算出され、当該格納先頭アドレスがワークＲＡＭ３５の固定アドレスに格納される（Ｓ２０５）。ここで、基準アドレスは、ゲームデータをワークＲＡＭ３５を保存する際の絶対的なアドレスである。つまり、オフセット値がランダム性を持つために格納先頭アドレスもランダム性をもち、その結果、図６や図７で示したように、ワークＲＡＭ３５におけるゲームデータの格納領域がランダム性をもってシフトされる。なお、オフセット値の取り得る範囲が増えるほど、ゲームデータの格納場所が特定しにくくなり、ゲームデータの改変が難しくなる。しかしながら、ワークＲＡＭ３５の容量は限られているため、オフセット値の取り得る範囲を妥当な範囲に制限しておくのが好ましい。オフセット値が決まると、ＣＰＵコア３１は、ワークＲＡＭ３５の固定アドレス（図５の例ではＡｘｘｘｈ）に、配置情報として格納先頭アドレスを格納する。ここでいう固定アドレスとは、プログラムから見た絶対アドレスであり、ゲームデータが格納される格納アドレスはランダム性を持った相対アドレスともいえる。なお、本格納アドレス決定処理によって、カートリッジからゲームデータが読み出されるたびに異なる先頭格納アドレスが決定されるので、ランダム性を持たせた格納領域に当該ゲームデータを格納させることができる。
【００５７】
格納アドレス決定処理が終了すると、図８のステップ１０７のゲームデータロード処理に進む。
【００５８】
図１０を参照してステップ１０７のゲームデータロード処理について説明する。ここでは、まずＣＰＵコア３１は、ワークＲＡＭ３５の固定アドレス（Ａｘｘｘｈ）を参照する（Ｓ３０１）。ここには格納先頭アドレスが格納されている。そしてＣＰＵコア３１は、ユーザが一覧から選択したゲームデータをカートリッジ１１のバックアップＲＡＭ２３から読み出して、ワークＲＡＭ３５に格納先頭アドレスから順次に格納する。
【００５９】
ゲームデータロード処理が終了すると、ＣＰＵコア３１は、ワークＲＡＭ３５にロードしたゲームデータに基づいてゲームの進行状況を設定する（Ｓ１０９）。
【００６０】
次にＣＰＵコア３１は、ゲーム処理を実行し（Ｓ１１１）、続いてゲームデータ再配置処理を実行する（Ｓ１１３）。
【００６１】
図１１を参照してステップ１１３のゲームデータ再配置処理について説明する。このステップでは、上述したステップ１０５とほぼ同様の方法を用いて、ワークＲＡＭ３５内において所定時間ごとにゲームデータの再配置を行なう。まず、ＣＰＵコア３１は、計時処理を行う（Ｓ４０１）。具体的には、携帯ゲーム機１３のクロック等に基づいて時間をカウントする。つづいて、時間のカウントを開始してから所定時間（時間Ｔ）が経過したかどうかを判定し（Ｓ４０３）、経過していなかった場合はゲームデータ再配置処理を行うことなく終了する。一方、時間のカウントを開始してから所定時間が経過していた場合には、ステップ２０１と同様に乱数を用いてオフセット値を新たに決定する（Ｓ４０５）。そして、ステップ２０３及び２０５と同様に新たなオフセット値に基づいて格納先頭アドレスを計算し、この計算結果に基づいて、固定アドレス（Ａｘｘｘｈ）に格納されている格納先頭アドレスを更新する（Ｓ４０７）。次にＣＰＵコア３１は、更新された格納先頭アドレスを基準としてワークＲＡＭ３５内のゲームデータを再配置する（Ｓ４０９）。ゲームデータを書換えようとする者が特定のパラメータの値が格納されたアドレスを見つけたとしても、この再配置処理によって次のタイミング（例えば１秒後）では当該パラメータの値は別の格納アドレスに移動しているので、容易に特定のパラメータの値を書き換えることができなくすることができる。
【００６２】
ゲームデータ再配置処理が終了すると、図８においてＣＰＵコア３１は、ワークＲＡＭ３５内のゲームデータの更新が必要かどうかを判断する（Ｓ１１５）。そして、ゲームデータの更新が不要な場合はステップ１１１に戻る。ゲームデータの更新が必要であった場合は、ＣＰＵコア３１はゲームデータ更新処理を実行する（Ｓ１１７）。
【００６３】
図１２を参照してステップ１１７のゲームデータ更新処理について説明する。ここでは、まずＣＰＵコア３１は、ワークＲＡＭ３５の固定アドレス（Ａｘｘｘｈ）を参照する（Ｓ５０１）。ここには格納先頭アドレスが格納されているので、この格納先頭アドレスに基づいて、更新対象データの格納アドレスを算出する（Ｓ５０３）。例えば、図５において所持金額を更新する場合には、所持金額はゲームデータの先頭から数えて常に７つ目のアドレスに格納されることから所持金額の格納アドレスは格納先頭アドレスから容易に算出することができる。続いてＣＰＵコア３１は、ステップ５０３で算出された格納アドレスのデータを書換える（Ｓ５０５）。こうしてゲームデータが更新される。
【００６４】
ゲームデータ更新処理が終了すると、ＣＰＵコア３１は、ゲームが終了したかどうか判定し（Ｓ１１９）、ゲームが続行している場合はステップ１１１に戻り、ゲームが終了した場合はゲームデータセーブ処理を実行する（Ｓ１２１）。
【００６５】
図１３を参照してステップ１２１のゲームデータセーブ処理について説明する。ここでは、まずＣＰＵコア３１は、ワークＲＡＭ３５の固定アドレス（Ａｘｘｘｈ）を参照する（Ｓ６０１）。ここには格納先頭アドレスが格納されているので、ワークＲＡＭ３５内のデータをこの格納先頭アドレスから順次読み出して、カートリッジ１１のバックアップＲＡＭ２３に格納する（Ｓ６０３）。その結果、バックアップＲＡＭ２３にはゲームデータが図５に示すような本来の形式で格納される。
【００６６】
以上のように、本実施形態によれば、カートリッジ１１のバックアップＲＡＭ２３から携帯ゲーム機１３のワークＲＡＭ３５にゲームデータをロードするときに、ワークＲＡＭ３５におけるゲームデータの格納領域をランダムに決定し、さらにゲーム処理中にもその格納領域を一定の周期でランダムに変更するため、ワークＲＡＭ３５においてどのゲームパラメータ値がどの格納アドレスに記憶されているのかを突き止めることが困難となる。しかも、特定のゲームパラメータ値が特定の格納アドレスに格納されていることを突き止めたとしても、その情報はその瞬間でしか意味を持たないため、ゲームデータを安易に改変することは不可能となる。
【００６７】
なお、本実施形態では、カートリッジ１１のバックアップＲＡＭ２３から携帯ゲーム機１３のワークＲＡＭ３５にゲームデータをロードするときに、ワークＲＡＭ３５におけるゲームデータの格納領域をランダムに決定し、さらにゲーム処理中にもその格納領域を一定の周期でランダムに変更する例について説明したが、本発明はこれに限らない。すなわち、ゲームデータをロードするときにワークＲＡＭ３５におけるゲームデータの格納領域をランダムに決定し、ゲーム処理中にはその格納領域を変更しないようにしてもよい。また、ゲームデータをロードするときにはワークＲＡＭ３５における一定の格納領域にゲームデータをロードし、ゲーム処理中にその格納領域を一定の周期でランダムに変更するようにしてもよい。
【００６８】
また、本実施形態では、配置情報として格納先頭アドレスを固定アドレスに格納しておく例について説明したが、本発明はこれに限らない。すなわち、各ゲームパラメータ値の格納領域を直接的にまたは間接的に示す任意の情報を配置情報として固定アドレスに格納することができる。例えば、格納先頭アドレスの替わりに、ワークＲＡＭ３５におけるゲームデータの格納領域の最後尾のアドレスを配置情報として格納してもよい。また、例えば、格納先頭アドレスの替わりにオフセット値を格納してもよい。
【００６９】
また、本実施形態では、ゲーム処理中にゲームデータの格納領域を変更するときに、一定の周期でランダムに変更する例について説明したが、本発明はこれに限らない。すなわち、格納領域を一定の周期で変更するのではなく、例えばゲーム処理において特定のイベントが発生する度に格納領域を変更するようにしてもよい。また、格納領域をランダムに変更するのではなく、ゲームデータの格納領域が再配置の度に１アドレス分だけ順次シフトするようにしてもよい。
【００７０】
また、本実施形態では、配置情報を固定アドレスに格納するとしたが、配置情報を暗号化したものを固定アドレスに格納するようにしてもよい。この場合、固定アドレスに格納した配置情報を参照する際に解読処理が必要となることは言うまでもない。
【００７１】
ところで、本実施形態では、ゲームデータの格納領域をオフセット値に基づいて全体的にシフトさせることによって、各ゲームパラメータ値の格納領域が一定とならないようにしている。つまり、ゲームデータにおける各ゲームパラメータ値の位置関係は、常に固定である。例えば、図５の例では、「ＭＰ」が格納されているアドレスの次のアドレスには必ず「所持金額」が格納されており、さらに次のアドレスには必ず「武器」が格納されている。したがって、各ゲームパラメータ値の格納領域が変化したとしても、ゲームデータの格納領域がどのようにシフトしたかを容易に類推できてしまう。そこで、このような類推をより困難にするための変形例について図１４〜図１６を参照して以下で説明する。
【００７２】
本変形例では、図１４に示すように、ゲームデータを複数のブロック（ここでは第１ブロック〜第３ブロック）に分割し、ブロック単位で格納領域をランダムに設定したり変更したりする。なお、ブロック単位で格納領域をランダムに設定したり変更したりする替わりに、ブロックの順番をランダムに設定したり変更したりしてもよい。なお、各ブロック内では各パラメータの位置関係は固定である。よって、配置情報として各ブロックの格納先頭アドレスだけを格納しておけば、この配置情報と各ブロックにおけるパラメータの位置関係とに基づいて任意のパラメータの格納アドレスを算出することができる。図１４の例では、固定アドレス（ＡｘｘＡｈ）には、第１ブロックの格納先頭アドレスであるＡＡＢ０ｈが格納され、固定アドレス（ＡｘｘＢｈ）には、第２ブロックの格納先頭アドレスであるＡＡＢＢｈが格納され、固定アドレス（ＡｘｘＡｈ）には、第３ブロックの格納先頭アドレスであるＡＡＡ９ｈが格納される。このように、ゲームデータを複数のブロックに分割することで、上記類推が困難となる。
【００７３】
なお、１ブロックを構成するデータサイズは任意である。したがって、例えば図１５に示すように、各ゲームパラメータを１ブロックとみなして、ゲームパラメータ単位で格納領域をランダムに設定したり変更したりすることも考えられる。こうすることにより、各ゲームパラメータ値の位置関係に規則性が無くなるため、仮に特定のゲームパラメータ値の格納アドレスを突き止めることができたとしても、そこから他のゲームパラメータ値の格納アドレスを類推することは不可能となる。図１５の例では、配置情報の一例としてアドレス対応テーブルを格納している。このアドレス対応テーブルは、図１６に示すように、ゲームパラメータ毎に、バックアップＲＡＭ２３におけるアドレスと、ワークＲＡＭ３５におけるアドレスとの対応関係を記述したものである。バックアップＲＡＭ２３においては各ゲームパラメータ値の格納アドレスは固定なので、特定のゲームパラメータ値を更新する場合には、バックアップＲＡＭ２３におけるそのゲームパラメータ値の格納アドレスを指定すれば、アドレス対応テーブルに基づいてワークＲＡＭ３５におけるそのゲームパラメータ値の格納アドレスを取得することができる。なお、このアドレス対応テーブルは、ゲームデータをワークＲＡＭ３５にロードする際、またはワークＲＡＭ３５内のゲームデータを再配置する際に動的に生成しても構わないし、あるいは、予め複数の異なるアドレス対応テーブルを用意しておき、ゲームデータをワークＲＡＭ３５にロードする際、またはワークＲＡＭ３５内のゲームデータを再配置する際に、これら複数のアドレス対応テーブルの中から１つのアドレス対応テーブルをランダムに選択し、選択したアドレス対応テーブルに従ってゲームデータをロードまたは再配置するようにしてもよい。
【００７４】
なお、１ブロックを構成するデータサイズをワークＲＡＭ３５の１アドレス分にまで小さくすることも考えられる。すなわち、ゲームデータを１アドレス分のデータ単位で格納領域（格納アドレス）をランダムに設定したり変更したりすることも考えられる。こうすることにより、例えば図５に示す「プレイヤ名」のように、複数アドレスにまたがるようなゲームパラメータ値が分割されてばらばらに配置されるため、このゲームパラメータ値を書換えることが非常に困難となる。
【００７５】
（第２の実施形態）
以下、本発明の第２の実施形態に係るゲームシステムについて図面を参照して説明する。
【００７６】
図１７に、ゲームシステムの外観を示す。携帯ゲーム機１３およびカートリッジ１１については図１に示したものと同一であるので同一の参照符号を付し、説明を省略する。第２の実施形態では、携帯ゲーム機１３とカートリッジ１１とがゲームデータ書換装置７１を介して接続される。ゲームデータ書換装置７１を操作するための入力手段としては、携帯ゲーム機１３の操作キー１５を利用することができるが、ゲームデータ書換装置７１とパソコンを通信ケーブルで接続することにより、パソコンに接続されたキーボードやマウスをゲームデータ書換装置７１を操作するための入力手段として利用し、後述する制御部７９と同等の機能を有するプログラムをパソコンのコンピュータに実行させることにより、当該コンピュータを制御部７９の代わりに利用することもできる。同様に、ゲームデータ書換装置７１の表示手段としては、携帯ゲーム機１３のＬＣＤ１７を利用することができるが、ゲームデータ書換装置７１とパソコンを通信ケーブルで接続することにより、パソコンに接続されたモニタをゲームデータ書換装置７１を操作するための入力手段として利用することもできる。
【００７７】
次に、図１８を参照して、ゲームデータ書換装置７１の構成について説明する。
【００７８】
ゲームデータ書換装置７１は、カートリッジ１１と接続するためのコネクタ７３と、パソコンと通信するための通信ポート７５と、後述するデータ書換処理を実行するための制御部７９と、携帯ゲーム機１３と接続するためのコネクタ８１と、コネクタ７３、８１、通信ポート７５、制御部７９間のデータのやりとりを制御するためのバスコントローラ７７とを備えている。
【００７９】
以下、ゲームデータ書換装置７１の制御部７９に動作について図１９に示すフローチャートを参照して説明する。制御部７９にはゲームデータ書換プログラムが内蔵されており、制御部７９は、このゲームデータ書換プログラムに従ってデータ書換処理を実行する。
【００８０】
まず制御部７９は、携帯ゲーム機１３において実行されているゲームプログラムの実行を一時的に停止させる（Ｓ７０１）。そして、携帯ゲーム機１３のＬＣＤ１７に、ユーザに第１の検出対象数値を入力させるための入力受付画面を表示し、その入力を促す（Ｓ７０３）。ユーザは、第１の検出対象数値として、書換えようとするゲームパラメータの現在の値（仮に、所持金額（９Ａｈ）とする）を入力する。制御部７９は、第１の検出対象数値が入力されたかどうか判断し（Ｓ７０５）、第１の検出対象数値が入力されたと判断すると、携帯ゲーム機１３のワークＲＡＭ３５に格納されているデータの中から、第１の検索対象数値と同じ値（９Ａｈ）をサーチする（Ｓ７０７）。このサーチの結果、通常は、第１の検索対象数値と同じ値が複数検出されることになる。
【００８１】
次に、サーチ結果に基づいて、第１の検索対象数値と同じ値が記憶されている格納アドレスを検出する（Ｓ７０９）。そして、検出された格納アドレス（仮に、ＡＡＡＦｈとする）に記憶されている値を、その近辺（例えば検出された格納アドレスに隣接する２つのアドレス）に記憶されている値と共に、ウォッチ対象データとして記憶する（Ｓ７１１）。例えば、図７において、所持金額（９Ａｈ）に隣接するＭＰ（１５ｈ）と武器（３５ｈ）の値をウォッチ対象データとして記憶する。その後、ゲームプログラムの実行を再開する（Ｓ７１３）。
【００８２】
ゲームプログラムが実行されている間、制御部７９は、ステップ７１１でウォッチ対象データの値や格納アドレスが変更されたかどうか監視し、格納アドレスが変更された場合には変更後の格納アドレスを検出し、さらに監視を続ける（Ｓ７１５）。なお、本実施形態では、ステップ７０９で検出された格納アドレスに記憶されている値だけでなく、その近辺に記憶されている値と共にウォッチ対象データとして記憶しているが、このように近辺の値も考慮することにより、格納アドレスが変化したことをより確実に検知することができる。例えば、所持金額（９Ａｈ）とＭＰ（１５ｈ）と武器（３５ｈ）の値が同時に変化した場合に、格納アドレスが変化したと判断することができる。続いて制御部７９は、ユーザによるゲームプログラムの一時停止指示があったかどうか判断し（Ｓ７１７）、一時停止指示があるまで監視を続ける。ユーザは、例えば所持金額が９Ａｈから９Ｆｈに変化した後に、ゲームプログラムの一時停止指示を行う。ユーザによる一時停止指示があった場合には、制御部７９は、ゲームプログラムの実行を一時的に停止する（Ｓ７１９）。
【００８３】
次に、図２０において、制御部７９は、携帯ゲーム機１３のＬＣＤ１７に、ユーザに第２の検出対象数値を入力させるための入力受付画面を表示し、その入力を促す（Ｓ７２１）。ユーザは、第２の検出対象数値として、書換えようとするゲームパラメータ（所持金額）の現在の値（９Ｆｈ）を入力する。制御部７９は、第２の検出対象数値が入力されたかどうか判断し（Ｓ７２３）、第２の検出対象数値が入力されたと判断すると、携帯ゲーム機１３のワークＲＡＭ３５に格納されているデータの中から、第２の検索対象数値と同じ値（９Ｆｈ）をサーチする（Ｓ７２５）。
【００８４】
次に、サーチ結果に基づいて、第２の検索対象数値と同じ値が記憶されている格納アドレスを検出する（Ｓ７２７）。その後、検出された格納アドレスが、ウォッチ対象データとして記憶していた値の格納アドレスと一致しているかどうかを判定し（Ｓ７２９）、一致していなかった場合は、携帯ゲーム機１３のＬＣＤ１７に、データの書換に失敗した旨のエラー表示を行い（Ｓ７３９）、ステップ７４１に進む。一方、ステップ７２７で検出された格納アドレスが、ウォッチ対象データとして記憶していた値の格納アドレスと一致していた場合には、この一致した格納アドレスと値（９Ｆｈ）をＬＣＤ１７に表示する（Ｓ７３１）。
【００８５】
次に制御部７９は、ユーザによる数値の入力を受け付け（Ｓ７３３）、ユーザが所望の数値（例えばＥＥｈ）を入力すると、上記格納アドレスに記憶されている値（９Ｆｈ）をユーザが入力した値（ＥＥｈ）に書換える（Ｓ７３５）。続いて制御部７９はゲームプログラムの実行を再開する（Ｓ７３７）。この後、ユーザが書換えたゲームパラメータ（所持金額）の値をステップ７３３でユーザが入力した値（ＥＥｈ）に維持する必要がある場合には、そのゲームパラメータ値の格納アドレスを監視しつつ、その値を、ステップ７３３でユーザが入力した値（ＥＥｈ）に定期的に書換える（Ｓ７４１）。
【００８６】
なお、本実施形態では、ゲームプログラムの実行を一時的に停止したり再開する例について説明したが、本発明はこれに限らず、ゲームプログラムの実行を停止することなく、メモリイメージをリアルタイムでキャプチャして数値のサーチ等を行うようにしてもよい。
【００８７】
以上のように、第２の実施形態によれば、ゲームパラメータ値の格納アドレスが定期的に変更される場合であっても、特定のゲームパラメータ値の格納アドレスを効率的に検知することができる。
【００８８】
（第３の実施形態）
次に、本発明の第３の実施形態に係るゲームシステムについて図面を参照して説明する。ただし、第３の実施形態が第２の実施形態と異なる点は、制御部７９の動作のみであるので、ゲームシステムおよびゲームデータ書換装置の構成については説明を省略する。また、以下の説明では、図１７および図１８を援用する。
【００８９】
以下、第３の実施形態に係るゲームデータ書換装置７１の制御部７９に動作について図２１に示すフローチャートを参照して説明する。制御部７９にはゲームデータ書換プログラムが内蔵されており、制御部７９は、このゲームデータ書換プログラムに従ってデータ書換処理を実行する。
【００９０】
まず制御部７９は、携帯ゲーム機１３において実行されているゲームプログラムの実行を一時的に停止させる（Ｓ８０１）。そして、携帯ゲーム機１３のＬＣＤ１７に、ユーザにデータ書換のためのコードを入力させるためのコード入力受付画面を表示し、その入力を促す（Ｓ８０３）。コードは、書換えようとするゲームパラメータ値の格納アドレスを特定するための値と、書換え後の値を指定するための値から成る。書換えようとするゲームパラメータ値の格納アドレスを特定するための値としては、例えば、書換えようとするゲームパラメータ値の格納アドレスがゲームデータの先頭アドレスから数えて何番目のアドレスかを示す値が挙げられる。この場合、例えば、図６において、所持金額をＥＥｈに書換える場合のコードは、値（０７ｈ）と、値（ＥＥｈ）とから成る。
【００９１】
制御部７９は、コードが入力されたかどうかを判断し（Ｓ８０５）、コードが入力された場合は、携帯ゲーム機１３のワークＲＡＭ３５の固定アドレス（図６の例ではＡＡＡＢｈ）を参照して格納先頭アドレスを取得する（Ｓ８０７）。そして、取得した格納先頭アドレスと、コードに含まれている、書換えようとするゲームパラメータ値の格納アドレスを特定するための値（０７ｈ）とに基づいて、書換対象となる格納アドレスを判定する（Ｓ８０９）。
【００９２】
その後、制御部７９は、ステップ８０９で判定された格納アドレス（ＡＡＢ１ｈ）の値を、コードに含まれている、書換え後の値を指定するための値（ＥＥｈ）に書換える（Ｓ８１１）。そして、ゲームプログラムの実行を再開する（Ｓ８１３）。
【００９３】
なお、配置情報として、ワークＲＡＭ３５の固定アドレス（Ａｘｘｘｈ）にオフセット値が格納される場合には、上記のコードに含まれる「書換えようとするゲームパラメータ値の格納アドレスを特定するための値」として、オフセット値が０のときの格納アドレスを用いることができる。この場合、図６の例では、所持金額の格納アドレスを特定するための値はＡＡＢ１ｈとなる。このとき、ステップ８０９では、ＡＡＢ１ｈに現在のオフセット値を足すことで、所持金額の現在の格納アドレスを算出することができる。
【００９４】
以上のように、第３の実施形態によれば、ゲームパラメータ値の格納アドレスが定期的に変更される場合であっても、ワークＲＡＭ３５の固定アドレスに記憶されている配置情報を利用することにより、特定のゲームパラメータ値を書換えることができる。
【図面の簡単な説明】
【００９５】
【図１】本発明の第１の実施形態に係るゲームシステムの外観図
【図２】第１の実施形態に係るゲームシステムの内部構成を示すブロック図
【図３】プログラムＲＯＭ２１のメモリマップ
【図４】バックアップＲＡＭ２３のメモリマップ
【図５】ワークＲＡＭ３５におけるゲームデータの配置方法の原理を示す図
【図６】ワークＲＡＭ３５におけるゲームデータの配置の具体例を示す図
【図７】ワークＲＡＭ３５におけるゲームデータの再配置の具体例を示す図
【図８】第１の実施形態に係るゲームシステムの動作を示すフローチャート
【図９】格納アドレス決定処理の流れを示すフローチャート
【図１０】ゲームデータロード処理の流れを示すフローチャート
【図１１】ゲームデータ再配置処理の流れを示すフローチャート
【図１２】ゲームデータ更新処理の流れを示すフローチャート
【図１３】ゲームデータセーブ処理の流れを示すフローチャート
【図１４】ワークＲＡＭ３５におけるゲームデータの他の配置方法を示す図
【図１５】ワークＲＡＭ３５におけるゲームデータのさらに他の配置方法を示す図
【図１６】アドレス対応テーブルの具体例を示す図
【図１７】本発明の第２の実施形態に係るゲームシステムの外観図
【図１８】ゲームデータ書換装置７１の内部構成を示す図
【図１９】第２の実施形態に係るゲームシステムの動作を示すフローチャートの一部
【図２０】第２の実施形態に係るゲームシステムの動作を示すフローチャートの残りの一部
【図２１】本発明の第３の実施形態に係るゲームシステムの動作を示すフローチャートの一部
【符号の説明】
【００９６】
１１  カートリッジ
１３  携帯ゲーム機
１５  操作キー
１５ａ  Ａボタン
１５ｂ  Ｂボタン
１５ｃ  十字キー
１７  ＬＣＤ
１９  スピーカ
２１  プログラムＲＯＭ
２３  バックアップＲＡＭ
２７  コネクタ
２９  プロセッサ
３１  ＣＰＵコア
３３  ＬＣＤコントローラ
３５  ワークＲＡＭ
３７  ＶＲＡＭ
３９  周辺回路
４１  サウンドアンプ
４３  ゲームプログラム
４５  データ読出プログラム
４７  格納アドレス決定プログラム
４９  ワークＲＡＭ格納プログラム
５１  データ再配置プログラム
５３  データ更新プログラム
５５  データ書込プログラム
５７  第１ゲームデータ
５９  第２ゲームデータ
６１  第３ゲームデータ
７１  ゲームデータ書換装置
７３  コネクタ
７５  通信ポート
７７  バスコントローラ
７９  制御部
８１  コネクタ
【図１】
2005144055.tif 000003
【図２】
2005144055.tif 000004
【図３】
2005144055.tif 000005
【図４】
2005144055.tif 000006
【図５】
2005144055.tif 000007
【図６】
2005144055.tif 000008
【図７】
2005144055.tif 000009
【図８】
2005144055.tif 000010
【図９】
2005144055.tif 000011
【図１０】
2005144055.tif 000012
【図１１】
2005144055.tif 000013
【図１２】
2005144055.tif 000014
【図１３】
2005144055.tif 000015
【図１４】
2005144055.tif 000016
【図１５】
2005144055.tif 000017
【図１６】
2005144055.tif 000018
【図１７】
2005144055.tif 000019
【図１８】
2005144055.tif 000020
【図１９】
2005144055.tif 000021
【図２０】
2005144055.tif 000022
【図２１】
2005144055.tif 000023