這是系列文的第二篇文章。前言什麼的就請從分類當中點選回去看吧。
這篇文章會有第 21~35 關的解法雷。
「三版」:21~29 關
遊戲的初期更新總是比較勤的。上次提到的第 20 關還有一個已經不可考的舊版,不過沒多久就換成現在這個關卡了;密碼系統從 JavaScript 改成借用了 0rz.net 縮網址時可以附帶密碼的功能。也是由於密碼系統改版所以就把改完後的 20 關版叫做二版了。
現在的三版則是在 2005 年 7 月時的第一次的新關擴充,新增了 21~29 關,然後也把它搬到了奇摩的空間去;3.1 版則是密碼系統再次改版,改成我當年剛學的 PHP。那個時代的伺服器後端語言流行的其實是 CGI,但當年的我只學了 C/C++ 兩三年,還不知道要怎麼去設定伺服器讓它能跑 CGI;因此看到 PHP 這種只要有現成的套件裝起來就能在後端執行程式的語言,馬上就著手用 PHP 寫了一個頗為簡單的密碼判定程式 (這支程式現在還在《高手過招》裡使用中 XD),然後上網搜了半天看有沒有什麼免費 PHP 空間申請來用。只是就算是 2005 年這個時候的免費 PHP 空間仍然不是很多,所以輾轉流浪了好幾個空間。
《高手過招》被貼上 PTT 小遊戲版的時間也大約是在這附近。根據紀錄,《Not pr0n》好像是約在 2004 年 11 月左右在小遊戲版上出現的,那時有好些類似的網頁遊戲也陸陸續續出現;csksoft 的《高手挑戰榜》也是我在這裡看到的。所以《高手過招》遲早也是會在小遊戲版出現的。詳細的時間現在小遊戲版上的舊文已經消失,只有我在我自己的個版留的文章有紀錄到時間點:2005 年 8 月。
那年 9 月我進了大學,在知道系上的工作站的個人網頁有支援 PHP 之後,馬上就把流浪在外的《高手過招》給搬進了工作站,自此它就在那裡定居了。1
第 21 關
這是在那個年代 (2005~2010 左右) 在網路上找資源時會時常見到的招術。原本是個很一般的圖片,但下載下來之後會發現這張圖片大的不合常理。實際上是:這張圖片的資料後面附加了一個壓縮檔。它利用了圖片檔案格式只會讀取到圖片內容所需的位元組,以及壓縮自解檔會將壓縮檔附加在解壓縮程式後面這兩個特性。前一個特性讓圖片顯示時忽略後面多餘的資料,而後一個特性則是可以讓壓縮程式把這個檔案當做前有「自解檔」的壓縮檔來解壓縮。
這關裡的圖案就是這種格式。這個壓縮檔裡有兩個檔案:一個看起來是空白的圖檔,以及一個文字檔。文字檔原本是要給這張圖檔的提示,結果因為文字檔相對圖檔太小了,吃不到壓縮比例,所以文字檔變成明文在檔案裡……偏偏關卡裡還給了個第 14 關的暗示,所以用十六進位編輯器的人就會直接看到文字檔,因此可能有人直接用在表面上的這個圖片當中了……。
第 22 關
這關先前提過是舊的第 16 關。之所以會搬來這裡是因為:這關需要的技巧比較進階一點--甚至其實可以說,第 21 關暗示使用外部程式是在幫這關舖哽。
這關用的概念是這關的檔名:UUEncode。畫面上的東西是一個檔案的 UUEncode 結果,把它複製下來解開即可--這裡就是上面說的舖哽了:至少就我所知,WinRar 是可以解開 UUEncode 的檔案的。
然後,解開之後其實還有一個彎,不過這算是解謎遊戲裡的常見小招了所以就簡單帶過:有一對引號故意省略了。
第 23 關
Paint by Numbers 應該不需要太多說明。只簡單提一點:加進這些斜角格的原因是圖寬度太寬了,如果只用單色方塊的話難度會三級跳;有這些斜角格的話可以某種程度上利用它們定位圖案。
第 24 關
OK,這關認真說起來也是偏門到點的題目。現在應該只有台灣人比較有機會馬上知道這是什麼東西了吧? (那時候的我常在說《Notpron》都有 Twix 巧克力的題目了,為什麼就不能有幾個比較台灣專門的題目?所以後面還有好幾題也都是偏向是台灣人才有辦法答的題目。)
這關的題目是 ANSI 色票。不過倒不是顏色 (那些顏色是我用 PHJCI 亂塗塗出來的),而是題目中的字大多數都會閃爍 (CSI 5 m 的閃爍字),只有一部份的字不會,那些不會的字就拼出答案來。至於要怎麼讓 ANSI 色票實際變成顏色……除非手邊已經有一個 *nix 環境可以用,不然好像真的只剩下貼到 PTT 一個方法了。不過當年我確實是有把「貼上 PTT」做為一個可能解,因此這一大片文字雖然因為含有色票碼的關係看起來很長,但文字的部份確實是切在每行 77 個字,這樣能讓許多預設貼上時 78 個字換行的 BBS 程式不會破壞題目。
第 25 關 (舊)
這一關也曾經有個舊版。舊版關卡只有一張圖,圖中有灰色的英文字。比較特別的是這張圖不像大部份附圖的關卡一樣是 gif 而是 bmp,這一點簡單指出了這張圖可能不一般。只是究竟有什麼不一般就不知道了;唯一其他地方只有標題,它告訴我們要從這些字中分辨出答案來。
這一關的原設解其實很過份:將它用 Windows 的小畫家開啟 (它是全彩 bmp),再將它另存成 256 色之後,就會發現大部份字都消失,只有少數幾個字母留了下來;它們連起來就是答案了。它所使用的原理是這樣的:小畫家在另存成 256 色 bmp 時是使用它預設的色盤,當你將全彩圖存成 256 色時小畫家會將圖中的顏色調整成色盤中最接近的顏色。這些灰字其實有兩種顏色:#E0E0E0 和 #DFDFDF,乍看之下是差不多的顏色,但它正好踩在這個預設色盤中兩個顏色的分界點上。#E0E0E0 會轉成 #FFFBF0 是個幾乎看不到的粉色,但 #DFDFDF 會轉成 #C0DCC0 是個有些暗的綠色,所以原本差很少的顏色被拉向兩邊就變成很不一樣的顏色了。
既然根本原因是顏色不同,所以其實有一個另解:用滴管選其中一個顏色,在空白處填滿,然後用白色填滿剛填進去的顏色,這樣那個不同色的字就會留了下來。我不確定有多少人是用這個另解過關的就是了……
果然後來我也覺得這是個很過份的關卡,因此這關改成了2另一個點子:
第 25 關 (新)
新的這關是我把一個脫出遊戲裡會出現的定番給實作在這裡了:把二或多個紋路重疊後顯示出字樣。不過這裡我做得又過份了一點,因為我把答案拆到 52 張撲克牌的圖檔裡去了 (當然不是手點,而是寫了個小程式去點的;程式碼基礎是後面會提到的個人用影像處理函數),因此每一張牌上只有少數幾個點,要真的幾乎全部找到才有可能看出答案來。關卡頁面上展示出的卡片其實是在告訴玩家我這些牌的圖檔的命名規則的,但還是為了以防萬一,所以這個 poker 資料夾是少數幾個資料夾我刻意沒有防止檔案列表顯示的。(後來有人回報了說這個資料夾沒有擋,我也只能笑笑回說那是故意的……。關於這個檔案列表到底是什麼,在下面 33 關會簡單解釋。)
至於玩家要怎麼疊?小畫家萬能啊。記得開透明選擇。(事實上這些圖片是含透明的 gif 檔案,所以其他影像編輯軟體也不至於沒有辦法疊圖。)
說起來,拆成 52 個檔案其實有一個好處:大概疊了 30~40 張圖之後就能看出答案了,不需要 52 張圖全部都用上。
第 26 關
脫出遊戲不能缺少的雙關謎面。其實 22 關的最後一步也算雙關,但那只是單純的去除引號而已,這裡則是真的使用單字的兩種意思。只是既然這裡是數字,這個 hex 字其實應該會比較相對想得到數字那邊的意思……所以我才在關卡畫面上故意強調 hex 的另一個意思。
同樣地,能夠被操作的地方只有一個,把那個數字進行轉換就是答案了。
第 27 關
回顧關其之一。這算是其中一種讓用過的關卡再次拿出來應用的方式。
這一關基本上沒有什麼其他花樣,不過除了指定的四關之外其實還有一個隱藏參照:找出這四關之後要套用另外一關的解法才能找出解答來。這算是個很明顯的用途所以就沒有明提了。
第 28 關
這關算是被現代瀏覽器破解的題目。原本的意圖是畫面上用來組成我的名字 LPH 的字母是 2 點的極小字,因此要用其他方式把這些極小字給挖出來;這至少有三個方式可以達成:複製貼上,直接檢視原始碼,或是將瀏覽器畫面放大。
問題是現代瀏覽器為了不要讓這種小字影響閱讀,所以字縮小有個極限,更小的字就不會再縮小了;也就是說這關的重點被瀏覽器給意外破解了。
找出這些字之後答案其實就在面前了,所以就不特別提。
第 29 關
這也是個被現代瀏覽器破壞了的題目。(對,是破壞了;以題目的原樣現在應該沒有人能夠簡單解開。)
這一關使用了 Internet Explorer 在 Ctrl-A 選取圖片時的陰影應用法:它會用藍色的網點覆蓋在圖片上,用這種方式省去混色運算但一樣能夠讓被選取的圖片看起來跟文字一樣有個「藍底」在。我這張圖片在被這種網點覆蓋之後,會看到圖中浮現出答案的單字出來。
它的原理是這樣的:最一開始的答案是個單純的黑白圖,然後我選了三種綠色:顏色 A (#00FF00) 自己一組,顏色 B (#00FF55) 和 C (#00FFAA) 一組。在底圖是白色的地方,我把被網點覆蓋的地方填 A 色,沒有的地方隨機填 B 或 C 色;底圖是黑色的地方則反過來,網點覆蓋的地方隨機填 B 或 C 色,沒有的地方則填 A 色。當網點覆蓋上去後,白色區會看到藍色和 B C 兩色的混合,黑色區則是看到藍色跟 A 色的混合。B C 的平均色 (#00FF80) 是藍綠色,因此和藍色混色之後會比較混在一起,相對於藍色跟純綠色 A 的混色就能看得出色調差異。之所以被蓋掉的地方也要類似塗色的原因則是為了讓選取前的混色是整張圖大致均勻的:這樣整張圖的三色分佈就大致上會是 2A:1B:1C 的比例,大概會落在 B 往 A 偏一點的顏色。
也就是說,之所以被破壞的原因就是:比較新一點的瀏覽器都是使用混色的方式表示選取的圖片,不再是使用奇偶網點覆蓋的方式了。我是補了一張網點透明圖進去了啦,反正前面都已經要玩家疊圖了……
分區之前:30~35 關
這裡其實我不太確定有沒有一個比較明顯的分界點;唯一一個這裡有過分界的證據是當年的第一位通關者,我在排行榜上是紀錄著「在 29 關時破關的」;但就連當時究竟是全 29 關通關還是通關時的暫時頁面是第 29 關也都不甚確定。這邊我採用後來我在排行榜上的用例,即是紀錄的關數是全關卡數。
這一波的更新其實並沒有在 35 關停止,不過當時是在哪裡停的則也已經不可考了;排行榜中下一個通關玩家我是紀錄「在 51 關時破關的」,根據排行榜紀錄及一些檔案時間推測到這裡至少是 2006 年 6 月的事了。這中間理論上應該有兩波更新 (畢竟中間有一個「大」關卡),不過那時更新快速,當時的我也沒有留紀錄的習慣所以這部份的詳細發展已經是隨風去了。
而所謂的「分區」則仍然是參考自《Notpron》:自某關開始的網頁會出現在不同的資料夾之下。現在的全部 111 關裡 (把到 34 關之前的也算一個的話) 一共有 14 個資料夾。這些資料夾其實是有一點像是關卡小區的概念,但因為更新停的地方從來就不是在換資料夾的地方,所以一些題目分布上也就沒有很嚴謹地跟著資料夾在走了。
第 30 關
這關的頁面上都跟你說了:和第 11 關一樣。也就是:畫面上的那個東西,改成「答案」即可--但這次不是文法錯誤了。唯一對於「答案」的提示是「符合身份的東西」;這裡暗示的是「改成它自己」。
答案說穿了不值錢:改成 30。這個字和原來的字只差一個字母--這是一個並不那麼明顯的提示。改成它自己其實可以有很多種答案,但會使用這個字就代表我想要的其實是只差一個字母的 30 這個字。
第 31 關
這關的圖片大略就是第 28 關原本預想的畫面。也就是說,這一關事實上是第 28 關的變種,原本可以抓出來的字串現在變成圖了--但相對的,答案也變得相對單純:既然小字不給你抓,那就是大字。
第 32 關
這關算是藉 32 這個數把另一個後面會用到的鑰匙先給出來了:標題上的 ASCII。
有在看這個 blog 的應該知道我對字元編碼有一點研究;我也有提過我對字元編碼的研究差不多自從我開始接觸電腦這東西時就開始了。加上 ASCII 碼其實算是這種解謎遊戲的定番,所以就在這裡擺一個比較簡單一點的相關問題給玩家知道說有這樣的東西。
至於選 32 的原因就單純是 ASCII 裡第一個非 C0 控制字元的字而已。
第 33 關
這個畫面是這個遊戲的防作弊機制之一。Apache 伺服器有個預設的功能,是在存取一個以目錄結尾的路徑時,會去抓取特定的檔案 (通常是 index.html) 顯示;在找不到檔案時則會顯示一個伺服器生成的目錄列表,列出這個目錄下有哪些檔案。這就是我在上面 25 關時提到的檔案列表。
那為了防止被直接使用這種方式一口氣抓到所有檔案內容,因此我在幾乎所有目錄都會放一個 index.html 裡面隨便擺一點東西 (25 關時提到的沒有防止檔案列表生成就是不放這個檔案),而主頁面的 index.html 放的則是這個截圖上看到的內容:一個警告以及五秒後跳轉回開頭的頁面。(應該有人注意到了,遊戲開頭首頁是叫 game.htm,不是 index.html;我指的主頁面的 index.html 就是這一個。)
不過一個解謎遊戲總是會有一些比較 meta 的題目,也就是把題目藏在遊戲本身的結構裡--這題的題目就是如此。這個提示代表的是答案放在這一頁裡,而去到那一頁全選之後就可以找到答案了。
這題我其實刻意多埋了一點東西:如果你是用檢視原始檔的方式看的話,雖然會看到答案,但也會看到被我埋在刻意混亂使用的標籤和註解標記裡面的雜訊,只有去掉之後實際「顯示」出來的文字才是答案。
第 34 關
……真是抱歉,這圖片的圖示還是 Windows XP 的記事本。這關的概念和第 21 關類似,不過並不是圖檔本身更改副檔名,而是有另一個檔案以這個副檔名結尾的才是目標。不確定來到這裡的人會不會跟 21 關搞混……
這個檔案的內容會指向一個外部網址 (當年用的是我的 Google 協作平台上的頁面,不過協作平台改版後我現在還沒去整理過;現在應該是已經改到一個好的地方去了),那裡就是正式的 35 關。
第 35 關
準備進入下一區了。這個頁面上面其實已經把答案用中文告訴你了:就是「零度空間」。不過究竟這要怎麼用英文表示則有點微妙。這裡我使用了我這個協作平台小站的模版中,我自己會在頁腳的地方加一些像是出自不知什麼書裡的引用文字 (然後通通掛上是出自民明書坊的書) 這樣的風格,利用它來提示到底要用哪些字來組成答案;因為答案是好幾個字連起來的所以也簡單提示了每個單字的字首。
然後,為了告訴玩家這是個轉區答案,有另外做了一頁是當答案放在檔名的部份時會出現的,來推玩家一把說要把這個答案放在資料夾的位置。
下集預告
零度空間這一區裡理論上也應該有一個更新斷點,因為在那之後是一個 (做起來有點麻煩的) 大關卡。不過前面也提過這段時間內的更新紀錄已經不可考了,那就還是照著這個小區來分割文章吧。下次就會講到這個大關卡,敬請期待。