命令與征服將軍預(yù)購(gòu)探究
眾所周知,在資源隨意分享的年代,找到個(gè)將軍鏡像就很不錯(cuò)了,因而很少會(huì)有玩家在意游玩的將軍購(gòu)買的方式,更別說還有預(yù)購(gòu)獎(jiǎng)勵(lì)。所以本帖旨在略微介紹一下將軍的預(yù)購(gòu)到底有什么不同。
在開始之前,我要感謝傷痕無數(shù)所提供的實(shí)體版的圖片和實(shí)體CD鏡像,沒有他的支持本帖將缺少實(shí)物圖和CD內(nèi)容圖片。
首先呢,當(dāng)年的游戲基本都是實(shí)體的版本,所以理所應(yīng)當(dāng)?shù)模A(yù)購(gòu)獎(jiǎng)勵(lì)也是實(shí)體的。下面所展示的東西就是預(yù)購(gòu)獎(jiǎng)勵(lì):一個(gè)白信封,上面寫了獎(jiǎng)勵(lì)的內(nèi)容。

我們可以清楚的看到預(yù)購(gòu)包含了一個(gè)改變游戲內(nèi)藝術(shù)的神秘代碼,科技樹卡片,多人地圖戰(zhàn)略卡片和包含三陣營(yíng)監(jiān)視圖(實(shí)際上就是介紹三陣營(yíng))的CD。神秘代碼的事情最后說明,因?yàn)檫@部分是整個(gè)探究的重要地方 。其它實(shí)物圖也許有人已經(jīng)在別的什么地方見過相片了,CD內(nèi)容也許也有人從別處獲得過鏡像了,但是神秘代碼相關(guān)的內(nèi)容,我目前還是有自信我要介紹的內(nèi)容算是首發(fā)的 。
科技樹卡片和多人地圖戰(zhàn)略卡片,似乎將軍最后發(fā)售的零售版都包含,所以大致放一下圖片就行了。




然后就是CD內(nèi)容了。CD盒是長(zhǎng)這個(gè)樣子的


光碟的內(nèi)容就是簡(jiǎn)簡(jiǎn)單單的各種介紹和草圖,順便吐槽一下這東西是真一股廉價(jià)的味兒,竟然用flash做的……

下面就是重點(diǎn)內(nèi)容了:剩下還有一張卡片,上面詳細(xì)寫了預(yù)購(gòu)有哪些獎(jiǎng)勵(lì),也具體提到了神秘代碼和兌換的步驟。

這張卡片交代了如果去兌換神秘代碼的話,需要訪問generals.ea.com/officersclub網(wǎng)站。介于EALA倒閉十幾年了,這個(gè)網(wǎng)站肯定現(xiàn)在是不再能夠訪問的。不過好在有Wayback Machine這么個(gè)網(wǎng)站,它包含了許多網(wǎng)站的歷史備份,因此我們也可以查閱到當(dāng)年的網(wǎng)站大概是什么個(gè)樣子。

那么,這個(gè)頁(yè)面也就詳細(xì)介紹了你的神秘代碼能夠解鎖的游戲內(nèi)藝術(shù)資產(chǎn):一個(gè)獎(jiǎng)?wù)?,顯示在角色頁(yè)面和自定義比賽時(shí)你的名字旁邊,以及一個(gè)旗子,在你的指揮中心。
到這里我們也就能夠明白了這個(gè)神秘代碼獎(jiǎng)勵(lì)了什么東西了。同時(shí)頁(yè)面也清楚地寫明了想要兌換的話就得通過這個(gè)網(wǎng)頁(yè)進(jìn)行,因此由網(wǎng)站的介紹合理推測(cè)可得:這個(gè)獎(jiǎng)勵(lì)機(jī)制最后是在服務(wù)器端通過綁定序列號(hào)來綁定你的預(yù)購(gòu)獎(jiǎng)勵(lì)資格。那么問題隨之也顯而易見:現(xiàn)在服務(wù)器關(guān)閉十幾年了,該如何重現(xiàn)當(dāng)年預(yù)購(gòu)獎(jiǎng)勵(lì)解鎖的東西呢?
這個(gè)時(shí)候別無他法,只能挖掘游戲本身來獲取答案了。通過我對(duì)主程序(game.dat)的調(diào)試,我發(fā)現(xiàn)了點(diǎn)線索:雖然整個(gè)綁定和驗(yàn)證過程都發(fā)生在服務(wù)器,但是游戲是否啟用這些預(yù)購(gòu)獎(jiǎng)勵(lì)僅僅是通過服務(wù)器發(fā)送的數(shù)據(jù)來進(jìn)行控制。
那么接下來就需要弄明白需要接收什么樣的數(shù)據(jù)才能讓游戲認(rèn)定我們有預(yù)購(gòu)獎(jiǎng)勵(lì)的資格。很幸運(yùn)的是,進(jìn)行判斷的字符串是明碼的,很輕易就能從游戲里找出來:(本圖所展示的game.dat為將軍原版1.8版本)

從圖里就可以看出來,游戲最后會(huì)判斷所接收的數(shù)據(jù)是否包含 “\preorder\1”字符串,如果包含這個(gè)字符串,就會(huì)標(biāo)記[esp+0x1A4]處為1,即代表啟用預(yù)購(gòu)獎(jiǎng)勵(lì)模塊,否則標(biāo)記為0,即不啟用。
所以核心的部分也就清晰且明白了。剩下沒講的完整過程就大致講一下:在登錄在線賬號(hào)之后,游戲會(huì)向服務(wù)器發(fā)送數(shù)據(jù),然后會(huì)接收服務(wù)器那邊的返回?cái)?shù)據(jù)。當(dāng)然這個(gè)時(shí)候的數(shù)據(jù)并非是明碼的,還需要進(jìn)行一個(gè)轉(zhuǎn)換,然后會(huì)被送到上圖的地方進(jìn)行判斷,如果有\(zhòng)preorder\1字符串,則開啟預(yù)購(gòu)獎(jiǎng)勵(lì)內(nèi)容,否則不開啟。
現(xiàn)在我們也就能夠明白了,預(yù)購(gòu)獎(jiǎng)勵(lì)的確是通過服務(wù)器進(jìn)行控制的。但是新的問題又來了:是不是我要想看到這個(gè)獎(jiǎng)勵(lì)內(nèi)容,就必須得登錄在線嗎?現(xiàn)在服務(wù)器早沒了,我又不想用第三方服務(wù)器,那是不是也沒辦法在單機(jī)的時(shí)候顯示了?幸運(yùn)的是,答案并不是這樣。
在進(jìn)行上述判斷之后,游戲并不是什么都不做,而是會(huì)向系統(tǒng)內(nèi)寫入一條注冊(cè)表:

注意到名字為Preorder的項(xiàng)了么,在確認(rèn)獲得了資格之后,游戲會(huì)向這個(gè)路徑里寫下名為Preorder,類型為REG_DWORD,值為1的注冊(cè)表,來記錄你的資格。(此路徑為64位系統(tǒng)下的路徑,若是32位系統(tǒng)則路徑中間沒有WOW6432Node)。此后,如果你不手動(dòng)刪除這個(gè)注冊(cè)表,那么即使你不再登錄在線服務(wù)器,你也能在遭遇戰(zhàn)里面看到你的勛章,以及在游戲內(nèi)看到你的旗子。


所以總結(jié)下來,如果你想看到預(yù)購(gòu)獎(jiǎng)勵(lì)的話,只需要添加一個(gè)注冊(cè)表項(xiàng)即可,實(shí)際上還是挺簡(jiǎn)單的。
當(dāng)然,如果你想看看在線服務(wù)器上什么樣子的話,可以配合cnc-online,以及修改上面所展示的判斷條件,即可自?shī)首詷返乜匆娏?(畢竟cnc-online不會(huì)給別的玩家發(fā)送你有預(yù)購(gòu)的信息,別人的游戲又沒被修改)效果圖大概是這樣的:


以上差不多就是將軍預(yù)購(gòu)的所有內(nèi)容了,實(shí)際上比起后面作品的預(yù)購(gòu)獎(jiǎng)勵(lì)確實(shí)遜色了點(diǎn),而且我才不說我是為了最后的醋包的餃子(
順便,絕命時(shí)刻也殘留相關(guān)的代碼,但是我并不推薦啟用,因?yàn)樵诮^命時(shí)刻下勛章的展示有顯示上的bug,效果并不理想。
最后,Good luck, general.