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)。
オートバイ
手裏剣4000
パンダ6001
バンザイ7502
カミカゼ7503
手裏剣10004
FERRUCI 8505
パンダ7506
DIABLO 10007

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)。
オートバイ
手裏剣4000
パンダ5001
手裏剣TT2502
パンダ9003
バンザイ7.114
バンザイ600 N5
バンザイ750 N6
手裏剣1000 N7
バンザイ7.11 N8
ディアブロ1000 N9
パンダ60010
バンザイ60011
バンザイ75012
手裏剣100013
DIABLO 100014
ワイルドシング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-10
1-21
1-32
2-13
2-24
2-35
3-16
3-27
3-38
4-19
4-210
4-311
5-112
5-213
5-314
6-115
6-216
6-317
7-118
7-219
7-320

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)

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

おわりに


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

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

Source: https://habr.com/ru/post/J303338/


All Articles