FC聖鬥士星矢的密碼是怎麼計算出來的?

最近看了 用稀奇古怪的密碼來存檔,是老遊戲最「喪心病狂」的一件事 - 知乎專欄,突然對這個有了興趣。就是具體的密碼生成規則。不知道哪位大神有相關研究資料?

———————————————————————————————

補充:我的問題是想了解聖鬥士星矢這個遊戲具體的編碼規則,就像我引用文章裡面說的那樣,每一個字元代表了什麼。按照樓下幾位提供的方法,簡單研究了一下,確實知道了某一個字元代表關卡,但好像答也不唯一,且其他字元的含義還是不明白。還是希望望了解的大神指導


最後有更新

來源:

————————————

4.30更新

有人提到烏鴉烏鴉叫。這篇文字也是電軟95年停刊事件的導火索之一。以前作為玩家的身份讀這篇文章,只有滿腹牢騷和不忿。後來自己成為遊戲行業的參與者之後,回頭再看,當真是臨表涕零,百感交集。全文截圖放在這裡,權當留念。


寫這個回答,就是看不慣某個好像說了一堆,實際上根本什麼都沒說的「回答」。

說明:

  1. 這一份只是粗略整理,並不保證準確性,這張表格整理完後實際上也還沒進行實際測試過。
  2. 表格中如「表格內容:X-Y」的項目,冒號後面為對應位。如「瞬生命」,就是「瞬生命:11-10」、「瞬生命:9-8」、「瞬生命:7-0」三段拼接而成的一個十二位數。數值類(小宇宙、生命、第七感)拼接後視作BCD碼。
  3. 部分從密碼中讀取並寫入內存的數值意義不明,暫時標記為「未知」
  4. 字母轉二進位數流程:每個字母第一行第一列為0b000000,第一行第二列為0b000001,從左往右再從上到下遞增直到0b111111。字母一共有66個,所以最後的兩個字母需要用0b1000000和0b1000001表示,由於處理中可認為只處理低6位,姑且忽略最後這兩個。
  5. 異或校驗位所在位置為猜測,因為只分析了源程序的密碼驗證程序,沒有分析密碼生成程序。
  6. 每個招式的所屬根據顏色分類,但是同一分類內可能有錯(因為沒有過多的時間去驗證每個招式具體的對應)。

密碼處理流程:

  1. 程序先判斷是否輸入了31個字母,若無則提示密碼錯誤。
  2. 程序判斷是否輸入的全部是同一個字母(比如「啊啊啊啊……」這樣),若有則提示密碼錯誤。
  3. 程序對31個字母依次異或,若結果非0則提示密碼錯誤。要實現密碼異或結果為0,猜測是在生成時將異或校驗位先填入0,再對31個字母依次異或,再將結果(這個結果往往非0)填入異或校驗位。
  4. 程序讀取取反校驗的值,設值為X,則第X個字母到第X+10個字母對應的6位二進位數需要進行取反處理。
  5. 程序將31個字母(實際上補上了一個空字母,共32個)進行拼合,變為24個位元組(32*6=24*8)。
  6. 程序從這24個位元組中讀取需要的數據放入遊戲中實際讀取的內存中,讀取中會判斷每個位元組是否合法(判斷方式:高4位小於等於9,低4位小於等於A),若某一位不合法則提示密碼錯誤。
  7. 密碼裝入完成,進入遊戲。


早期FC遊戲接關密碼生成規則雖然各異,但原理相同。

基本上都是通過預設的符號,來表示對應的數字,而這些數字對應著玩家當前所在的關卡數,體力,物品欄等的狀態。

FC遊戲使用密碼接關,簡單的例子有鳥人戰隊,4個數字,便於背記。

聖鬥士星矢則用一堆日文假名來做接關密碼,密碼很長,較難記憶和抄寫。

密碼接關的優勢是絕對不耗電,能耗為0,節能環保。

密碼接關的劣勢是需要玩家抄寫記憶大量怪異符號,萬一抄錯了幾個就會導致無法接關。


密碼的每個部分都代表一種遊戲數據,遊戲都大同小異。頂多是做一些加密處理,比如在某處加上幾個校驗字元阿,文本互換位置云云。


推薦閱讀:

一個由 "1234 + 5766" 等 5 個加法算式組成的密碼應如何破譯?
將軍令是如何工作的?不知道它隨機產生的密碼怎麼就和系統對上號了?
QQ密碼資料庫真的泄露了么?
一道古典密碼題到底怎麼解?多表?
密碼太多記不住怎麼辦?全弄成一樣又不安全。?

TAG:聖鬥士星矢 | 密碼 | 紅白機FamilyComputer,FC |