繼續上次,上次給出的開全圖,是不能看透盟軍的裂縫產生器的,有的修改器的開全圖是可以看透的。它的原理是修改了判斷迷霧的乙個關鍵跳轉。此處不多說,本人覺得不夠優雅——能少改動**則少改動**。當然他也有自己的優勢——看透裂縫產生器。可能在最後補充中,再加上吧。
當然,如果你事先查詢了一些關鍵字串,可以直接快速的定位到關鍵位置,不需要像我利用公升級箱子來找。
最初我以為只用上面乙個函式就夠了,前面都是初始化什麼的,結果是——只增加了乙個核彈選項,卻不是就緒狀態,也不能倒計時……
mov edx,[ecx+1b4] //**於呼叫此函式的引數最重要的就是上面的ecx引數了,程式不斷在這裡,怎麼可能知道……正常情況下,能撿到乙個核彈箱子的概率是多大,我是不想試,何況單人遊戲,箱子出現的還那麼少。想到瘸腿大象(修改高手,已經不再修改遊戲了,從他的教程中收益良多)的魔獸修改教程中,都是用的專門的地圖,相當方便。幸好有大神已經寫出了紅警地圖編輯器,費好大勁建好一張地圖。遇到不少問題,不知道錯**,這不是主題,不深究斷下後來回跟蹤好多層ecx又從**來,貌似都跟到遊戲的訊息迴圈了?!...mov edx,[edx+1a0]
mov [esp+3c],edx
...mov eax,[ebx+98] //ebx和上面**相同
mov ecx,[esp+3c]
mov ecx,[ecx+eax*4]
搞了一下午,然後覺得edx的值好眼熟,突然發現edx=[ecx+1b4]=玩家資料位址,wtf!果斷寫指令碼,稍微改造下,用ce也是可以的。
pushad搞定!注意,如果你之前造好了核彈,並已經進入cd了,是沒有效果的。mov ecx,14
call 0069f7e0
mov ebx,eax
//調整核彈cd
mov eax,[ebx+98] //超武編號
mov edx,[00a35db4]
mov ecx,[edx+1a0]
push 0 //初始狀態,1=等待
push 0 //對應建築
mov ecx,[ecx+eax*4]
push 1 //1=一次性機會。遊戲設計問題,核彈必須=1,其他超武可以=0
call 0069ccf0
//增加核彈攻擊選項
mov eax,[ebx+98] //超**編號
mov ecx,008324e0
push eax
push 1f
call 0067c530
popad
ret
進入0067c530這個函式:首先是乙個switch,然後看到乙個字串
新建造選項!莫非這個還可以增加其他建築,兵種什麼的?如果是的話,那個push的1f引數,應該是型別(比如基礎建築,防禦建築,步兵兵種等等),eax應該是具體編號。
將上面的指令碼,更改了兩個call之前eax的賦值(原本是0,改成1,2,3等),果然增加了其他超級**的一次使用機會,但是使用後選項不會消失……找原因未果,猜想是遊戲中設計只有核彈有一次性使用機會,其他超級**也就不必要消失。
試圖修改1f為1d或20來新增其他建造選項,比如建築物或者兵種,遊戲卻崩潰了。馬後炮一次,這個字串前面的switch是關鍵。
更改為上圖中的一些值後,果然能新增一些其他建造選項了,逐步確定:
03=飛機,07=建築物,10=步兵,1f=防禦技能(超級**、傘兵),28=車船
那麼這個call單獨呼叫,就可以完成增加乙個建造選項的功能了,指令碼如下:
pushad但是最初,我不是這樣確定的。。我猜想這個函式並不是這裡專屬的,在函式頭下斷點。當你展開基地車的時候,會獲得建造發電站的選項;建造完發電站,獲得礦場和兵營的選項。建造任意單位,需要重新整理建造選項的時候,果然成功斷下來了,然後檢視堆疊傳進來的值得到03,07及其含義的。mov ecx,008324e0 //資料基址
push 36 //新增的建築項,此處是核彈發射井
push 07 //新增的選項型別,此處是建築物
call 0067c530
popad
ret
各種建築物的編號,我也用最笨的方法逐一確定了——依次使用上面的指令碼新增,還有一些無法建造的地圖上的其他元素,比如愛因斯坦實驗室什麼的:
00=發電廠
01=盟軍礦石精煉廠
02=盟軍建造廠
03=盟軍兵營
04=沙袋
05=盟軍維修廠
06=盟軍作戰實驗室
07=盟軍戰車工廠
09=磁能反應爐
0a=蘇聯作戰實驗室
…限於篇幅省略,見資料打包
盟軍建造廠和蘇軍建造廠,就是指基地,是可以直接平地而起,不需要基地車!我都驚呆了
當然是有條件的,你只有有了乙個盟軍建造廠,才可以直接建造盟軍建造廠,蘇軍同理。而其他建築物,只要有任意基地就可以,巨炮除外。。
對於步兵,也有對應的具體編號,同見資料打包。戰車戰船,無資料,苦力活……因為有了後文的科技全開,不必要
這個call的用途,可以在沒有開超級**的情況下,給自己新增上建造超級**的選項。一旦建造任意單位,該選項就會消失,因為遊戲重新整理了當前可建造項。網上有種修改器,需要在上方修改器增加的選項條中選擇超級**型別,然後建造圍牆,來建造超級**。文中這種方式是不是更優雅些?(無貶義)建造圍牆的修改方式,應該是找到了建造call,修改了傳入的引數,具體沒研究過這種方式是修改了建造選項對應的建築編號(第七篇有介紹)。
to be continued…
紅色警戒2修改器原理百科(九)
完結了乙個相對比較複雜的修改,其實說起來也簡單,如果不去理解資料結構只追求修改效果的話。筆者的乙個原則就是要搞明白 怎麼找到的,怎麼改,為什麼。乙個線索無法伸展了,換個點,就來下面這個吧。這次我們想試試新方法,這個方法在一些遊戲中有奇效,簡單快捷方便,一秒鐘滿足你!有時很有效的的大殺器 字串搜尋。從...
紅色警戒2修改器原理百科(一)
紅色警戒2,乙個經典的遊戲。我上初中時經常週末回到家就開始玩任務模式,然後半天過不去一關,就開外掛程式 開外掛程式虐冷酷的不開超級 的電腦。先說一下版本,原版v1.006。其他版本只是基址不一樣,可參考思路,如共和國之輝。當時比較好用乙個外掛程式是勝利之歌的紅色警戒2記憶體修改器,還有就是紅警全能王...
MongoDB 資料操作(三)資料更新(2)修改器
對 mongodb 資料庫而言,資料的修改會牽扯到內容的變更 結構的改變 包含陣列 所以在 mongodb 設計的時候,就提供有一系列的修改器的應用,如之前的 set就是乙個修改器 1 inc 針對數字字段,增加某個數字欄位的資料內容 將年齡為 19 的成員的成績全部減30,並且年齡 1 db.st...