翔鹰帝国网|帝国时代论坛|帝国时代系列|神话时代
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 2274|回复: 1

[人工智能] Rasher《玩習( *.ply )檔的發現》

[复制链接]

454

主题

65

精华

25万

积分

教皇

耕战
42935
鹰币
1441115
天龙币
10
回帖
5687

翔鹰建站十周年大纪念章特级帝国勋章特级翔鹰勋章特级嘉禾勋章一级皇家勋章鹰之智者蛟龙勋章十字军勋章大冒险家狂熊勋章

附庸关系2
发表于 2012-5-22 00:30:12 | 显示全部楼层 |阅读模式
玩習( *.ply )檔的發現
Findings on the Play (Ply) File

作者:拉舍(Rasher)
譯者:狂~劇情狂


基本

在你的 Age of Empires/data 或 /data2 資料夾下可以找到 aoe.ply 檔案,它是一個小檔案, 5 KB 左右,而其用途如下: aoe.ply 基本上是 *.per 檔的延伸,它會幫助人工智慧在它進攻時採用精密的戰略, *.ply 檔與 *.per 檔之間的主要差異是 *.ply 檔比較複雜以及僅控制攻擊,而且全個遊戲祇會使用一個 *.ply 檔,不像 *.per 檔可以用上多個。人工智慧似乎是依據當時情況從 *.ply 檔隨機選取一種攻擊模式。以下是世紀帝國光碟上找到的一個文字檔,我用粗體加入了一些自己的註解,斜體字則是一個 *.ply 檔裡必須的代碼。

~ ~ ~

世紀帝國玩習簿範本
星期五,七月十一日,一九九七年
0.3 版


「玩習」系統是一個讓電腦遊戲者於進攻時利用精密戰略的簡單、方便的做法。

電腦遊戲者會選擇一個目標以及一類「玩習」,它們會交由電腦遊戲者人工智慧內部的一組中級人工智慧模塊來處理。這組中級人工智慧模塊在「玩習」裡扮演部隊長的角色,它能夠自行作出戰鬥決策而毋須高級電腦遊戲者人工智慧來介入。

語法:

要制訂一組「玩習」時,以「Play」一詞為其開首,而及後必須跟著一個用雙引號(")括著的「玩習」名稱。
Play "Simple Attack" - 十分簡單,打個名字就行

玩習種類(Playtype)一定要是下列其中一項:
  • 攻擊(Attack)- 直接而正面的全軍攻擊,沒有繞路或特殊的戰術
  • 騷擾(Annoy)- 人工智慧將嘗試以小規模攻擊來騷擾玩家,其目標不在於破壞而係討戰、滋擾
  • 側翼(Flank)- 人工智慧分組對目標作側翼攻擊,較之通常攻擊複雜甚多
  • 勘察(Recon)- 適如其名,僅作偵測
PlayType Attack

最小單位(MinUnits)一定要是 >= 1 及 <= 最大單位(MaxUnits),否則「玩習」不能生效。
MinUnits 1 - 簡單,輸入此「玩習」牽涉的最小單位數量

最大單位(MaxUnits)一定要是 <= 255 及 >= 最少單位(MinUnits),否則「玩習」不能生效。
MaxUnits 255 - 輸入此「玩習」牽涉的最大單位數量

戰力(Power)是對「玩習」整體力量(如侵略性)從 1 到 100 的評價。
Power 100 - 相當的正攻法

貳軍(Overflow)指示過剩單位(多於各隊最低要求)去向,可用的選項有:
  • 平衡(Balance):各隊平均分發
  • 先隊(FirstGroup):部隊先到先得
Overflow Balance - 適如其名

智能(Intelligence)是對「玩習」智能的簡單量度,它一定要是 >= 1 及 <= 100 。
Intelligence 1 - 要有更複雜、更富戰略及更有趣的攻擊,就將它設成更高的數值

死亡率(DeathPercentage)是依計實施「玩習」時所招致整體損失百分比的規格,它一定要是 >= 1 及 <= 100 。
DeathPercentage 50 - 當「玩習」正確實施時預計會被殺的單位百分比,祇是至今我還未能夠讓此數值有效運作

定標:

允許分劃此「玩習」用到的目標。 - 控制人工智慧傾向於攻擊的目標

目標物(TargetChar)當前一定最少要是下列一項:
  • 任何(Any) - 它會選擇最接近的目標或向其發動攻擊者
  • 固定(Stationary) - 適如其名
  • 移動(Moving) - 適如其名
  • 慢速(Slow) - 例如方陣兵、投石器
  • 快速(Fast) - 例如騎兵
複數目標物必須在不同行中
TargetChar Any

目標種類(TargetType)當前一定最少要是下列一項:
  • 任何(Any) - 基本上,這個完全沒用
複數目標種類必須在不同行中
TargetType Any

部隊:

建構部隊一段允許在實施這個「玩習」的單位裡組織分隊,這也是「玩習」裡提供協調與編排作用的主體。

部隊數(NumberGroups)一定要是 >= 1 及 <= 5 ,否則「玩習」不能生效。
NumberGroups 1 - 輸入「玩習」裡牽涉單位的部隊數量

部隊以 0 至 4 為其編號。
要指定部隊由個別種類單位構成,請用下列語法:Group 部隊編號 單位種類 最小單位數量 - 最大數量
Group 0 Ranged 1 - 255 - 設定部隊編號(0 - 4)、單位種類(見下表)及最小至最大的部隊規模

當前可用的單位種類有:
  • 近戰(Hand) - 百夫長、刀斧手等
  • 遠距(Ranged) - 弓兵等
  • 僧侶(Priest) - 適如其名
  • 投石器(Catapult) - 適如其名
  • 弩砲(Ballista) - 適如其名
  • 騎兵(Cavalry) - 適如其名
  • 步兵(Legion) - 適如其名
最小與最大用於為編成部隊的單位種類設下一範圍。當有單位種類分劃入一個部隊而無法達到其最小要求時,「玩習」就會失效。

階段:

階段(phases)是一個簡單的狀態導向系統。「玩習」實施途中祇會有單一個階段起作用,每個「玩習」允許共有十個階段。由於觸發系統之故,階段除了階段 0 外其他都不需要是單線的。階段 255 是完結階段,而觸發該階段就會完結「玩習」。利用 Phase 一詞後接 0 至 9 之間的一個數值來開啟一個階段。出現非階段內的詞表示當前階段完結。- 這就是有趣的地方,也是檔案內最詳盡最複雜的部分。基本上,階段是要被遵行的簡單命令,經由觸發隨時啟動,對此我後邊再講解。每當階段受到觸發,單位部隊亦會跟隨而上。

Phase 0 - 輸入階段編號

要下達一個指令給一個部隊,請用下列語法:
Group 部隊編號 指令數值 - 輸入部隊編號,再來就是下表的值

可用的指令有:
  • 移動 X Y Z(Move X Y Z) - 這會指派部隊要移動前往的地方,然而我不清楚地圖上的定位依據
  • 攻擊(Attack)- 指派部隊即時攻擊
  • 撤退(Retreat)- 指派部隊即時撤退
  • 治療部隊(Heal 部隊編號)- 指派一個部隊治療別的部隊,在 Heal Group 語句後輸入要被治療的部隊編號
  • 攻擊儲存目標(Attack Saved Target)- 攻擊前一次攻擊的目標,當你想人工智慧圍繞一個目標至死時很有用
  • 等待(Wait)- 單純指派部隊原地待命
  • 重設部隊生命值檢測(Reset Group Hit Point Tracker)- 不明
  • 重設部隊死亡數檢測(Reset Group Death Tracker)- 不明
Group 0 Move 15 0 0

要建立觸發(一個階段最多三個)請用下列語法:- 觸發是啟動階段的事件,詳見下文。
Trigger 前往階段編號 觸發事件數值 - 輸入觸發編號及開啟啟動階段的事件。所有觸發都一定要與關連的階段在同一張清單之上。

當前可用的觸發事件有:- 這些是能夠啟動觸發的事件
  • 聚集 X (Gather X ):所有單位結集在 X 個地格內 - 觸發在所有部隊單位聚集於特定地區裡時啟動,輸入地格數量
  • 死亡 X (Death X ):X% 的部隊單位陣亡 -  觸發在一定百分比的部隊單位成為死亡單位時啟動,輸入部隊編號
  • 生命損失 X (HealthLost X ):部隊失去整體生命值的 X% - 適如其名。
  • 傷害部隊 X (DamageToGroup X ):部隊 X 受到一些傷害 - 觸發在部隊的任一單位受到任何程度的傷害時啟動,輸入部隊編號
  • 傷害任一部隊(DamageToAnyGroup):任一部隊受到一些傷害 - 適如其名。
  • 目擊一級敵人(Level1EnemySighted):每場遊戲不同判定 - 不明
  • 目擊二級敵人(Level2EnemySighted):每場遊戲不同判定 - 不明
  • 部隊 X 單位全滅(DeathOfGroup X ):部隊 X 所有單位死亡 - 適如其名,輸入部隊編號
  • 部隊 X 單位治癒(HealOfGroup X ):部隊 X 所有單位的生命值處於最大狀態 - 適如其名,輸入部隊編號
  • 即時(Immediate):即時前往 - 觸發即時啟動,在你想人工智慧以快速的步伐連續移動時很有用
  • 時間(Time X ):前次階段變動計時 X 秒 - 適如其名,輸入時間秒數
Trigger 1 Gather 5
//攻擊階段
Phase 1
Group 0 Attack
Trigger 2 Death 50
//撤退階段
Phase 2
Group 0 Retreat
Trigger 255 Immediate


完結玩習(EndPlay)一定要出現在「玩習簿」上每個「玩習」的末尾。
EndPlay - 適如其名,每個「玩習」的末尾要輸入 Endplay


~ ~ ~

更多資訊

我設置及測試過一些自己的「玩習」,它們確實是生效的。看到人工智慧分兵三處來襲的感覺還真讚,一組全由僧侶構成,另外兩組單位繞路側邊試圖包抄我的軍隊,而且會攻擊我最快速的移動單位(騎兵)。受到一定損傷之後,他們退到一點,並在那裡接受僧侶治療,然後再次進攻以確保消滅他們上次打過的最後一個單位。相當有趣。不過,有些問題尚需加以討論。

優點

這個檔案可以用來優化人工智慧攻擊,讓它變得更複雜、更富戰略以及更獨特。它的操作簡單易懂,大部分人在用過上邊的教程後都應該能夠發揮它的功用。

缺點

不幸的是,跟其他大多數東西一樣,有些缺點還是不得不提。第一,也是最嚴重的,人工智慧會從「玩習簿」隨機選取「玩習」,所以不能保證人工智慧用上你想要的「玩習」,從而使得劇情不能加以應用;除非那是一個隨機地圖式的劇情,你與敵人都必須建設發展起來並打倒對方,這樣的話大概就會接二連三用到你的「玩習」。倘非這種劇情,不能保證你的「玩習」能在適當時機派上用場。

現在再來說第二個缺點:不同於可以設置哪一電腦遊戲者會用它的 *.per 檔, *.ply 檔在所有劇情以至隨機地圖上都對全部電腦遊戲者有效,所以如果你設置了僅對一個劇情有用的「玩習」,遊戲在一切場合都會用上它 ,進而可能會產生一些愚不可及的人工智慧攻擊行動。

結論

*.ply 檔有許多好用的地方,但是前述缺點令劇情及戰役很難用得上它。如果你想為隨機地圖增添幾分有趣的攻勢,放心去搞,而你也應該會獲得不錯的成果。不過除此之外,它就沒大用了。如果有法子選擇哪位人工智慧遊戲者使用「玩習」及在何時使用,它倒可能成為劇情設計者的一項貴重工具。

最後結論

用 *.per 檔吧。


回复

使用道具 举报

669

主题

4

精华

5万

积分

教皇

耕战
9388
鹰币
5582
天龙币
0
回帖
6364

翔鹰建站十周年纪念章翔鹰十周年帝国Online纪念章特级帝国勋章二级翔鹰勋章二级嘉禾勋章雄鹰勋章

附庸关系1
发表于 2012-5-22 13:25:48 | 显示全部楼层
支持一下!
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国

GMT+8, 2024-4-29 10:04 , Processed in 0.125889 second(s), 37 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

Copyright © 2001-2023, Hawkaoe.net All Rights Reserved

快速回复 返回顶部 返回列表