基本知識
* SC在記憶體中儲存數據(想像成由一堆位元組組成的線)
* 在SC運行時,它在Windows有固定的記憶體(虛擬記憶體)
* 記憶體有兩種:代碼段 和 數據段.數據段可讀可寫; data 段(?)可讀可寫. (代碼段不可寫?)
* 所以SC在數據段中儲存Deaths數據.
* 在儲存Deaths數據的記憶體塊中的第一個雙字(4位元組)存儲的是Player1的Marine死亡數。而這個偏移地址在各個星際版本中是不同的。
來舉個例子: 00560009H (以H結尾表示這是個十六進制數)是存儲Player1的Marine死亡數。注意:這個死亡數是用4位元組存儲的,所以你只能用Deaths觸發寫入4位元組的數據 (從Deaths數據表開始的每4個位元組);還能能將這個雙字的一半作為位元組讀取。
那么下一個Deaths數據 (Player2的Marine死亡數) 的地址是0056000dH (00560009+4),再下一個 (Player3的Marine死亡數) 的地址是00560011H,依此類推,直到Player12。
那么EUD觸發是什麼原理呢?
普通的Deaths觸發是基於Deaths數據表的起始地址 (存儲Player1的Marine死亡數的邏輯地址),
它加上UnitID*48 (UnitID可以從 datedit中獲得)再加上PlayerID*4 (因為每個Deaths數據占4位元組) [!PlayerID是從0開始計算的,Player1 = 0] 之後可以得到該Player的特定Unit的Deaths數存儲地址。
觸發條件Deaths讀取此4個位元組的數據判斷是否滿足給定數值大小關係,而觸發動作Set Deaths在這個地址上寫入4位元組的數據。
普通的Deaths觸發只能訪問Deaths數據表的數據區 (UnitID和PlayerID都是有意義的值)。
注意不是Deaths表中的每個地址都能寫入數據,每8個雙字之後跟著的4個雙字是不能寫入的(你不能修改P9~P12的Deaths數據)。
好了,如果你設定一個很大的UnitID值,那么你得到的地址將超過Deaths數據表尾部(因為你設定的UnitID是2個位元組大小,最大值65535,結果遠遠超過了Units.dat區域)。
那么將會做什麼
總之就是越過了Deaths表尾部開始訪問其他數據區了,如Upgrades.dat,TechData.dat,Weapons.dat等數據,存取這些數據達到各種特殊效果就是EUD觸發乾的事了,具體功能請看Memory_Map(記憶體表)。
先找到SC DEATHS的起始位置
有了這個Deaths表的起始地址後你就能在偏移地址和EUD觸發參數(UnitID,PlayerID)間進行轉換。
但是不需要那么麻煩,如果要寫EUD觸發的話可以使用LegacyWeapon的Ubecalc[就是傳說中的UB],雖然有點小問題,但還是很好用的。沒必要了,還是使用EUDTrig吧,工具在下面。
你還可以找到一個用來空閒區塊[1.12b版里的006c4f00 到 006c5d00 的區域],可以用來在任務模式存取遊戲記錄。
注意:EUD Actions只能在1.12b版本之前的星際中使用,不過EUD Condition還可以在更高版本上使用。
EUD框架
SCRPG.NET的研究人員做出來的框架, 修改觸發內容, 使它們可以用來修改記憶體.
這樣就可以改P9~P12和Deaths表前後的記憶體了
A.L.I.C.E系統
用EUD載入框架而出現的A.L.I.C.E(AEUD)能做出一切。套用比較廣泛的是A.L.I.C.E,因為相比EUD之下A.L.I.C.E功能強大,也容易上手。此外SMC已經發布了帶EUD觸發的版本。有事EUD也泛指A.L.I.C.E
一些A.L.I.C.E成分明顯的圖:
魔獸 Dota 星際版 2016
New 5v9
ET2009(YTY的)
移動攻擊
榮譽三線
攻守兼備·星際
Amazing Turret EUD
2010BT 2011BT 2012BT
H-defense A5
學會EUD需要懂得的計算機知識
在學EUD之前請確保製圖和MOD都過關,在星際修改的基本概念未過關的情況下請先補課。其次要知道記憶體是什麼:星際幾乎所有的數據都被讀取到記憶體里,比如單位武器、武器攻擊力、模型、動畫、AI,甚至還有按鈕、需求等。記憶體地址,就是存這些數據的地方。其次要懂得16進制數據的處理(如16進制數在記憶體表中的排列順序)。
輔助用EUD地圖製作軟體:EUD Trig ,UB2.0,UB3.0,StarForge
輔助用A.L.I.C.E地圖製作軟體: SMC2.85,SMCExV1.3