Road Rash 1および2ゲームのパスワードの生成

最近、HabrahabrでRoad Rashに関する投稿を見ましたが、「他の2つの部分のパスワードシステムはどうですか?」 この記事では、私の観察と結果をあなたと共有したいと思います。



画像



First Road Rash



理論


パスワードは20個の位置で構成され、各位置は5ビットで構成され、合計20 * 5 = 100ビットです。 これらのビットには、次のゲームパラメータが格納されます。



ここで、未加工のパスワードの構成を見てみましょう。



(U、SN、SN、SN、SN)(U、PC、PC、PC、PC)(U、RF、RF、RF、RF)(U、PD、PD、PD、PD)(U、GV、GV 、GV、GV)(H、H、H、H、H)(H、H、H、H、H)(H、H、H、H、H)(H、H、H、H、H)( N、M、M、M、C1)(M、M、M、M、C1)(M、M、M、M、C1)(M、M、M、M、C1)(M、M、M、 M、C1)(M、M、M、M、C1)(U、U、L、L、L)(U、U、B、B、B)(C2、C2、C2、C2、C2)(C3 、C3、C3、C3、C3)(C4、C4、C4、C4、C4)



指定


U-未使用ビット。

SN-2進数システムでのシエラネバダの占領地の番号(0〜15)。

PC-バイナリシステムでの太平洋岸の占有席の番号(0〜15)。

RF-バイナリシステムのレッドウッドフォレスト(0〜15)の占有場所の番号。

PD-バイナリシステムのパームデザート(0-15)の占有場所の数。

GV-バイナリシステムのGrass Valeyの占有場所の番号(0〜15)。

H-ポイント数(0〜10485750)の増分=10。ポイント数を10で除算し、結果の数をバイナリに変換します。

Nは負の値のビットです。

Mは、ステップ(= 10)の金額((-83886070)-83886070)です。

正の金額を作成するには、金額を10で除算し、結果の数値を2進数システムに変換する必要があります。

マイナスの金額を作成するには、以下が必要です。

  1. 負の値を少しアクティブにします。
  2. 金額83886080(モジュロ)から金額を減算し、結果の残高を10で除算し、数値をバイナリに変換します。


Lは、2進数システムのレベル番号(1〜5)です。

B-バイナリシステムのオートバイ番号(0〜7)。

オートバイ
手裏剣400 0
パンダ600 1
バンザイ750 2
カミカゼ750 3
手裏剣1000 4
FERRUCI 850 5
パンダ750 6
DIABLO 1000 7


C1 =(位置1から17の合計)mod64(結果の数値は2進数システムに変換され、ミラーリングされます)。

C2 =(位置6から10の合計)mod32

C3 =(位置11から15の合計)mod32

C4 = C2 XOR C3。



コーディング


位置の文字は、値0〜9およびAVを取ることができます。 位置のビットは、0 = 00000、1 = 00001、2 = 00010 ... U = 11110、V = 11111という事実に従ってエンコードされます。 つまり、単純な5ビットエンコーディングです。



正の金額でパスワードを生成する例
これらのパラメーターを保存するパスワードを作成します。

  • SN = 5位、PC = 3位、RF = 7位、PD = 9位、GV = 1位
  • ポイント数(10341950)
  • 金額(23915840)
  • 現在のレベル(5)
  • オートバイ(6)
  • すべての未使用ビットはゼロです


値を2進数システムに変換します。


5 = 0101

3 = 0011

7 = 0111

9 = 1001

1 = 0001

10341950ポイント/ 10 = 1034195 = 11111100011111010011

23915840お金/ 10 = 2391584 = 1001000111111000100000

レベル5 = 101

オートバイ番号6 = 110



生のパスワードを作成し、4つのチェックサムを計算します。


(00101)(00011)(00111)(01001)(00001)(11111)(10001)(11110)(10011)(0010 *)(0100 *)(0111 *)(1110 *)(0010 *)(0000 * )(00101)(00110)(*****)(*****)(*****)



次に、値を2進数システム(* = 0)に変換します。

(5)(3)(7)(9)(1)(31)(17)(30)(19)(4)(8)(14)(28)(4)(0)(5)(6) )(0)(0)(0)。



次に、最初のチェックサムを計算します。

C1 =(5 + 3 + 7 + 9 + 1 + 31 + 17 + 30 + 19 + 4 + 8 + 14 + 28 + 4 + 0 + 5 + 6)mod64 = 191mod64 = 63 = 111111(ここでチェックサムをミラーリングします) )= 111111(*の代わりに結果の数値を書き込みます)。

(00101)(00011)(00111)(01001)(00001)(11111)(10001)(11110)(10011)(00101)(01001)(01111)(11101)(00101)(00001)(00101)(00110 )(*****)(*****)(*****)



次に、2番目、3番目、4番目のチェックサムを計算します(C1により、一部の位置の値が変更されたことを忘れてはなりません)。

C2 =(31 + 17 + 30 + 19 + 5)mod32 = 102mod32 = 6 = 00110

C3 =(9 + 15 + 29 + 5 + 1)mod32 = 59mod32 = 27 = 11011

C4 =

00110

Xor

11011

=

11101 = 29



結果のパスワードを10進表記で書き込みます。

(5)(3)(7)(9)(1)(31)(17)(30)(19)(5)(9)(15)(29)(5)(1)(5)(6 )(6)(27)(29)



次に、結果の値をエンコードします。

5,3,7,9,1 V、H、U、J、5

9、F、T、5.1 5.6.6、R、T





マイナスの金額でパスワードを生成する例
これらのパラメーターを保存するパスワードを作成します。

  • SN = 2位、PC = 5位、RF = 8位、PD = 11位、GV = 13位
  • ポイント数(5931870)
  • 金額(-53724780)
  • 現在のレベル(2)
  • オートバイ(3)
  • すべての未使用ビットは1に等しい


値を2進数システムに変換します。


2 = 0010

5 = 0101

8 = 1000

11 = 1011

13 = 1101

5931870ポイント/ 10 = 593187 = 10010000110100100011

83886080-[-53724780] = 30161300。 30161300/10 = 3016130 = 1011100000010111000010

レベル2 = 010

オートバイ番号3 = 011



生のパスワードを作成し、4つのチェックサムを計算します。


(10010)(10101)(11000)(11011)(11101)(10010)(00011)(01001)(00011)(1010 *)(1110 *)(0000 *)(0101 *)(1100 *)(0010 * )(11010)(11011)(*****)(*****)(*****)



次に、値を2進数システム(* = 0)に変換します。

(18)(21)(24)(27)(29)(18)(3)(9)(3)(20)(28)(0)(10)(24)(4)(26)(27 )(0)(0)(0)



次に、最初のチェックサムを計算します。

C1 =(18 + 21 + 24 + 27 + 29 + 18 + 3 + 9 + 3 + 20 + 28 + 0 + 10 + 24 + 4 + 26 + 7)mod64 = 291mod64 = 35 = 100011(チェックサムをミラーリングする) )= 110001(*の代わりに結果の数値を書き込みます)。

(10010)(10101)(11000)(11011)(11101)(10010)(00011)(01001)(00011)(10101)(11101)(00000)(01010)(11000)(00101)(11010)(11011 )(*****)(*****)(*****)



次に、2番目、3番目、4番目のチェックサムを計算します(C1により、一部の位置の値が変更されたことを忘れてはなりません)。

C2 =(18 + 3 + 9 + 3 + 21)mod32 = 54mod32 = 22 = 10110

C3 =(29 + 0 + 10 + 24 + 5)mod32 = 68mod32 = 4 = 00100

C4 =

10110

Xor

00100

=

10010 = 18

結果のパスワードを10進表記で書き込みます。

(18)(21)(24)(27)(29)(18)(3)(9)(3)(21)(29)(0)(10)(24)(5)(26)(27 )(22)(4)(18)



次に、結果の値をエンコードします。

I、L、O、R、TI、3.9.3、L

T、0、A、O、5 Q、R、M、4、I





画像



セカンドロードラッシュ



理論


パスワードは8つの位置で構成され、各位置は5ビットで構成され、合計8 * 5 = 40ビットです。 これらのビットには、次のゲームパラメータが格納されます。



ここで、未加工のパスワードの構成を見てみましょう。



(?、M、M、M、C1)(M、M、M、M、C1)(M、M、M、M、C1)(M、M、M、M、C1)(U、U、L 、L、L)(B、B、B、B、C1)(T、T、T、T、T)(C2、C2、C2、C2、C2)



指定


? -常にゼロに等しい。

U-未使用ビット。

Mは金額(0〜327670)の増分= 10です。 金額は10で除算され、結果の数値はバイナリシステムに変換されます。

Lは、2進数システムのレベル番号(1〜5)です。

B-バイナリシステムのオートバイ番号(0〜15)。

オートバイ
手裏剣400 0
パンダ500 1
手裏剣TT250 2
パンダ900 3
バンザイ7.11 4
バンザイ600 N 5
バンザイ750 N 6
手裏剣1000 N 7
バンザイ7.11 N 8
ディアブロ1000 N 9
パンダ600 10
バンザイ600 11
バンザイ750 12
手裏剣1000 13
DIABLO 1000 14
ワイルドシング 15


T-横断したトラック(0〜5)。

高から低へのビットの順序:

4-5番目のトラックの通過を担当します。

3-4番目のルートの通過を担当します。

2-3番目のルートの通過を担当します。

1-2番目のルートの通過を担当します。

0-最初のトラックの通過を担当します。

C1 =(5番目の位置をカウントしない1〜6の位置の合計)mod32(結果の数値は2進数に変換され、ミラーリングされます)。

C2 =((位置1〜6の合計)mod32)XOR 7位置。



コーディング


値のエンコードは、最初の部分と同じです。



パスワード生成の例
これらのパラメーターを保存するパスワードを作成します。

  • 5番目、3番目、1番目のトラックを完了した
  • 金額(193,750)
  • 現在のレベル(3)
  • オートバイ(9)
  • すべての未使用ビットはゼロです


値を2進数システムに変換します。


トレイル= 10101

レベル番号3 = 011

オートバイ番号9 = 1001

193,750お金/ 10 = 19375 = 100101110101111



生のパスワードを書き留め、2つのチェックサムを計算します。


(0100 *)(1011 *)(1010 *)(1111 *)(00011)(1001 *)(10101)(*****)



次に、値を2進数システム(* = 0)に変換します。

(8)(22)(20)(30)(3)(18)(21)(0)



次に、最初のチェックサムを計算します。

C1 =(8 + 22 + 20 + 30 + 18)mod32 = 98mod32 = 2 = 00010(ここでチェックサムをミラーリング)= 01000(*の代わりに結果の数値を書き込みます)。

(01000)(10111)(10100)(11110)(00011)(10010)(10101)(*****)。



次に、2番目のチェックサムを計算します(C1により、一部の位置の値が変更されたことを忘れてはなりません)。

C2 =(8 + 23 + 20 + 30 + 3 + 18)mod32 = 102mod32 = 6mod32 = 00110

00110

Xor

10101

=

10011 = 19



結果のパスワードを10進表記で書き込みます。

(8)(23)(20)(30)(3)(18)(21)(19)



次に、結果の値をエンコードします。

8、N、K、U 3、I、L、J





しかし、それだけではありません!

私は何か他のものを準備しました...



デザート用-バナナプリンス



Segaコンソールから少し脱線して、Nes(Dandy)に進みましょう。 このゲームは本当に私の神経を台無しにしました。 誰がプレイしたか、彼は日本語での長い質問を覚えています。そのため、ゲームの経過は地獄に変わります。 その中のパスワードは単純ですが、微妙に強調されています。 ゲームを100%完了するには、4つの鎧を集める必要がありました。 しかし、1つの問題があります。それらを取得するには、たくさんの質問に答える必要がありました。 どのようにインターネットやコードブックを調べても、収集した鎧を保存するパスワードを見つけられませんでした。 そして、それらがなければ、最後のボスはあなたに遠くにたくさんの日本のキャラクターを送ります。 しかし、ビットの割り当てを詳しく調べてみると、ゲームが次のことを節約できることがわかりました。



パスワードは8つの位置で構成され、各位置は2ビットで構成され、合計8 * 2 = 16ビットです。



ここで、未加工のパスワードの構成を見てみましょう。



(C、C)(A、L)(L、L)(L、L)(C、C)(G、G)(A、A)(G、G)



指定


C =(1と5を除くすべての位置の合計)バイナリシステム。 チェックサムの最上位2ビットは5番目の位置に書き込まれ、最下位2ビットは1位置に書き込まれます。

Aは、2進数システムの鎧の数(0〜4)です。

Lは、2進数システムのレベル番号(0〜20)です。

レベル
1-1 0
1-2 1
1-3 2
2-1 3
2-2 4
2-3 5
3-1 6
3-2 7
3-3 8
4-1 9
4-2 10
4-3 11
5-1 12
5-2 13
5-3 14
6-1 15
6-2 16
6-3 17
7-1 18
7-2 19
7-3 20


G-バイナリシステム内の武器の数(0〜15)。



コーディング


コーディングには、バナナを食べる4度が使用されます。これは数字で示します。

画像 = 0 画像 = 1 画像 = 2 画像 = 3



パスワード生成の例
これらのパラメーターを保存するパスワードを作成します。

  • キャラクターは4つの鎧を持っています
  • レベル番号(20)
  • 武器番号(15)


値を2進数システムに変換します。


4 = 100

20 = 10100

15 = 1111



生のパスワードを書きます:


(**)(11)(01)(00)(**)(11)(00)(11)



次に、値を2進数システム(* = 0)に変換します。

(0)(3)(1)(0)(0)(3)(0)(3)



チェックサムを計算します。

C =(3 + 1 + 0 + 3 + 0 + 3)= 10 = 1010.10(2つの最上位ビット)10(2つの最下位ビット)。



結果のパスワードを10進表記で書き込みます。

(2)(3)(1)(0)(2)(3)(0)(3)



数字をバナナの同等物に変換することは残っています。



おわりに



それでフィニッシュラインに行きました。

画像



何を言いたいですか? さて、この記事が誰かに役立つことを願っています。 読んでくれてありがとう。



All Articles