セーブデータの暗号化

どうして?

なぜなら、今日の世界は昨日の世界ではないからです。資本主義の少数独裁者は世界を運営し、この腐敗した社会の歯車を軌道に乗せるために私たちに消費を強制します。そのため、今日のビデオゲームの消費における最大の市場はモバイル市場です。それは、日常生活の苦悩、通勤、または支配階級の商品やサービスの生産に使用していない他の短い自由時間を忘れるために、強制的にデジタルコンテンツを消費することを余儀なくされた貧しい亡霊たちの市場です。これらの個人は、ビデオゲームに集中し続ける必要があります(そうしないと、現実的な不安にとらわれてしまいます)。そのため、彼らは自分の経験を伸ばすためにそれにお金を費やしますが、彼らの好む方法はアプリ内購入と仮想通貨を使用することです。

But what if someone were to find a way to edit the saved games and assign the items and currency without effort? That would be terrible, because it would help players consume the content much faster, and therefore run out of it sooner than expected. If that happens, they will have nothing that prevents them from thinking, and the tremendous agony of realizing their own irrelevance would again take over their life.

いいえ、私たちは絶対にそれを望まないので、セーブゲームを暗号化し、世界の秩序を保護する方法を見てみましょう。

どうやって?

クラス File は、ある場所でファイルを開き、データ(整数、文字列、バリアント)を読み書きできます。暗号化もサポートしています。暗号化されたファイルを作成するには、次のようにパスフレーズを提供する必要があります:

var f = File.new()
var err = f.open_encrypted_with_pass("user://savedata.bin", File.WRITE, "mypass")
f.store_var(game_state)
f.close()
var f = new File();
var err = f.OpenEncryptedWithPass("user://savedata.bin", (int)File.ModeFlags.Write, "mypass");
f.StoreVar(gameState);
f.Close();

これにより、ユーザーはファイルを読み取れなくなりますが、ユーザーがセーブファイルを共有できなくなることはありません。これを解決するには、デバイスの一意のIDまたは一意のユーザー識別子を使用します。次に例を示します:

var f = File.new()
var err = f.open_encrypted_with_pass("user://savedata.bin", File.WRITE, OS.get_unique_id())
f.store_var(game_state)
f.close()
var f = new File();
var err = f.OpenEncryptedWithPass("user://savedata.bin", (int)File.ModeFlags.Write, OS.GetUniqueId());
f.StoreVar(gameState);
f.Close();

OS.get_unique_id() はUWPまたはHTML5では機能しないことに注意してください。

これだけです! 市民よ、ご協力に感謝します。

注釈

暗号化キーはゲーム内に保存されているため、プレイヤーはファイルを自分で復号化および編集できるため、この方法では、プレイヤーがセーブゲームをローカルで編集することを実際に防ぐことはできません。これができないようにする唯一の方法は、セーブデータをリモートサーバーに保存することです。この場合、プレイヤーはセーブデータに対して許可された変更のみを行うことができます。ゲームで実際のお金を扱う場合は、とにかくこれを行う必要があります。