[HOI4] 1.3.3開發日誌#2: 資源缺乏、AI、效能
原文: https://goo.gl/yBU7F9
資源缺乏
目前資源缺乏最多只會有80%的產能懲罰
因此玩家可以用大量工廠來減少缺乏資源的減成
我們覺得這種機制的真實性不夠,也使缺乏資源對大國家來說不那麼致命
因此我們將資源缺乏的懲罰上限提高至100%
產線上每"個"(不是每種)缺乏的資源會給予5%的產能懲罰
因此缺超過20個資源後工廠就無法運作
便民改動
- 下達建築指令時同時按下Crtl可以將該建築提升至第一建築順位
- 點擊師團時單位界面現在會切換到該師團所在的位置
(圖示: http://i.imgur.com/5xWikKp.jpg
)
- 右下角新增隱藏非玩家單位的按鈕(快捷鍵:M),讓你可以簡單找到你的軍隊
(圖示: http://i.imgur.com/Hdp6fdT.jpg
)
- 新增關閉戰爭迷霧按鈕,讓你可以更清楚的分辨地形
- 新增讀取進度條
- 多人連線時有人LAG的警告訊息改為通知(界面上面那一排)而非彈出視窗
- 新增陸軍師團未被指派的通知
(圖示: http://i.imgur.com/J6pWuqD.png
)
AI
我們發現德國在多次重複試驗中都可以打敗英國
一開始我們以為是因為德國能穩定的擊敗蘇聯而獲得大量工業產能
利用這些工業產能德國就可以海贏英國的飛機
後來我們發現我們錯了,主要的原因為海軍的AI不會更動已指派艦隊的任務區域
所以海軍會卡在特定的區域,因此我們做了以下兩點更動
- AI現在可以更好的評估海軍區域的情況,以便AI做艦隊調動
- 突擊艦隊(AI的海軍分類)在沒有任務會使用岸轟功能幫助陸上戰鬥
突擊艦隊指的是與其他國家海軍作戰的艦隊
接著是部分1.3.3的重點AI改動,注意這不是完整的改動列表
- AI在訓練部隊時會考慮他目前能補給多少部隊
- 增加equipment_stockpile控制選項,使你能藉由MOD的方式改變AI囤積軍備的數量
- 已有足量部隊的AI現在會改為囤積軍備而不是一直部屬部隊
- AI可以更好的使用作戰計畫系統,且可以更準確的評估各個前線所需的部隊
- AI不會再直接刪掉整個前線計畫了,在更改作戰計畫時AI會採用更溫和的改變
- AI在達到預期部屬數量後就會不會再繼續生產部隊
- 修正AI會忽略反抗游擊軍的重大問題
之前的CODE裡面我們是寫"擁有"區域而不是"控制"區域,所以AI完全不會理會剛占領的
領土工廠被拆爽爽,現在AI會使用防守駐軍指令來控制游擊軍了
- 修正AI提供軍備的邏輯
- AI現在會送過時的裝備給其他國家
- AI現在會在適當條件下取消運送軍備
- AI不會在擁有大量民生工廠時興奮的開始狂蓋港口和軍港了
效能改進
這次的效能改進主要針對的目標是效能尖峰需求時段的優化
也就是每次遊戲時間進入下一天的瞬間
在經過修正後遊戲的速度大約提升了14%~18%
1.3.2板時換日大約需要4秒,1.3.3板只需要不到0.4秒
除此之外遊戲的其他部分也有效能的改進
以下會說明我們是如何改進效能的
這個段落會比較技術性一點,對Coding沒興趣的人可以左轉離開了
- 我們改善了簽訂和約時AI國家計算他們割讓領土時的CODE。AI在合約畫面時會死命的按
跳過,每按一次就會讓遊戲跑得更慢,遊戲中每次談合約都會發生這個現象,在更正
code loop後問題就完美的解決了
- AI在指派海軍任務時,為了確保自己的指令有被正確的執行,他會一直發出移動艦隊的
指令(想像玩家玩即時戰略時一直點右鍵動部隊,差不多就像那樣),因此我們加了一行
Code之後就解決了這個問題
- AI計算登陸計畫、前線的部隊部屬、海軍戰鬥的雷達加成、運輸艦的路線的方式皆獲得
優化
- 補給系統的改進
在補給系統方面,我們大量的使用"提供的補給量"和"補給的需求量"這兩種資訊,主要是
用來判定可以塞多少部隊進去某區域而不會產生耗損。每次有需要用到補給系統的地方,
系統都會從頭計算可以提供多少補給量和需要多少補給,它會從區域中的每個單位身上獲
取補給需求量的資訊,也會計算目標區域可以提供多少補給,這個流程在遊戲的各個階段
都會大量的從頭重複計算,消耗大量效能,因此我們更改了code使部分資訊在第一次計算
後會存到快取記憶體中,之後需要這些資訊時,系統就會從記憶體中獲得。
另一個補給系統的問題是大量的部隊,在遊戲後期部隊太多時一直計算補給量很容易把系
統操壞,所以我們重寫了計算區域補給消耗量的code。之前的code會問區域中的每個部隊
你需要消耗多少補給,現在是每個部隊會自己回報他們的補給需求,地區中的部隊將他們
的補給需求統計後呈現在區域資訊中。雖然文字敘述上看起來是一樣的,但在code上可以
減少很多loop。俗話說的好,最好的優化方式就是直接把功能移除:D
補給方面還有其他優化的改動,總結而言之前補給系統占了每日計算的65%
現在只需要6%以下就能完成補給系統的計算
另一個改進是AI使用師團設計器的方式,目前每次在師團設計器中新增/移除/取代師團
時,整個師團的數值都會從頭計算。只有單一國家在弄師團設計器的時候並不會對效能造
成太大的影響,但如果全世界的AI國家都在同一時間嘗試各種不同的組合時就會對系統造
成負擔,因此我們把它改成只有在完成師團設計後才會計算數值。
最後一個是我最喜歡的改動,在克勞維茲引擎中有一個很舊的code loop是用來處理界面
的,它是使用平面的系統而不是樹狀層次的系統,所以我們在界面中加入新功能的時候會
導至效能越來越糟糕,甚至到了視窗不需要顯示的狀況下都會拖累效能。之前沒人敢動這
個牽一髮而動全身的部分,現在我們找到了新方法來修正這個loop,使每次loop要跑數量
從大約120000/禎到700/禎以下,也就是代表引擎不會在你開科技樹界面的時候,還分了很
多資源去跑你根本沒開起來的政府界面了。我們把這個部分怎麼改動告訴了其他團隊(CK、
EU、Stls),如果它們還是使用類似的code的話就可以把這些改動套用到其他遊戲中,改善
它們使用界面的效能。
我們目前仍致力於遊戲後期效能的改進,目前這些所有的改動花了我們1.5個星期,你可以
期待我們在未來的版本中持續修正這個部分。
----------------------------------------------------
由於本人非資訊相關科系,效能改進的部分可能會翻的比較不通順,歡迎指正
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.121.156.73
※ 文章網址: https://www.ptt.cc/bbs/Paradox/M.1487221578.A.F9B.html
→
02/16 13:18, , 1F
02/16 13:18, 1F
如果eu4的團隊沒有更動過這個部分,那就可以用這個方法提升效能
推
02/16 13:19, , 2F
02/16 13:19, 2F
→
02/16 13:20, , 3F
02/16 13:20, 3F
→
02/16 13:22, , 4F
02/16 13:22, 4F
感謝提醒,已修正
→
02/16 13:45, , 5F
02/16 13:45, 5F
→
02/16 13:47, , 6F
02/16 13:47, 6F
→
02/16 14:16, , 7F
02/16 14:16, 7F
→
02/16 14:17, , 8F
02/16 14:17, 8F
推
02/16 14:59, , 9F
02/16 14:59, 9F
→
02/16 15:58, , 10F
02/16 15:58, 10F
推
02/16 16:01, , 11F
02/16 16:01, 11F
缺乏資源給與的懲罰是綁工廠的,所以你開多產線一樣會有產能懲罰
推
02/16 16:10, , 12F
02/16 16:10, 12F
推
02/16 18:07, , 13F
02/16 18:07, 13F
推
02/16 18:23, , 14F
02/16 18:23, 14F
→
02/16 18:24, , 15F
02/16 18:24, 15F
推
02/16 18:27, , 16F
02/16 18:27, 16F
推
02/16 18:29, , 17F
02/16 18:29, 17F
推
02/16 19:02, , 18F
02/16 19:02, 18F
推
02/16 20:04, , 19F
02/16 20:04, 19F
推
02/16 20:13, , 20F
02/16 20:13, 20F
推
02/17 00:01, , 21F
02/17 00:01, 21F
推
02/17 00:22, , 22F
02/17 00:22, 22F
HoI4初版和Stls初版比起來我覺得Stls半成品感比較重
但是Stls的更新有誠意很多 HoI4的就讓我很無感
尤其是HoI4修AI修了快1年了 還是有很明顯的智障感 很破壞單人遊戲體驗
推
02/17 05:17, , 23F
02/17 05:17, 23F
→
02/17 05:17, , 24F
02/17 05:17, 24F
史實模式下還是有低機率發生非史實結果喔
之前還看到有人分享史實模式下法國直接拒絕萊因區重新武裝
1936就直接AI對尻了
我自己是玩非史實模式所以對這種事情的接受度比較大
※ 編輯: DogEggz (140.121.156.73), 02/17/2017 10:39:02
→
02/17 11:05, , 25F
02/17 11:05, 25F
→
02/17 11:06, , 26F
02/17 11:06, 26F
→
02/17 11:10, , 27F
02/17 11:10, 27F
→
02/17 12:10, , 28F
02/17 12:10, 28F
→
02/17 12:10, , 29F
02/17 12:10, 29F
→
02/17 12:10, , 30F
02/17 12:10, 30F
→
02/17 18:36, , 31F
02/17 18:36, 31F
→
02/17 18:36, , 32F
02/17 18:36, 32F
推
02/17 18:38, , 33F
02/17 18:38, 33F
→
02/17 18:38, , 34F
02/17 18:38, 34F
推
02/17 18:43, , 35F
02/17 18:43, 35F
→
02/17 23:16, , 36F
02/17 23:16, 36F
→
02/17 23:20, , 37F
02/17 23:20, 37F
推
02/18 01:11, , 38F
02/18 01:11, 38F
→
02/18 01:46, , 39F
02/18 01:46, 39F
→
02/18 01:47, , 40F
02/18 01:47, 40F