跳至內容
RA2DIY-WIKI 当前处于维护模式:页面上的内容随时可能发生更改且不会事先告知。

3.art詞典

前言,art代碼一堆,絕對不要試圖在本文中摘取代碼從零開始寫,請複製原版art已有的項進行修改

注意:SHP建築等非Ares環境下必須打包進mix才能正常使用,非FA2SPHE的FA2/FA2SP也是如此

art(md).ini文件用於指定遊戲的圖畫如何顯示到用戶的屏幕上。遊戲中大部分的圖像數據都位於這裡。art(md).ini文件的某些部分甚至用於創建附加的特效,例如播放礦的產生的動畫。

就像rules(md).ini一樣,art(md).ini文件也由片斷組成。每個獨立的對象必須擁有自己的片斷。然而,在art(md).ini文件中,片斷頭更加重要——在絕大多數情況下,它指定了該對象使用的圖像。如果某個步兵的片斷頭叫做「[SOMEGUY]」,那麼遊戲將希望有個叫做「someguy.shp」的文件能夠與之相對應,而這個shp文件中或許包含了顯示該步兵單位的所有需要的圖像。另外,在rules(md).ini中,如果一個對象沒有「Image=」這一條標籤,那麼遊戲默認使用art.ini中片斷頭與之相同的代碼。如果某個單位的片斷頭叫做「[MEGATANK]」,那麼遊戲將會在art(md).ini中尋找片斷頭叫做「[MEGATANK]」的片斷來決定如何顯示該單位,當然最後也會尋找同名的圖片。然而,在art(md).ini文件中動畫對象可能使用另外的圖像,此時通過「Image=」的值來指定。

Image同樣可以在art中使用,建築動畫均可使用,步兵和載具等需要Phobos引擎支持,但WW原始殘留的代碼中有相關的使用,如果直接開啟會導致諸如戰鬥要塞使用光棱坦克皮,駱駝變成猴子等莫名的錯誤,可前往https://gitee.com/PB_LAB/yrstandard-ini獲取標準的修復後的INI文件作為YRMOD開發基底

建議不要刪除已經存在的片斷頭,因為遊戲會引用某些片斷頭,刪除的話有可能由於遊戲找不到其引用的頭而導致崩潰。(這句話的意思就是別沒事找事胡亂刪除原本就有的東西,哪怕你覺得這部分沒啥作用……存在必有道理……)

遊戲中的坐標系大多有XYZ和FLH兩種

FLH就是前左高,常用於開火坐標和炮塔偏移位置等涉及根據本體朝向更改實際位置的計算,單位Lepton

XYZ則有多種細分,一種最典型的X,Y,Z就是+X代表正東(屏幕右下)方向,+Y代表正南(平面左下)方向,+Z代表高度向上,單位Lepton

也常用X,Y的形式,此時+X代表屏幕右方向,+Y代表屏幕下方向,單位Pixel,即像素值,也就是你直接用疼遜截個圖一框都能立即讀數使用

這種情況下YSort和ZAdjust用於調整圖層遮擋關係

Lepton與Cell換算關係見全局詞典頂端

Lepton與Pixel換算關係見AlternateFLH詞條下

每個Cell為橫向60縱向30Pixel的菱形,因此視角與地平線夾角為30°,2Height恰好縱向30Pixel得1Height=256*√2/√3/2≈104Leptons

用於FLH的Lepton與Pixel換算可見RA2DIY論壇帖子https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=16961

Shape 文件也有兩套壓縮模式,詳見RA2DIY論壇帖子https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=16338

壓縮保存的 Shape 文件會帶來一些問題,詳見RA2DIY論壇帖子https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=19379

想要不進遊戲即預覽 Voxel 模型 Ingame 效果可以使用全新的S imple vxl viewer,詳見RA2DIY論壇帖子https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=22491

如果你不想用 Shape 與 Voxel 這兩種古董格式,你也可以使用 png、dds、jpeg.etc與mech,詳見RA2DIY論壇帖子https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=17820

Voxel 模型計算 FLH 可以使用 Yvory 與 HvaBuilder 自帶的開火坐標測量工具

Shape 模型計算 FLH 與著火位置等可使用附件包中 ImageShaper 自帶的坐標測量工具

建筑动画只要加上ShouldUseCellDrawer=no就可以使用Ares的CustomPalette=xxx~~~.pal否则跟随建筑体自身色盘

建築體自身色盤指定見本文檔Palette相關部分,注意使用了自定義色盤的對象如果所屬色處於[Colors]後一半則不跟隨地圖光照變化,你可以直接複製一遍顏色丟到下面占位,Phobos已直接修復

所有動畫必須至少擁有一個語句(哪怕實際上是無效語句)否則這個動畫無法正常被使用

通用標籤

Image =

這個ART段落實際使用的文件名稱

例如原版很多建築的動畫_A和_AD代表健康和殘損,但是_AD中Image=_A通過設定播放的幀數來與_A區分

[NAPOWR_AD]

Image=NAPOWR_A

那麼NAPOWR_AD這個動畫實際上使用napowr_a.shp

可用於動畫和建築,Phobos下也支持了所有TechnoType(Infantry、Vehicle、Aircraft、Building)

Cameo =

指定該單位使用哪個SHP文件作為圖標(就是你點的那個東西來建造它)。如果該對象沒有圖標,遊戲默認使用「Missing

Cameo」圖標(文件名為xxicon.shp)作為它的圖標(就是那個紅警2樣的圖標)。每個圖標都必須是SHP格式,並且調色盤要求是紅警2的cameo.pal文件

Ares允許微觀定義每個ART對象的圖標色盤,但是無法分離定義Cameo與AltCameo的色盤

然而Ares允許使用256索引PCX作為圖標拋棄SHP格式

Phobos更是允許使用24位全彩RGB的PCX文件作為圖標

另外,原版Westwood圖標的大小標準是60*48像素,即寬60像素,高48像素,雖然並不強制,但更大的尺寸還是更多的幀數在RA2中並沒有任何特殊效果,除非你改程序對側邊欄的結構進行大幅度修改

原遊戲中的圖標排序規則如下:

對於超級武器:

→RechargeTime 更短的優先

→UIName 字母順序在前優先

對於單位列表:

→AIBasePlanningSide 為玩家陣營的優先

→非建築情況下常規單位優先,Naval=yes的其後,ConsideredAircraft=yes的再後

→TechLevel 更低的優先

→Cost 更低的優先

→UIName 字母順序在前優先

AltCameo =

指定當該單位升級之後使用的圖標。升級是指玩家使用間諜滲透對方的兵營或戰車工廠之後,單位所產生的變化。規則和Cameo=標籤相同。建築也可以正常使用,例如奴隸礦場就有AltCameo

Voxel =

指定該圖像是否使用 Voxel 資源文件而不是 Shape。部分語句僅在該標籤為 yes 的情況下才生效

Shape 載具自動調用 Voxel 炮管並不需要這句,但與 Voxel 單位一樣僅在炮塔朝向玩家時炮管的圖層才在炮塔之上

UseBuffer =

YR新增

遊戲是否使用螺旋槳模式來處理這個 Voxel 資源文件,用於控制遊戲處理多組件 Voxel 資源文件的方式,如果啟用那麼可以正常地根據 3D 空間交疊方式顯示位於一個大組件空置區域的小組件,而不是簡單地讓其中一個位於更高圖層的組件整個繪製在另一組件之上導致將另一組件完全遮擋

DisableVoxelCache =

遊戲是否緩存這個 Voxel 對象的數據,禁用也不會引發什麼繪圖問題,事實上對於幻影偽裝和原版下用超時空超武移動一個還未從工廠開出來的載具如果使用這個標籤反而會導致一些顏色錯誤,倒是也可以一定程度上緩解多組件多幀 Voxel 素材抖動問題。功能設計的本意大概是減少緩存可動 Voxel 素材引起的內存消耗,然而如果屏幕上 Voxel 素材過多那麼禁用反而會因為遊戲不斷重新繪製導致性能暴跌

DisableShadowCache =

遊戲是否緩存這個Voxel 對象投射的影子,禁用緩存會讓遊戲為使用該素材對象的 hva 每幀單獨渲染一個影子而不是僅繪製第一幀。可以修復 Voxel 組件導致的影子繪製的空洞並防止 Jumpjet 運動模式的載具降落在地面上時其影子繪製繪製在自身主體組件之上

ShadowIndex =

僅用於使用 Voxel 資源文件並且包含多個 Voxel 組件的對象。它決定了哪個 Voxel 組件用於渲染單位的影子

例如:直升機,直升機的機體大概包含兩個vxl,即機身和螺旋槳。你可以通過ShadowIndex=設定遊戲到底是繪製機身的影子還是螺旋槳的影子

然而原版下這個標籤只能填一個值,Phobos已經提供了對應的新邏輯以支持多個 Voxel 組件多幀動畫的動態影子

Remapable =

該單位素材中16-31號顏色是否重映射為所屬色,然而這個語句實際上並沒有效果

Normalized =

動畫播放速度是否隨遊戲速度改變,以更加符合視覺感知

如果在動畫上設置了Normalized=yes

如果設置則此動畫播放速度最大FPS鎖定30,在1-4速下和遊戲速度一致

並且由於部分動畫僅有這一句,而動畫至少有一個語句才能播放(配套文件《全局代碼解釋2024.ini》置頂第20行),因此不能直接刪除,可批量替換為Rate=900

Theater =

是否按氣候規則讀取文件,即不使用 *.shp 而是使用 *.tem、*.sno、*.urb、*.des、*.ubn、*.lun 作為資源文件

當然它們並不需要真的是 TMP 類型文件,例如原版的樹木實際上就是 *.shp 改了個文件名而已

這會硬編碼將對象作為地形對象來處理,因此[BuildingTypeArt] -> ActiveAnim=等語句無效

NewTheater =

如果被賦值為yes,那麼該單位(一般是建築)將會在不同的場景中使用不同的圖形(例如溫和氣候場景和雪地場景)

遊戲通過判斷圖像文件名的第二個字母來決定使用哪個圖像

如果某個建築名叫「[GARADR]」,那麼當建築在雪地場景中建造的時候,遊戲會尋找名叫「garadr.shp」的文件作為圖像;當建築在溫和氣候場景中建造的時候,則尋找「gtradr.shp」

注意A代表雪地氣候,U代表城市場景,T代表溫和氣候場景。尤里的復仇中,D代表沙漠場景,N代表新城市場景,L代表月球場景。如果遊戲找不到與場景相關的圖像,那麼將默認使用文件名第二個字母為G的圖像(也就是通用圖像)。

UseLineTrail =

使遊戲為這個對象繪製一條軌跡線

LineTrailColor =

指定軌跡線的RGB顏色,默認[AudioVisual] -> LineTrailColorOverride=設定的顏色

LineTrailColorDecrement =

默認16

指定軌跡線的消失速度。數值越大(消散的越快)物體移動速度越小代表軌跡線越短。

如果為0值並不能創建永不消散的軌跡線,只是變成了由單位移動速度決定一個固定長度內不隨時間消失

如果用超時空運動的次數來定義這個「長度」的話只能存儲31次軌跡,在第32次超時空移動時會開始抹除第1條

如果為負值則會由於算法問題導致LineTrailColor一項無效,而且還有與被AlphaImage影響時相同的變色,大多時候很難看,長度同上

在低畫質下會*2使用

註:以上LineTrail的三句泛用於所有對象類別,例如粒子與動畫是兩個類別因此無法使用動畫專有的AltPalette等語句,但是作為對象類別的子項仍可正常在art中為粒子的圖像定義LineTrail

一個原先圖像使用了該效果的拋射體在地圖內置ini等讀取較晚的位置通過[Projectile] -> Image=換用其他圖像將會使得新的圖像的這三項默認為舊拋射體的值,對於新圖像本就有該設定的情況會正確地更新而不會顯露出這個問題,但如果新圖像並不使用線形尾跡那麼需要手動在art中明確設定[ObjectType] -> UseLineTrail=no來覆寫禁用線形尾跡

一種最常用的開火坐標系統:

PrimaryFireFLH=

SecondaryFireFLH =

ElitePrimaryFireFLH =

EliteSecondaryFireFLH =

格式為=F,L,H

單位不同武器的開火坐標,使用FLH坐標系,即前,左,上,單位為Lepton

如果武器擁有偶數的Burst,那麼偶數次發射還會從F,-L,H處發射,不過Laser等特效依然在F,L,H處

並且對於磁電副武器、TS中EMPulse超武調起建築開火、IFV的輻射工兵與超時空軍團兵等的坐標是沒有支持好的,Ares、Phobos等引擎已接力修復,詳見說明書(或者直接開用)

對於建築類使用PrimaryFireFLH的情況見PrimaryFireDualOffset一條的註解

WeaponXFLH =

EliteWeaponXFLH =

使用WeaponX系統的單位X號武器的開火坐標,計算規則同上

Phobos以允許上面6個語句使用Burst的情況為每一發Burst單獨指定FLH而不是只能奇數FLH偶數F-LH

AlternateFLH0 =

AlternateFLH1 =

AlternateFLH2 =

AlternateFLH3 =

AlternateFLH4 =

OpenTopped載具中步兵載員向外過火的位置,計算規則同上,但有效的僅有上面5個標籤,不要原版造個AlternateFLH6問為什麼不行

實際上是類似「壓入艙室」的方式來執行,也就是每新進入一個將前面的載員往後推一號,如果超過5個人則只有最後進的5個人一人一個

例如有步兵ABCDEF,則剛進A時A使用0,再進入B則B使用0而A使用1,再進入C則CBA分別使用012,EDCBA使用01234,FEDCBA只有後5個也就是FEDCB使用01234而A的無了

對於載具類載員則使用其自身的TurretOffset及FireFLH,PhobosBuild33開始硬編碼要求載具同樣遵循AlternateFLH,並且如果01234都排不上則跟運輸載具的開火坐標,PhobosBuild49版本新增了開關以決定是否使用這種模式

對於OpenTopped載具自身開火武器擁有Burst=2導致FLH使用F-LH的情況,AlternateFLH也會L翻轉為-L,在Phobos下不再會切換,並且允許了5個以上的坐標

遊戲內以60x30(Pixel)的菱形對應256x256(Lepton)的正方形地面單元格

正方形邊長等於256Leptons,所以每個Pixel等於256*√2/60≈6.035Leptons≈6

故F與L可在單位朝向東北→與西南←時截圖取Pixel*6求得(當然你要找准中心)

而H與視線夾角60°則是每Pixel等於256√2cot60°/30≈6.967Leptons≈7

TurretOffset往往需要*6再-1

如果=打成==則會因為數據讀入程序後因為程序內部的算法導致一些並不標準的視覺效果結果,這倒也算不上什麼稀奇事了,WW日常

YRStandard-INI項目中已添加一個名為[FLHAEANIM]的Animation以便直接使用AttachEffect.Animation等方式掛在單位上標記中心點

找好後截圖算像素點即可獲得足夠精確的坐標值,該標尺橫縱方向均為距中心每5個像素點標記一次白色像素點其餘用黑色填充以便於讀數

你也可以去使用DynamicPatcher引擎的實時INI功能不斷調整FLH值直到滿意,得益於動態更新INI數據的便捷,你不再需要反覆啟動遊戲

TurretOffset =

指定載具類單位炮塔轉軸的偏移量,原版下只支持修改F軸,單位Lepton

原版下僅支持Voxel炮塔與Voxel炮管,例如一個SHP載具使用那麼Shape炮塔繪製在中心而Voxel炮管根據TurretOffset偏移,Phobos已硬編碼支持Shape炮管生效

舊時代沒有多炮塔/替身/虛單位邏輯有種實現更多炮塔的方法就是靠一個以本體為轉軸的Shape炮塔配合一個Voxel的炮管來實現的「雙炮塔」,現在已經屬於陳年老物了

況且Laser等特效都被拓展引擎硬編碼修Bug改得遵守Offset以後也不好做兩個「炮塔」都有各自的開火效果了。此外Phobos支持了TurretOffset使用F,L和F,L,H的格式,詳見說明書

WeaponXTurretLocked =

使用X號武器的炮塔是否鎖定方向,但這個邏輯只是鎖住炮塔,並不是讓載具換用Body轉向,也就是你得手動讓它對正目標,當然[Weapon] -> OmniFire=yes仍可正常工作

蓋特即便實際上射不了也會累計計數器,並且蓋特武器音效也是正常的,也就是你可以做一個某階段自閉只能對自己朝向方向的對象開火的蓋特

如果攻擊自己不朝向的方向會自閉,但是下個階段突然扭頭送出一梭子,甚至正常讓動態Voxel炮塔根據Hva里的規則播放了炮管轉動效果

深切認為因為該邏輯與蓋特邏輯本來就不是同一個版本引入的而WW自己也不知道還能組合出這種能跑的怪東西

基於鎖定炮塔方向的這種效果你也同樣可以搭配一些其他語句來處理原版下Jumpjet載具炮塔朝向不對的問題https://www.bilibili.com/opus/955527925895004169

不過在現代拓展引擎中都對這個問題給予了修復,哪怕實在思索不出如何搭配不同的語句達到目標效果或懶得探索也大可直接使用現代拓展引擎寫好的代碼

沒有PrimaryTurretLocked之類的標籤,不要自己亂造.jpg

SecondSpawnOffset =

第二個導彈子機的生成位置,YR新增用於雷鳴潛艇前後兩個位置發射導彈,原版無畏則是根據子機發射器虛擬武器上的Burst=2自動分配該武器所處武器位的FLH與F-LH作為坐標

然而以上兩種方法都僅限導彈子機,即 MissileSpawn=yes 的 AircraftType 類子機

步兵

[InfantryType]

FireUp =

;存在Sequence中的同名異義語句

步兵主武開火時的開火前搖,單位為幀。

FireProne =

YR新增,匍匐時主武開火

SecondaryFire =

YR新增,副武開火

SecondaryProne =

YR新增,匍匐時副武開火

上述攻擊前搖效果開火時會穿插Guard序列的幀,也就是即便設 0 也不能持續射擊

Crawls =

指定是否單位能夠爬行(包括臥倒)。當然步兵的動作序列必須具有爬行的幀。

類似於在rules中為步兵添加[InfantryType] -> Fearless=yes的效果,YR中鮑里斯的禁止匍匐就沒有使用Fearless而是使用的此句

Sequence =

直接填入=XXXSequence

決定步兵使用哪個動作序列。序列是指定哪些幀用於開火,哪些幀用於行走等等

任何一個步兵素材正常發揮作用都需要sequence

[XXXSequence]

步兵動作序列告訴遊戲某個步兵的SHP文件的哪些幀用於什麼用途。每個標籤都有三或四個可能的值。

第一個數字是特定動作的開始幀。注意這是從0開始的。

第二個數字是每個特定動作用到的幀數量,包括起始幀。

第三個數字是八個方向上的乘數,用於計算各個朝向上動作的起始幀,即不同朝向動作之間的幀數跨度,也就是你可以八個方向各10幀(例如用了另一個序列的部分動作)來切割SHP序列,但通過上一個參數每個方向只調用各向中的前5幀。若為0則無多向設定。

第四個數字是八向基礎標識,用於指定播放該序列動作時步兵的默認朝向。當使用此參數時第三個數字必須設為0。

(其實SHPBuilder自帶一個用來生成步兵序列的工具)

動員兵

Crawl=86,6,6

遊戲從第86幀開始,使用6幀包括第87幀作為面向北,然後後6幀作為下一個方向,以此類推。(可以推斷,面向北的爬行的動作起始幀為第86幀,每個方向上的爬行動作占用6幀,從面向北轉向面向西北需要跨過6幀,也就是說面向西北的爬行動作起始幀為第(86+6=92)幀。以此類推。)

Prone=86,1,6

這裡,遊戲僅使用第一幀(第87幀)作為面向幀,然後通過計算得到下一個方向所占用的幀序號。(可以推斷,面向北的臥倒動作起始幀為第86幀,每個方向上的臥倒動作占用1幀,從面向北轉到面向西北需要跨過6幀……後面的我就不用再廢話了。)

第四個值是羅盤系統上的「北,南,東,西」。遊戲的方向性和你認為的不一樣,遊戲認為北就是你的屏幕的左上方。基本上遊戲的羅盤相當於順時針旋轉了45°。第四個標籤僅用於Idle1=、Idle2=、WetIdle1=、WetIdle2=和Cheer=標籤中。

下面是有效的動作標籤:

Ready =

用於當步兵單位站在那裡等待的時候。

Guard =

用於當步兵單位被處於Guard模式中。在紅警2中似乎使用的不多。

Tread =

指定當步兵單位在水中游泳,並不斷打水保持自己浮在水面上的幀序列。

Prone =

指定步兵單位臥倒且不移動時的幀序列

Walk =

指定當步兵行走的時候的幀序列。

Swim =

指定當步兵在水中游泳的幀序列。

FireUp =

指定當步兵單位站著向敵方單位開火的幀序列。

WetAttack =

指定當步兵單位在水中向敵方單位開火的幀序列。

Down =

指定當步兵單位遭到攻擊臥倒的幀序列。

Crawl =

指定當步兵單位爬行的幀序列。當步兵在移動的時候遭到攻擊會出現這種動作。

Up =

和down=相反。指定當危險過後步兵單位站起來的幀序列。

FireProne =

指定當步兵臥倒開火的幀序列。

Idle1 =

Idle2 =

指定當步兵單位站著閒得沒事的幀序列。這會使步兵單位不至於看起來像一尊雕像一樣。

WetIdle1 =

WetIdle2 =

同上。不同點是這裡的標籤指的是水中。

Die1 =

指定當步兵單位被某種擁有InfDeath=0彈頭的武器殺死的幀序列。

Die2 =

指定當步兵單位被某種擁有InfDeath=1彈頭的武器殺死的幀序列。可能會從Die2=和Die3=中隨機選擇一種。

Die3 =

指定當步兵單位被某種擁有InfDeath=1彈頭的武器殺死的幀序列。可能會從Die3=和Die2=中隨機選擇一種。

Die4 =

指定當步兵單位被某種擁有InfDeath=2彈頭的武器殺死的幀序列。

Die5 =

指定當步兵單位被某種擁有InfDeath=3彈頭的武器殺死的幀序列。

WetDie1 =

指定當步兵單位在水中被殺死的幀序列。可能會從WetDie1=和WetDie2=中隨機選擇一種。

WetDie2 =

指定當步兵單位在水中被殺死的幀序列。可能會從WetDie2=和WetDie1=中隨機選擇一種。

Deploy =

指定當步兵單位被命令「部署」從而激活某種功能(就像美國大兵會在身邊擺放沙袋並架起機關槍)的幀序列

建議不少於7幀,否則可能不成功

Deployed =

指定步兵單位部署狀態下的幀序列。

Undeploy =

指定當步兵被命令「取消部署」的幀序列。

DeployedFire =

指定部署狀態下開火的幀序列

DeployedIdle =

指定步兵單位部署狀態下閒置的幀序列

Cheer =

指定步兵單位歡呼的幀序列。

Paradrop =

指定當步兵單位被空投到戰場上的幀。該幀不要有影子。

SecondaryFire =

(僅用於尤里的復仇)和FireUp=相同,不同的是這裡使用第二武器開火。

SecondaryProne =

(僅用於尤里的復仇)和FireProne=相同,不同的是這裡使用第二武器臥倒開火。

以下用於飛行兵 顧名思義

Fly =

Hover =

FireFly =

Tumble =

AirDeathStart=;gs a split of Tumble, which is unused

AirDeathFalling =

AirDeathFinish =

其中一些序列可以定義序列執行時播放的聲音,同樣寫在[XXXSequence]中

例如

Idle1Sounds =

播放Idle1序列時的聲音

Idle2Sounds =

播放Idle2序列時的聲音

Die1Sounds =

播放Die1序列時的聲音

Die2Sounds =

播放Die2序列時的聲音

DeploySounds =

播放Deploy序列時的聲音,例如大兵蹲下

UndeploySounds =

播放Undeploy序列時的聲音,例如大兵站起

CheerSounds =

播放Cheer序列時的聲音,比如你可以讓大兵歡呼的時候發出鱷魚叫聲

序列相關的音效會與Rules中的各種音效指定同時播放,各用各的

例如CheerSounds會與RULES中[AudioVisual] -> CheerSound=指定的歡呼音效同時播放,也就是可以一邊發出人的歡呼一邊發出鱷魚的歡呼(

Idle等要結合使用情景,部分不太適合濫用,不然會巨吵,或者你樂得靠這玩意讓玩家不要讓這個兵閒著那也隨你

SHP載具

Facings =

面數,原版只支持1和8面,ares可使用32甚至2048面(比8大的2的整數次方倍)

UseTurretShadow =

是否繪製載具炮塔的影子,然而很可惜的是這個標籤無效,請用Phobos的TurretShadow或其他拓展引擎重新支持的這個邏輯

WalkFrames =

該 Shape 載具每一個方向上用於移動的幀數量有多少

可和rules中的[TechnoType] -> WalkRate=配合使用

StandingFrames =

同上。用於SHP載具閒置,必須和rules中的[TechnoType] -> IdleRate=0配合使用

如果[TechnoType] -> IdleRate=不為0則播放的依然是移動幀,只不過不移動時的播放速率會從[TechnoType] -> WalkRate=改成[TechnoType] -> IdleRate=指定的

由於上條規則存在,非 0 值的意義僅僅是指定了所使用幀的間隔,而實際上被使用的只有對應到各個面的多幀序列中的第一幀,對於素材師來說不如直接寫 1

若設為 0 則同樣使用移動幀,只不過由於[TechnoType] -> IdleRate=0所以使用的是對應到各個面的多幀序列中的第一幀

FiringFrames =

該 Shape 載具每一個方向上用於開火的幀數量有多少,渲染的時候要注意 Shape 載具的開火序列是倒著放的

StartWalkFrame =

StartStandFrame =

StartFiringFrame =

用於調整上述三條從哪一幀開始,0始序列

以原版[DRON]為例,設置了WalkFrames=6和FiringFrames=4:

1. 從第0幀開始作為Walk幀,8個方向各6幀,到第47幀;

2. 第48-55幀為8個朝向各1個的Standing幀;

3. 第56-88為Firing幀,個方向4幀;

以及88幀的影子與前面三組中的每一幀一一對應,整個 dron.shp 共計 176 幀

註:這裡的解析實際上更多是提到了一些默認行為,例如按Walk->Standing->Firing的順序分配、Start默認接在上一類後的首幀等

在 http://20400prosperous.ysepan.com/6.公开文件及链接 I /雜物/dron.shp 是一個標記了每一幀 0 始序號的版本,可以用於更透徹地理解幀序列規則

對於[TechnoType] -> Turret=yes的 Shape 載具,其炮塔圖像會接在 Firing 幀之後,固定 32 面各 1 幀

注意:Shape 載具的幀序列與步兵不同,載具的幀是順時針旋轉的!!!

一個 Bug 是使用 Shape 資源文件的單位在有高度的情況下影子會跟隨本體,rules 中的[TechnoType] -> DeployingAnim=在 Phobos 修復前也有該問題,在 Ares 下 Shape 單位的影子已經可以自動計算高差並正確渲染到單位正下方的投影處

Rotors=

CustomRotor=

遺留自TS開發版本的廢棄語句,是否擁有螺旋槳

Trailer =

這個標籤指定哪一個動畫被用作尾煙,丟失所屬。Phobos與Kratos均已修復這部分所屬鏈

單位會不停產生動畫,動畫獨立播放,因為單位不停飛遠,看起來就是連續的

只對Aircraft類單位和拋射體圖像有效

SpawnDelay =

每隔多少幀產生一個新的尾煙動畫,默認值為3

該語句使用全局計數器,達到 Delay 指定的幀數後所有使用該邏輯的同類對象同時生成一次 Trailer 指定的動畫

建築

Foundation =

決定對象占地面積有多大,它採用的格式為「寬x長」,其中寬為該建築在東西方向上所占的格子數,長為該建築在南北方向上所占的格子數

NxN有固定的幾個可用項,並非隨意填寫,可用列表見下:

寬(↘) :  1   2   3   4   5   6   特殊

長(↙)1:  1x1 1x2 1x3 1x4 1x5    

長(↙)2:  2x1 2x2 2x3     2x5 2x6

長(↙)3:  3x1 3x2 3x3 3x4 3x5     3x3refinery

長(↙)4:      4x2 4x3 4x4        

長(↙)5:              6x4        

長(↙)5:          5x3            

上面的特殊項3x3refinery是在3x3的基礎上挖掉了正東方向中間那個格子

還有一類特殊的0x0建築不占格(因此也無法用AOE傷害到)但光標放上去會有1x1建築一樣大的選取範圍

原版下Foundation=0x0的TerrainType會導致崩潰,Phobos已修復

Ares可使用自定義形狀,用ares包中的Documentation/_downloads/custom_foundation.html生成代碼

當長寬均>1時建築被摧毀強制生成一個污染物

常見問題-面積不對:

Rules中[A]Image=B實際上Foundation依然會先找Art中[A]下的Foundation

若全部使用Ares的自定義Foundation則沒有這個問題

常見問題-子機回收:

程序判定子機返航是以母艦正中心位置為目標抵達後回收,但建築類需要到0,0單元格才算作抵達,而對於大於1x1的建築而言這兩個判定點顯然根本就不是同一個坐標,因此非1x1的建築無法正常回收子機

當然你可以讓建築放出一個生成後不移動的子航母再放出二級子機來處理,不過那就需要相當充足的子機姿控和子航母相關的知識了

子機回收問題在b47及以上版本的Phobos中已經解決,詳見說明書

Height =

指定該建築有多高(單位為格)。它用於決定當選中該建築時,出現的白色虛線框的高度,還有基洛夫空艇、火箭飛行兵或其他任何飛行單位打算飛過該建築時需要升高的高度。

默認2

DemandLoad =

該建築或動畫的資源文件是否僅在被需要時從磁碟加載而不是在載入地圖時預加載並緩存,對應的其 Shape 文件必須存儲於非 cache 類 mix 中否則可能導致內存洩漏

RA2 殘留,YR 中已廢棄

DemandLoadBuildup =

同上但僅用於[BuildingTypeArt] -> Buildup=指定的文件

RA2 殘留,YR 中已廢棄

FreeBuildup =

對應上一條,用於在建造完成後從內存中清除[BuildingTypeArt] -> Buildup=所加載文件的緩存

RA2 殘留,YR 中已廢棄

Buildup =

決定建造該建築的時候使用哪個SHP圖像作為建造動畫。賣建築的時候,動畫倒退播放

這個動畫原版應該少於54幀,

如果幀數過長,由於計算所得每幀播放時長小於紅警世界的普朗克時間而瞬間結束(笑)

如果幀數過短,由於幀數太低會被直接當做不存在,也無法出售,至少要有4幀,哪怕是空的

例如如果使用2025教程包附帶的光速部署包,那麼你可以直接指定Buildup=dummyup使用一個預置的無形素材

太長可以考慮用BuildupTime更改Buildup所需的時長來調節,太短可以考慮加幀

此外有無建造動畫直接決定建築能否被出售,不寫Buildup的建築強制無法出售

而擁有Buildup的建築才會允許玩家使用Unsellable來設定

由於Unsellable的限制,AI與地圖觸發、強制更改Mission等實際上依然只能依靠Buildup來禁止出售

詳見單位屬性詞典中對Unsellable的註解

Buildup僅調用shp文件,並非動畫類型實體,因此無需也無法註冊,更無法進行定義,對應地它的名稱長度不應超出 15 個字符

Recoilless =

如果被設定為yes,那麼即使建築有炮塔也不會表現出後坐力動畫

ToOverlay =

指定該建築將會轉化為哪個覆蓋物。一般用於允許玩家建造城牆,需要在Rules中Wall=yes

如果你填寫一個地形對象(例如樹)那麼實際上是創建了一個使用它圖像的覆蓋物而非真的創建了一個地形對象

DamageLevels =

指定一個城牆的SHP文件有多少損壞的程度。每一種損壞的程度都是一整套城牆的圖像,而破損增加。(就是說每壞得更厲害一次,都需要一整套城牆的圖像。)

ZShapePointMove =

格式=X,Y

建築ZShape的偏移值,用於對齊建築體圖像與buildngz.sha

有時候建築邊角被切掉就是因為ZShape在程序緩衝區中的問題

原版下ZShapePointMove並不用於Buildup的圖像,Phobos已允許設定

NormalZAdjust =

用於建築體自身的ZAdjust設置,對於ZAdjust的概念詳見ZAdjust標籤自身的註解

QueueingCell =

指定當一個礦車在朝礦廠裡面倒礦,另一個礦車在旁邊等待倒礦的時候,那個等著的礦車所在的格子的X,Y坐標

使用與Foundation相同的規則,不過實際上以原版的倒礦速度甚至不大用得到,就算用到也會立即更改移動目標點到另一個位置

這個參數按照這個規則確定:從建築的西角開始數,向東北方向x坐標增加,向東南方向y坐標增加。

WaitingOffsetX =

遺留自RA2開發版本的廢棄語句,用於設定第X個礦車等待的偏移位置,與RULES中NumberOfWaitingPoints一句同步廢棄,正式版中強制1輛倒礦1輛等待也只有1個等待位置,已改用上一句

BibShape =

指定用作「Bib」的圖像。Bib是指建築最東邊的那列,單位可以越過這個部分

直接調用文件名,不是Animation對象,無法被定義,就像Buildup那樣

此時遊戲將單位繪製到Bib的上面而不是下面,例如戰車工廠門口地板

DockingOffset0 =

DockingOffset1 =

DockingOffset2 =

DockingOffset3 =

格式=X,Y,Z,等號前的序號是從 0 開始到[BuildingType] -> NumberOfDocks=值-1的序列。

單位對接(Dock)到這個建築上時的三維坐標,此處Z代表高度,XYZ單位均為Lepton

然而原版下戰機返航必然會降落到地面,因此Z只影響戰機生產出來時所在的坐標高度

此外Ares下嚴格了Aircraft降落的Dock,如果DockingOffset在建築占地範圍外那麼會懸停在空中,也不會因為空出了占地範圍內的Dock位輪替

並不用於礦場倒礦,礦場倒礦雖然也是Dock但使用單元格X,Y式坐標且硬編碼,Ares已解除限制使用DockUnloadCell=X,Y指定,詳見Ares說明書

原版下即便單位執行的攻擊等非停靠動作也會前往停靠位置,PhobosBuild49已修復

DamageFireOffset0 =

DamageFireOffset1 =

DamageFireOffset2 =

DamageFireOffset3 =

DamageFireOffset4 =

DamageFireOffset5 =

DamageFireOffset6 =

DamageFireOffset7 =

格式=X,Y

指定當建築被破壞到HP少於50%的時候播放的著火動畫的播放位置,使用X,Y的形式代表像素偏移的數量,X向右為正,Y向下為正

MuzzleFlash0 =

MuzzleFlash1 =

MuzzleFlash2 =

MuzzleFlash3 =

MuzzleFlash4 =

MuzzleFlash5 =

MuzzleFlash6 =

MuzzleFlash7 =

MuzzleFlash8 =

MuzzleFlash9 =

格式=X,Y

建築內駐軍開火的槍口閃光動畫位置,使用X,Y的形式代表像素偏移的數量,X向右為正,Y向下為正

對於同一建築而言,只有[BuildingType] -> MaxNumberOccupants=範圍內的條目會被使用

Phobos擴展了這一邏輯,允許[BuildingTypeArt] -> MuzzleFlashX=的範圍達到10及以上

PrimaryFirePixelOffset =

SecondaryFirePixelOffset =

建築的開火坐標,固定位置,使用X,Y坐標系,X向右為正,Y向下為正

例如原版核彈井就是直接使用PrimaryFirePixelOffset=0,44來設定

以上X,Y類型的參數均可使用附件包中的ImageShaper測得,在ImageShaper自帶工具中

如果你獲得本文檔的同時沒有配套這一工具,說明你的文檔並非從原正式發布渠道獲取,而是已經被第三方未經許可拆分修改過的

PrimaryFireDualOffset =

該建築開火坐標是否額外使用PrimaryFireFLH參數的值

也就是啟用時使用PrimaryFirePixelOffset指定的固定位置作為炮塔的旋轉軸

而使用PrimaryFireFLH根據朝向在旋轉軸的基點之上根據目標方向額外偏移值

對使用炮塔但炮塔轉軸並不在建築中心的建築來說非常好用

IsAnimDelayedFire =

建築開火之前是否會有一個前搖動畫,例如原版光棱塔與磁暴線圈,前搖動畫使用SpecialAnim指定

並且播放SpecialAnim時會刪除ActiveAnim而結束後會切回ActiveAnim重新開始播放

也就是這種情況下ActiveAnim成為了相對於Fire而言Idle狀態的動畫

DelayedFireDelay =

建築開火硬直時間,也就是開火前有多少幀前搖,用於協調前搖動畫播放時間與實際開火時刻

需要[BuildingTypeArt] -> IsAnimDelayedFire=yes才能使用該句,但無所謂有沒有SpecialAnim指定

AddOccupy1 =

AddOccupy2 =

AddOccupy3 =

AddOccupy4 =

AddOccupy5 =

AddOccupy6 =

AddOccupy7 =

AddOccupy8 =

指定這個建築判定可遮擋的額外區域,將這些單元格添加進建築所占據的單元格一起進行判定

RemoveOccupy1 =

RemoveOccupy2 =

RemoveOccupy3 =

RemoveOccupy4 =

RemoveOccupy5 =

RemoveOccupy6 =

RemoveOccupy7 =

RemoveOccupy8 =

與AddOccupy相反的邏輯,將這些單元格從建築所占據的單元格中去除,不參與判定

以上兩條可以見RA2DIY論壇https://bbs.ra2diy.com/forum.php?mod=redirect&goto=findpost&ptid=16760&pid=90653

論壇壇友雙殺步槍在6樓的圖示

OccupyHeight =

指定OccupyCell(由AddOccupy和CanHideThings=指定)有多高

漂浮在OccupyCell上且低於OccupyHeight的火箭飛行兵會被認為是被擋住,而飛行高度高於此值則不被認為擋住。

默認[BuildingTypeArt] -> Height=的值

CanHideThings =

該建築能否遮擋其所占單元格上的其他對象,不影響圖像繪製,只用於判定是否會在被遮擋的對象上顯示[General] -> Behind=指定的動畫

如果設定上其實是一個本就沒有實體遮擋或不能遮擋其他對象的物體,那麼可以將這個標籤設為no來禁用Behind效果

CanBeHidden =

指定該對象能否被其他對象遮擋,不影響圖像繪製,只用於判定是否會在被遮擋的對象上顯示[General] -> Behind=指定的動畫

如果設定上其實是一個本就沒有實體遮擋或被遮擋也不應該繪製標識的物體,那麼可以將這個標籤設為no來禁用Behind效果

也就是建築A在載具B之前,那麼A上有CanHideThings=no或B上有CanBeHidden=no二者滿足其一則B上不會標註[General] -> Behind=指定的動畫

注意:WW很多ART中的標籤實際是讀取與物體同註冊名的ART段落,而不是物體Image=調用的ART段落,所以最好保持物體在RULES與ART中註冊名一致的好習慣

DoubleThick =

(僅用於尤里的復仇)如果被設置為yes,則該建築或者動畫被超時空兵種攻擊的時候會出現額外的半透明效果。用於當建築有兩個或者更多的層且其中一個半透明的層不夠用的情況。

SiloDamage =

決定建築能否根據其存儲礦物的數量對應不同的SpecialAnim階段,RA2中儲礦邏輯已被移除,故無法使用

由於排列組合過多,以下內容以組合形式表述

注意:一些 X+Y 組合而成的語句需要 X 語句存在才能在滿足條件時替換為 X+Y,例如 ActiveAnim 與 ActiveAnimGarrisoned 的轉換

1.動畫類別

ActiveAnim =

後面不帶序號為建築常態工作動畫

在後面加[Two|Three|Four]代表第2、第3、第4ActiveAnim

指定當該建築建造起來之後正常運作狀態下所播放的工作動畫

對於[BuildingType] -> Refinery=yes的建築其 ActiveAnim 強制根據礦石儲藏量對應到其中一個動畫,Phobos已允許定義這一行為

SpecialAnim =

在後面加[Two|Three|Four]代表第2、第3、第4SpecialAnim,其中第4是YR新增

這些標籤就像ActiveAnim一樣,只不過這些是用於當該建築執行特殊功能時。因此並不是一直有效,只有需要的時候才有效

例如礦車倒礦,這種情況下播放速度不變但播放時間會隨礦車所卸載的礦石量變化,即太少的礦會被階段,而空倉直接不進行播放

當[BuildingType] -> Grinder=yes時作為回收動畫

當[BuildingTypeArt] -> IsAnimDelayedFire=yes時所使用的前搖動畫也使用該標籤指定

在[BuildingTypeArt] -> SiloDamage=yes時也根據[|2|3]顯示儲礦等的不同程度,但是RA2下儲礦邏輯已廢棄,僅地編直接擺放在地圖上時才會使用滿倉時的動畫

當[BuildingType] -> UnitRepair=yes時則根據[|2|3]對應維修[開始|進行|結束]階段的動畫效果

當[BuildingType] -> Bunker=yes時,[|2|3|4]分別對應[空員常態|進入動畫|有員常態|退出動畫]

SuperAnim =

用於超武動畫

後面不帶序號為超武建築常態動畫

Two為SuperWeapon關聯的超武[SuperWeaponType] -> RechargeTime=剩餘時間少於建築[BuildingType] -> ChargedAnimTime=時播放的預備動畫(Ares 下包括 SuperWeapon2 和 SuperWeapons,但只有完全充滿才觸發)

Three為達到[BuildingType] -> ChargedAnimTime=後的常態動畫,原版下地圖預置建築初始總是使用它,Phobos已修復

Four為超武發射時回到常態重新加載的動畫,你也可以專門拿它當發射動畫

例如原版核彈井,常態閉倉,Two為開倉效果,Three為開倉後一個核導彈豎在裡面待命,Four為核導彈發射後閉倉效果

ProductionAnim =

Factory=BuildingType需要[BuildingType] -> ConstructionYard=yes

Factory=InfantryType/UnitType需要[BuildingType] -> WeaponsFactory=yes

用於工廠生產動畫,例如原版造建築時建造場的吊臂,也可以戰車工廠生產載具時播放一個動畫

該類動畫沒有+Powered(XXX)四句的組合

神奇的是礦場倒礦動畫除了SpecialAnim外也可以用ProductionAnim標籤額外指定一個,並且在播放結束前礦車不會自動離開,哪怕它已經倒空了(仍可手動拉走)

PreProductionAnim =

預生產動畫,在工廠生產動畫之前播放,由於RA2中預生產邏輯殘缺不全,因此只有少數功能還能使用

該類動畫沒有+Powered(XXX)四句的組合

同樣可以用於礦場倒礦額外指定一個動畫,但是Dock了就播,不影響礦車自動離開

IdleAnim =

用於建築閒置動畫

LowPower =

對應ActiveAnim和SuperAnim,建築處於LowPower狀態的動畫

SuperLowPower =

針對SuperAnimThree專用的LowPower版本動畫

2.可選組合詞條

+Damaged =

指定該建築的此類動畫處於傷殘狀態(黃血)時替換播放的動畫

註:

由於CanBeOccupied=yes且TechLevel=-1決定的可駐軍平民建築紅血才變為破損幀,所以與該功能兼容未必良好

然而這樣的建築通過Deliver.Types等方式來生成本就有建築非中立所屬方則不顯示部分圖像等各種問題,完全可以使用ActiveAnim系統替代掉其自身Image建築本體的圖像系統

當然,非平民建築的建築也可以使用這種方法來更好的處理遮擋問題與各種其他效果

注意:即便改為使用工作動畫作為實際圖像,您也依然需要為本體使用一個有非0號色像素點的Shape素材以讓遊戲為工作動畫分配畫布

對於NeedsEngineer=yes的對象原本應當是被工程師進入後才允許播放工作動畫,但建築黃血切換+Damaged的動畫後也會開始播放,Ares已修復

+Garrisoned =

指定該建築的此類動畫處於駐軍狀態時替換播放的動畫。例如RA2S1的勝利紀念碑進入一個動員兵後原本作為 ActiveAnim 的老美國旗變成了 ActiveGarrisoned 的蘇俄國旗

以下2句用於調整動畫的繪製坐標

+X =

X坐標。正值向右,負值向左

+Y =

Y坐標。正值向下,負值向上

以下2句用於調整動畫的遮擋關係

+YSort =

動畫的YSort,對於YSort的概念詳見YSortAdjust標籤自身的註解

+ZAdjust =

動畫的ZAdjust,對於ZAdjust的概念詳見ZAdjust標籤自身的註解

以下4句用於控制電力相關的行為

+Powered =

這個動畫是否在沒電時進入停滯狀態,no的話則是根據下一句判定

+PoweredLight =

這個動畫是否在沒電時消失,默認no即沒電時也正常播放,若下句yes則這句幾乎沒用

僅用於Rules中Powered=yes的建築,畢竟Powered=no的建築顯然不停滯就會始終活動

但是如果這是個Powered=yes且Power>0的建築也會直接抹掉動畫,除非它攻擊一次

不合理的是,你可以使用手動斷電邏輯先把沒電狀態動畫被關了的建築斷電再打開來讓動畫正常播放

在TS中這會導致關聯的動畫在建築拔起過程還未結束時就生成,RA2已修復

對於地圖預置建築需要切換一次才正常執行,否則yes也會正常播放

下面2句均為YR新增LowPower動畫邏輯相關

+PoweredEffect =

這個動畫是否在沒電時消失,並且轉而播放對應的LowPower動畫,直到有電時才反向切換回來

例如原版基因突變器在充滿後處於SuperAnimThree,如果電力不足則切換為SuperLowPower

該邏輯不必須Rules中PoweredSpecial=yes的建築,電廠被毀或單純靠耗電建築壓電力負載即可

如果不考慮LowPower動畫邏輯,那麼和Light基本一樣,包括關閉動畫效果也是只要兩句中擁有至少任意一句就會執行,甚至Bug表現得都一樣

+PoweredSpecial =

這個動畫是否在基地斷電狀態下消失

不必須Powered=yes

該邏輯僅用於Rules中PoweredSpecial=yes的建築,這裡的LowPower特指間諜和飛碟導致的LowPower

將上述兩類標籤進行組合,你甚至可以得到SpecialAnimThreePoweredSpecial這種30個字符長度的標籤(如果PreProductionAnim能用PoweredSpecial就有31字符長了)(大噓)

上述情況共計[(2*4 + 5*1)*11 - 2*4]=179種組合

列於此處,以便進行文本搜索時查找原語句

不存在的組合也一併列出,但將語句進行了注釋

[原基本標籤]

ActiveAnim =

ActiveAnimTwo =

ActiveAnimThree =

ActiveAnimFour =

SpecialAnim =

SpecialAnimTwo =

SpecialAnimThree =

SpecialAnimFour =

ProductionAnim =

PreProductionAnim =

IdleAnim =

SuperAnim =

SuperAnimTwo =

SuperAnimThree =

SuperAnimFour =

LowPower =

SuperLowPower =

[+Damaged類]

ActiveAnimDamaged =

ActiveAnimTwoDamaged =

ActiveAnimThreeDamaged =

ActiveAnimFourDamaged =

SpecialAnimDamaged =

SpecialAnimTwoDamaged =

SpecialAnimThreeDamaged =

SpecialAnimFourDamaged =

ProductionAnimDamaged =

PreProductionAnimDamaged =

IdleAnimDamaged =

SuperAnimDamaged =

SuperAnimTwoDamaged =

SuperAnimThreeDamaged =

SuperAnimFourDamaged =

LowPowerDamaged =

SuperLowPowerDamaged =

[+Garrisoned類]

ActiveAnimGarrisoned =

ActiveAnimTwoGarrisoned =

ActiveAnimThreeGarrisoned =

ActiveAnimFourGarrisoned =

SpecialAnimGarrisoned =

SpecialAnimTwoGarrisoned =

SpecialAnimThreeGarrisoned =

SpecialAnimFourGarrisoned =

ProductionAnimGarrisoned =

PreProductionAnimGarrisoned =

IdleAnimGarrisoned =

SuperAnimGarrisoned =

SuperAnimTwoGarrisoned =

SuperAnimThreeGarrisoned =

SuperAnimFourGarrisoned =

LowPowerGarrisoned =

SuperLowPowerGarrisoned =

[+X類]

ActiveAnimX =

ActiveAnimTwoX =

ActiveAnimThreeX =

ActiveAnimFourX =

SpecialAnimX =

SpecialAnimTwoX =

SpecialAnimThreeX =

SpecialAnimFourX =

ProductionAnimX =

PreProductionAnimX =

IdleAnimX =

SuperAnimX =

SuperAnimTwoX =

SuperAnimThreeX =

SuperAnimFourX =

LowPowerX =

SuperLowPowerX =

[+Y類]

ActiveAnimY =

ActiveAnimTwoY =

ActiveAnimThreeY =

ActiveAnimFourY =

SpecialAnimY =

SpecialAnimTwoY =

SpecialAnimThreeY =

SpecialAnimFourY =

ProductionAnimY =

PreProductionAnimY =

IdleAnimY =

SuperAnimY =

SuperAnimTwoY =

SuperAnimThreeY =

SuperAnimFourY =

LowPowerY =

SuperLowPowerY =

[+YSort類]

ActiveAnimYSort =

ActiveAnimTwoYSort =

ActiveAnimThreeYSort =

ActiveAnimFourYSort =

SpecialAnimYSort =

SpecialAnimTwoYSort =

SpecialAnimThreeYSort =

SpecialAnimFourYSort =

ProductionAnimYSort =

PreProductionAnimYSort =

IdleAnimYSort =

SuperAnimYSort =

SuperAnimTwoYSort =

SuperAnimThreeYSort =

SuperAnimFourYSort =

LowPowerYSort =

SuperLowPowerYSort =

[+ZAdjust類]

ActiveAnimZAdjust =

ActiveAnimTwoZAdjust =

ActiveAnimThreeZAdjust =

ActiveAnimFourZAdjust =

SpecialAnimZAdjust =

SpecialAnimTwoZAdjust =

SpecialAnimThreeZAdjust =

SpecialAnimFourZAdjust =

ProductionAnimZAdjust =

PreProductionAnimZAdjust =

IdleAnimZAdjust =

SuperAnimZAdjust =

SuperAnimTwoZAdjust =

SuperAnimThreeZAdjust =

SuperAnimFourZAdjust =

LowPowerZAdjust =

SuperLowPowerZAdjust =

[+Powered類]

ActiveAnimPowered =

ActiveAnimTwoPowered =

ActiveAnimThreePowered =

ActiveAnimFourPowered =

SpecialAnimPowered =

SpecialAnimTwoPowered =

SpecialAnimThreePowered =

SpecialAnimFourPowered =

;ProductionAnimPowered = ;不存在的語句

;PreProductionAnimPowered = ;不存在的語句

IdleAnimPowered =

SuperAnimPowered =

SuperAnimTwoPowered =

SuperAnimThreePowered =

SuperAnimFourPowered =

LowPowerPowered =

SuperLowPowerPowered =

[+PoweredLight類]

ActiveAnimPoweredLight =

ActiveAnimTwoPoweredLight =

ActiveAnimThreePoweredLight =

ActiveAnimFourPoweredLight =

SpecialAnimPoweredLight =

SpecialAnimTwoPoweredLight =

SpecialAnimThreePoweredLight =

SpecialAnimFourPoweredLight =

;ProductionAnimPoweredLight = ;不存在的語句

;PreProductionAnimPoweredLight = ;不存在的語句

IdleAnimPoweredLight =

SuperAnimPoweredLight =

SuperAnimTwoPoweredLight =

SuperAnimThreePoweredLight =

SuperAnimFourPoweredLight =

LowPowerPoweredLight =

SuperLowPowerPoweredLight =

[+PoweredEffect類]

ActiveAnimPoweredEffect =

ActiveAnimTwoPoweredEffect =

ActiveAnimThreePoweredEffect =

ActiveAnimFourPoweredEffect =

SpecialAnimPoweredEffect =

SpecialAnimTwoPoweredEffect =

SpecialAnimThreePoweredEffect =

SpecialAnimFourPoweredEffect =

;ProductionAnimPoweredEffect = ;不存在的語句

;PreProductionAnimPoweredEffect = ;不存在的語句

IdleAnimPoweredEffect =

SuperAnimPoweredEffect =

SuperAnimTwoPoweredEffect =

SuperAnimThreePoweredEffect =

SuperAnimFourPoweredEffect =

LowPowerPoweredEffect =

SuperLowPowerPoweredEffect =

[+PoweredSpecial類]

ActiveAnimPoweredSpecial =

ActiveAnimTwoPoweredSpecial =

ActiveAnimThreePoweredSpecial =

ActiveAnimFourPoweredSpecial =

SpecialAnimPoweredSpecial =

SpecialAnimTwoPoweredSpecial =

SpecialAnimThreePoweredSpecial =

SpecialAnimFourPoweredSpecial =

;ProductionAnimPoweredSpecial = ;不存在的語句

;PreProductionAnimPoweredSpecial = ;不存在的語句

IdleAnimPoweredSpecial =

SuperAnimPoweredSpecial =

SuperAnimTwoPoweredSpecial =

SuperAnimThreePoweredSpecial =

SuperAnimFourPoweredSpecial =

LowPowerPoweredSpecial =

SuperLowPowerPoweredSpecial =

PowerUp[X]

建築被加載時使用,[X]對應加載物的PowersUpToLevel值,因此也與其擁有相同的可用範圍即[1|2|3]

+Anim =

動畫

+DamagedAnim =

傷殘時的動畫,注意不是AnimDamaged,與常規動畫的傷殘標籤的拼寫規則不同

+LocXX =

指定繪製建築的加載物距離繪製建築的位置的X軸像素偏移量。正值向右,負值向左

+LocYY =

指定繪製建築的加載物距離繪製建築的位置的Y軸像素偏移量。正值向下,負值向上

+LocZZ =

用於指定加載物的ZAdjust,對於ZAdjust的概念詳見ZAdjust標籤自身的註解

+YSort =

用於指定加載物動畫的YSort,對於YSort的概念詳見YSortAdjust標籤自身的註解

共有下列組合:

PowerUp1Anim =

PowerUp2Anim =

PowerUp3Anim =

PowerUp1DamagedAnim =

PowerUp2DamagedAnim =

PowerUp3DamagedAnim =

PowerUp1LocXX =

PowerUp2LocXX =

PowerUp3LocXX =

PowerUp1LocYY =

PowerUp2LocYY =

PowerUp3LocYY =

PowerUp1LocZZ =

PowerUp2LocZZ =

PowerUp3LocZZ =

PowerUp1YSort =

PowerUp2YSort =

PowerUp3YSort =

原版下加載物動畫的規則比較有趣,但是 Phobos 從 DevBuild44 版本已經把它整治了一番,現在頗具人性,如上使用即可

End,請根據所屬類別向上查看對應邏輯

DeployingAnim =

戰車工廠單位從大門離開時在單位遮擋層之前的圖像

用於有[BuildingType] -> WeaponsFactory=yes的工廠類建築,單位開出來時使用

或使用[BuildingType] -> CanBeOccupied=yes的駐軍建築,釋放駐軍步兵時使用

亦或者裂縫產生器使用ExtraPower部署的邏輯也可,但有一些有趣的效果:

這個語句所調用的*.shp文件會殘留在鏡頭上,就像原版下碾壓Terrain那樣

刷新視角或另一個裂縫產生器在其他地方部署同樣執行這個邏輯都可以刷掉它

UnderDoorAnim =

戰車工廠單位從大門離開時在單位遮擋層之後的圖像

RoofDeployingAnim =

戰車工廠單位從天窗離開時在單位遮擋層之前的圖像

UnderRoofDoorAnim =

戰車工廠單位從天窗離開時在單位遮擋層之後的圖像

建築SHP炮塔

在rules的[Animations]下註冊

圖像從正上方開始,32幀 逆時針

參考代碼

[XXXTUR]

Normalized=no

LoopStart=0

LoopEnd=32

LoopCount=-1

Rate=0

Layer=ground

NewTheater=yes

Shadow=yes

SHP炮塔想要擁有影子需要像建築動畫那樣自己寫上Shadow來開啟

Surface=yes

用作拋射體的動畫

AnimLow =

AnimHigh =

AnimRate =

這三條用於動畫拋射體,拋射體飛行中會播放動畫而非停留在第一幀。low和high等於是loopstart和loopend,Rate則是像WalkRate那樣每一幀實際播放多少幀

Rotates =

這個拋射體圖像是否擁有方向,不能與上面三跳啟用的動畫拋射體合用

素材為從背對玩家開始逆時針旋轉360°的32幀或64幀(帶影子)Shp文件

Ares已允許帶有動畫效果的有方向拋射體,使用新語句,詳見Ares說明書

Voxel =

如果被設置為yes,則指定該圖像是VXL而不是SHP。

機甲步行等HVA動畫效果序列最長32超出無效

動畫

這些動畫會在其它之上播放。包括火焰、爆炸、開火動畫、各種特效等。

如新增動畫無法顯示,請在rules的Animations註冊列表註冊,Ares下rules中調用的動畫必須註冊

Scorch =

如果被設置為yes,動畫會在戰場上留下燒焦的痕跡(燃燒「污染」),純粹就是圖像效果

灼痕生成於動畫播放到一半的時候,也就是總幀數/2後向上取整,共6幀則第4幀

TS殘留噴火武器邏輯,Ares已復原,未復原前可無視下面三行

同時在原地生成一個SmallFire

當與Flamer=yes合用時火焰生成由Flamer邏輯接管

如果處於LandType=[Water|Beach|Ice|Rock]的地面,那麼不使用相關邏輯

Flamer =

TS殘留噴火武器邏輯,Ares已復原

如果啟用那麼將隨機生成一到三個動畫

始終在中心位置生成一個SmallFire動畫

有一半機率在較遠處生成SmallFire動畫

有一半機率在中距處生成LargeFire動畫

換句話說,如果只生成出了一個動畫,那麼只能是SmallFire

如果有三個動畫,那麼只可能是2個SmallFire和1個LargeFire

如果生成了兩個動畫,那麼其中一個是LargeFire的機率為50%

當與Scorch=yes搭配使用時

火焰生成由Flamer接管

但Scorch仍可使動畫留下地面燒焦痕跡

關於SmallFire和LargeFire見全局[AudioVisual]

Crater =

如果被設置為yes,動畫會在戰場上留下彈坑的痕跡,當然也是圖像效果

值得注意的是原版下有這句的動畫強制會破壞一層礦石,因此也曾被用於在RA2下實現類似MARV移動吃礦的效果

PsiWarning =

是否僅在敵方心靈探測範圍內對敵方播放,如果被設置為yes,動畫會在核彈發射的時候為擁有心靈感應器的玩家在心靈感應範圍內的核彈落點處播放。

Sticky =

如果被設置為yes,動畫會附著在目標上。聽起來就很好用,但是這條語句是無效的

Flat =

告訴遊戲處理ZAdjust時使用視角向上實際上是在地面上向西北擴展的方式來處理

詳見ZAdjust下方註解,覆蓋物擁有同類標籤DrawFlat但默認yes,也可進行了解

Translucent =

漸變透明效果,如果被設置為yes,該動畫在播放過程中會逐漸變為透明

Translucency =

指定動畫的恆定半透明效果為多少

可取值25、50或75意味著25%、50%或75%透明度(值越大越透明)

兩句同時存在則只表現Translucent=yes的效果,Translucent=no的情況下才會使用Translucency=指定一個固定值

舊傳的什麼Translucent=yes則由Translucency指定漸變停在多少/多少開始漸變的說法是完全錯誤的,原版並不存在那樣的用法

TranslucencyDetailLevel =

為此動畫的半透明效果設置視覺效果所需級別。

如果此標誌的值高於當前遊戲視覺細節級別,則儘管存在透明度或半透明值,動畫仍將不透明。 默認為0。

Damage =

一幀造成一次傷害,範圍和動畫彈頭一樣。原版註冊名為[INVISO]的動畫彈頭為[CombatDamage] -> C4Warhead=指定的彈頭,其它為[CombatDamage] -> FlameDamage2=指定的彈頭,不能修改

Ares引擎可為動畫傷害單獨指定彈頭並且可指定傷害間隔,也允許讓動畫爆出一個武器而非單純彈頭以支持輻射等特殊效果,Phobos下允許有所屬動畫爆出的武器與原所屬關聯

這裡的一幀是Shape文件自身向前一幀,也就是一個4幀的Shape動畫會殺傷4次,如果有LoopCount=2額外播一輪造成4*2=8次,但是如果只是設定里Rate=300每幀實際在遊戲內持續900/300=3幀,那麼依舊只殺傷4次,但是每兩次之間間隔3幀

動畫所掛的傷害允許使用小數形式,但並不能表現為一幀減少半點血量,而是根據設定值累計周期決定多少幀殺傷一次

Report =

指定當播放動畫的時候播放的聲音。聲音應當和soundmd.ini文件中的片斷頭相匹配。

StartSound =

當動畫開始播放的時候播放的聲音,與上句功能上毫無區別,非要說區別就是TS里沒有,所以對於RA2Modder來說就是完全一樣,如果有這句就不會再去嘗試讀取上句

個人理解是RA2開始WW給動畫的Start和Stop各加了一個Sound設置,於是成了成對的StartSound和StopSound。檢查原版的應用實例在RA2中使用StartSound的動畫除了流水懸崖以外僅有ChargedAnimTime開啟的超武SuperAnim系列動畫和DamageFireTypes的3個FIRE0[1|2|3]動畫,而這兩套邏輯又恰好都是RA2新增的,推測是Westwood開發時沒有協調好導致大量動畫音效沿用了TS的舊寫法仍然使用的Report於是後期在程序內又添加了StartSound獲取不到時去找Report的運作方式作為一種寫法上的兼容

當本動畫與Next的動畫使用的是同一個音效時音效會繼續播放(如果音效尚未結束而原動畫已經播放完了)

如果不是同一個音效(包括未指定)會中斷原本動畫的音效開始播放新動畫的音效

如果一串Next動畫上均為同一個音效,那麼要等前面好幾個動畫連續播放的音效播放結束後Next到下一個動畫才會再次開始播放這個音效,而不是音效播放完立即重新開始

StopSound =

指定當動畫播放結束時的聲音

如果動畫Next了另一個動畫則不會播放,所以只有最後一個動畫的StopSound有效

MakeInfantry =

基因突變的原理,動畫生成步兵的序號,由rules全局的AnimToInfantry規定,0代表第一個 1代表第二個

動畫僅在下面兩類情況下賦予所屬

1. 是由於步兵被擊殺而創建的[General] -> InfantryVirus=或[General] -> InfantryMutate=中的動畫

2. 是由建築的心靈探測效果在敵方核彈超武落點處創建的名為[PSIWARN]的動畫

其他情況為中立所屬方,Ares已進行拓展,允許使用[Animation] -> MakeInfantryOwner=來指定所屬,並令[InfantryType] -> DeathAnims=創建的動畫所屬默認來自victim,[Warhead] -> AnimList=創建的動畫所屬默認來自invoker。

原版下會丟失來自IvanBomb的所屬方,Phobos已修復

若有[Animation] -> Next=那麼僅在最後一個動畫上生效

Next =

指定當前動畫已經停止播放之後播放的動畫。這也包括當它已經循環播放數次之後的情形

僅替換圖像,不更改運動狀態,也不會改變圖層順序,也就是Next動畫的Layer會與原動畫一致

也就是說SHP碎片Next一個SHP動畫依然會按碎片的參數運動,並且按碎片碰撞等邏輯結束播放

而一個SHP動畫Next成一個SHP碎片那麼這個碎片的參數不影響該動畫繼續按常規SHP動畫播放

DetailLevel =

為此動畫的視覺效果所需級別。如果此標誌的值高於當前遊戲視覺細節級別則圖像不顯示。

UseNormalLight =

如果被設置為yes,那麼動畫將一直以100%的亮度播放(即使此時屏幕由於閃電風暴超級武器變暗)。

YSortAdjust =

指定動畫的YSort調整值,該值用於調整動畫與動畫、動畫與單位等的遮擋層次關係,YSort越高的對象越靠近屏幕,顯示得越靠上層

ZAdjust =

指定動畫的 ZAdjust 調整值,該值用於調整動畫與特定類型圖像的遮擋層次

這些對象包括建築、地形對象、覆蓋物、地形,只有它們會留下 Z 緩衝

也就是動畫自身的 Z 實際上用於處理動畫與這些對象的遮擋關係,動畫之間的遮擋和動畫與其他類型對象的遮擋則是使用 YSort 與 Layer 控制

負值代表層次更高,例如降低 ZAdjust 的值會先後被地面擋住 -> 在地面之上但被樹擋住 -> 在樹之上但被橋梁和懸崖擋住 -> 把電力和「主要」這類文字框都擋掉

不過這不會不影響 sidebar,因為 Z 緩衝並不覆蓋屏幕右側 168 像素和屏幕下方 32 像素(即側邊欄與底邊欄所在)的區域

Z 深的取值範圍是 0-65535,而 ZAdjust 是對對象原本一般為 32768 的 Z 深進行調整,最後仍落在這個值域內

不同的對象擁有不同的默認 Z 深調整值,例如建築額外 -2,其他對象也基本是此值,不附著於建築的動畫額外 -50

由[General] -> NukeTakeOff=創建的核彈尾煙動畫硬編碼 -100,Ares0.2已解除硬編碼

由[Warhead] -> AnimList=創建的彈頭命中動畫硬編碼為 -15,PhobosBuild49已解除硬編碼

對於 Z 的空間概念可以見 RA2DIY 論壇這個帖子 https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=24951 中的坐標系

簡單說當空間中一個物體向西北方向(屏幕正上,實際上是在遠離屏幕)移動了 1 個像素,那麼其 Z + 1

如果空間中一個物體向正上方向(也是屏幕正上,但實際上更靠近屏幕)移動了 3 個像素,那麼其 Z - 1

建築可以使用 Flat=yes 強制使用第一種,覆蓋物則可在 rulesmd.ini 中使用 DrawFlat=no 來取消使用第一種

對應帖子中的 SVG 圖形

紅色平行線是兩個不同 ZAdjust 層級的視平面

藍色實線是一個地面單元格沿視角上方向(西北)的對角線

綠色線條是視覺上某點在空間中的延伸方向,垂直於視平面

從視平面 ZAdjust 1 實線部分右下角位置向西北移動 256*√2 Lepton 相當屏幕視角向上移動了 30 個像素,抵達視平面 ZAdjust 2,Z + 30

從視平面 ZAdjust 2 紅綠藍三條虛線交接處向上移動 768*√2/√3Lepton 即屏幕視角向上移動了 90 個像素,抵達視平面 ZAdjust 1,Z - 30

對於使用壓縮 Shape 格式的建築本體則將上述 ↑1/↓3 + 1Z 的默認算法換為用 buildngz.sha 進行調整

這種情況下的工作方式是對於每個像素減去 buildngz.sha 中對應位置像素的顏色色號值來獲取其 Z 深

也就是如果不使用 buildngz.sha 而是使用原 ↑3 - 1Z 的處理方式那麼相當於使用了一個相同色號全部橫向排布並且從上往下色號遞減(減的更少,結果更大)的 buildngz.sha

需要注意的是由於一個 Shape 的色號只有 0-255,因此 buildngz.sha 的調控效果也受限於原 Z-0 到原 Z-255 之間,估計是 WW 覺得對於當時 1024 * 768 解析度而言足夠了

對於 buildngz.sha 與建築 *.shp 的對齊問題可以使用建築上的 ZShapePointMove 來控制,建築上的 NormalZAdjust 也可以在此之外繼續調整偏移值

對於每一個 tmp 類文件(不包括改後綴的 *.shp),其除顏色部分外自帶一個 ZAdjust 部分,相當於 buildngz.sha 的功用

原版下覆蓋物不遵守 ZAdjust,Phobos已修復

YDrawOffset =

填數值。可以改變動畫顯示時在豎向偏移多少個像素,不影響動畫實際坐標只影響繪製,正值向下,負值向上,對YSort似乎有影響,但仍可調整YSortAdjust輕鬆解決

Phobos添加了與之對應的XDrawOffset用於控制橫向偏移,詳見說明書

AltPalette =

如果被設置為yes,那麼動畫將會使用unittem.pal,unitsno.pal和uniturb.pal作為調色盤進行描繪,而不是使用anim.pal作為調色盤

會導致圖層位於最頂層(甚至黑幕之上)並且始終恆亮不跟隨閃電風暴和心靈支配導致的地圖光照變化,Phobos已修復前者,允許定義後者

用於原本使用unit色盤的有所屬色動畫原版下會變成強制使用[Color]列表第一個來Remap,Phobos已修復

AnimPalette =

如果被設置為yes,那麼動畫將會使用anim.pal作為調色盤進行描繪,而不是使用unittem.pal、unitsno.pal和uniturb.pal作為調色盤,優先級低於上一句

與上一句一樣都用於默認色盤不正確的動畫對象強制指定色盤

Ares已經允許Animation對象使用[Animation] -> CustomPalette=<filename with .pal extension>來自定義色盤,詳見Ares說明書

TerrainPalette =

如果被設置為yes,則建築會使用地形調色盤isotem.pal、isourb.pal和isosno.pal。尤里的復仇中還包括isodes.pal、isolun.pal和unitubn.pal

ShouldUseCellDrawer =

用於建築動畫,決定動畫是否使用其所附著單元格上對象的色盤,也就是使用建築的色盤,默認yes

因此 Ares 引擎想要为建筑动画独立使用 CustomPalette=xxx~~~.pal 定义色盘需要先把该句禁用

Palette =

该【单位】使用哪个色盘,填名称,自动匹配气候对应色盘,而不需要像Ares的CustomPalette一样使用~~~替代

例如Palette=unit程序會去找unittem、unitsno、uniturb、unitdes、unitlun、unitubn這6個.pal文件

雖然原版就有這個語句並且存在使用(自由女神)但是WW在程序中硬編碼了全局只能能有1個單位使用,超出則拋出7771F46F

Ares已解除該限制,可任意使用,並添加CustomPalette用於指定Animation的色盤

需要注意的是間諜偽裝效果並不能切換成被偽裝目標所用的色盤,Phobos已修復

自定義色盤功能無法為圍牆類覆蓋物(OverlayType)正常使用,Phobos已修復

Phobos將該語句擴展至Voxel=yes的單位和地形對象(TerrainType),詳見拓展引擎說明書,如果你獲得本文檔的同時沒有配套這一文件,說明你的文檔並非從原正式發布渠道獲取,而是已經被第三方未經許可拆分修改過的

一些關於單位色盤的基礎知識:

對於單位素材製作而言:

1 號和

208-239號色

由於Westwood在TS中原定作為氣候色而RA2中僅有unitsno.pal還保留著208-239號作為建築雪層的顏色

因此如果你使用了那麼在非雪地氣候下它們會使用對應氣候的顏色,而unittem等色盤這些色號被刪除了,使用252,0,252號色的品紅色占位,於是你Ingame會看到一坨品紅色

16- 31號色是所屬色

雖然色盤中是紅色但實際上會根據所屬方所選擇的配色方案改變顏色

例如原版戰役中蘇軍為紅色盟軍為藍色尤里為紫色蘇軍友軍為棕色或橙色盟軍友軍為綠色或青色

240-254則是常亮色

不跟隨地圖光照的亮度不同而變化,始終恆亮

因此一些白色建築閃電風暴中出現雜色點往往就是錯用了240號的白色

但是因為其恆亮特性因此作為燈光部分使用是非常合適的

你也可以自己補全unit[tem|urb|des|lun|bun].pal中的208-239號色,作為你自己MOD中的氣候色

當然,在現代拓展引擎例如Phobos中已經將原版的建築自定義色盤解鎖並拓展到了載具

因此你也可以自己做一整套的色盤為不同載具使用

不過由於Voxel素材在Ingame環境下每個不同方向使用的具體色號表現也受到原版voxels.vpl這一文件的影響

而现代公版拓展引擎中暂时还无法自定义vpl,因此最好保持类似原版unit~~~.pal中的色号排布形式,或者自己制作自用的vpl确保自己的vpl与pal能够正常共同使用即可

簡單說就是把同類相似的顏色排在相近的半列中

事實上色盤保存時顏色值會/4來保存進入遊戲後程序再*4來使用,因此會有一個255,0,0->63,0,0->252,0,0的過程

也同樣的單色色盤無法羅列0,0,0-255,0,0的完整區間,哪怕按梯度生成後再打開也會發現存成了4位使用同一顏色的結果

當然,對於AlphaImage與buildngz.sha這種實際上色號僅用於相關計算並不實際使用色號對應顏色的邏輯而言並不會受到影響

IsVeins =

TS殘留泰伯利亞藤蔓相關邏輯,已廢棄

殘留效果是令動畫使用unit色盤並映射觀察者的所屬色,就像原版圍牆(覆蓋物)和NukeMaker召喚來的NKMSLDN那樣,屏幕前的玩家所使用的是哪個顏色它就映射成哪個顏色

對於擁有Tiled=yes的動畫會無視這個邏輯

此外對於UseNormalLight=no的常規動畫如果使用這個邏輯那麼無法正常跟隨地圖光照的亮度

Rate =

決定動畫的播放速度。數值越大代表播放速度越快

這個數值以900為被除數

例如300代表遊戲將判定動畫每幀持續900/300=3幀時間。

當Rate=X 如果900/X不是整數 幀時間則自動去尾

舉例:301和450都為2幀 451和900都為1幀

如果Rate > 900那麼會導致動畫一直卡在第1幀

RandomRate =

決定動畫的播放速度在這兩個區間中獲取,算法同Rate

Layer =[surface|ground|air|top|none]

決定動畫在哪個層上播放。「Top」意味著在所有之上「Ground」意味著戰場。 動畫默認 air

此處 none 屬於特殊值,效果為不進行繪製

還有一個 underground 層,但無法使用該語句指定

此外 AltPalette=yes 也會影響繪製層級

對於非動畫對象的 Layer 有一套固定規則,

例如Locomotor=DropPod/Rocket時始終為 air,

對於Locomotor=Fly的只要高度高於0即為 top,

對於Locomotor=Tunnel鑽地時為 underground,地面行駛為 ground

對於Locomotor=Jumpjet升空前為 ground,高於空地判定閾值(208)即視為空中單位後若當前實際高度高於其JumpjetHeight則為 top 否則為 air

Surface =

TS殘留無效,該動畫是否位於 ground 層而非 air 層,RA2中已經換用 Layer 來控制

雖然標籤名是 Surface 但實際上這個語句在 TS 中指定的就是 Ground 層而非 Surface 層

Start =

指定動畫的起始幀。默認 0

如果圖像是由另一個動畫Next調用的,那麼Next出的圖像一開始的Start會*2計算

從 0 開始,負數可用但因為沒有對應幀因此沒有播放到首幀時始終沒有圖像,需要經過 1-Start 幀後才會出現圖像

End =

指定動畫結束幀相對起始幀的偏移量

例如Start=5而End=7那麼會從Start指定的幀播放到Start+7幀,而非從Start播放到End

也就是說僅在Start=0的情況下End才能代表播放到從 1 開始的第幾幀,此時才能充當結束幀的序號指定語句用,因為這種情況下結束幀的幀序號與所播放的幀數才是對應的

如果 End 為負數,那麼僅在 LoopCount>1 且 LoopStart+1<Start+End 的情況下才能達到 Start+End 所指向的幀

LoopStart =

指定動畫開始循環的幀序號。這和Start=不同。遊戲會從Start=那一幀開始播放,一直到LoopEnd=那一幀停止,然後從LoopStart=那一幀繼續播放。

從 0 開始,負數可用但因為沒有對應幀因此沒有播放到首幀時暫時沒有圖像,需要經過 0-LoopStart 幀後才會出現圖像

LoopEnd =

指定動畫循環的結束幀。如果播放到LoopEnd時尚未滿足LoopCount=所指定的循環次數,它將會跳到LoopStart=那一幀繼續播放。

在最後一次跳轉後從LoopStart繼續播放到Start+End的那一幀停止

從 1 開始,負數值相當於給 LoopEnd 指定了 End 的值

LoopCount =

指定動畫循環的次數。默認1

負數值代表無限循環。

上述五句具體算法在這裡不好展開,這裡給出一個整合版本https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=25316

並附贈了一個輸入上面五句後輸出動畫的[是/否被Next]下[從(0/1)開始計數的(開始/結束/循環開始/循環結束)幀序號/總幀數]的在線計算器

RandomLoopDelay =

動畫隨機循環的延遲,單位為幀。動畫必須循環。從兩個值之間隨機選擇延遲。

默認 0,0

在TS中這個邏輯會導致RE

Reverse =

使該動畫反向播放,包括半透明漸變。典型應用:坦克碉堡進出動畫

不要給單位DeployingAnim的動畫依靠這句來假擬undeploy時反向播放DeployingAnim那樣的效果!!!

Ares添加了Convert.Deploy的部署變形後總有人用這個邏輯模擬原版DeployToLand那種變形

但由於這是A和B兩個單位互相部署變形來轉換,而非【反】部署從UnloadingClass的圖像換【回】到Image的圖像,自然沒有Undeploy反向播放DeployingAnim的效果

於是就常常有人偷懶註冊一個Image=DeployingAnim=的動畫搭配Reverse=yes來實現反向播放

然後就栽進坑裡了https://www.bilibili.com/opus/746524573912006658

*這裡的DeployingAnim特指rules(md).ini中的[TechnoType] -> DeployingAnim=<animation>而非art(md).ini中的[BuildingTypeArt] -> DeployingAnim=<filename, excluding the .shp extension>

PingPong =

此代碼指定在完成循環後動畫是否會反轉,對應的由於需要先正播一遍再反向播放所以總幀數會翻倍

如果設置yes,則動畫將向前播放至LoopEnd定義的幀,然後它將從LoopEnd反向播放到LoopStart。

如果LoopCount=-1,動畫將重複向後和向前播放的循環

該語句有 Bug,不建議使用,遠不如開 SHP Builder 用輪椅工具一鍵生成反向幀序列的 shp 文件替代來的安全

IsFlamingGuy =

該動畫為火人動畫 需要配合RunningFrames=使用 否則ie

會讓動畫在播放期間移動,當距離水域只有3格時會直奔向水中然後直接進入死亡幀

動畫播放時長實際上不受Rate和LoopCount影響

火人移動會自動避開障礙物,如果在空中生成也會立即刷到地面繼續移動(類似地面步兵尋路)

RunningFrames =

火人動畫的奔跑幀數,可將火人動畫類比shp載具來理解,從第1幀開始8個方向各RunningFrames數量的幀作為奔跑幀,然後是8向通用的1面死亡幀,以及一半「影子幀」

Tiled =

使該動畫向上至屏幕頂端繪製一長串 看起來向從天而降的光束炮

此時從上往下把素材連到播放位置,高度間隔由第一幀像素排布決定,見https://www.bilibili.com/opus/577397012226752341

也就是一個Shape畫布高度全填滿的素材會從屏幕頂端連到動畫播放位置,而Tiled=no的動畫因為Shape的中心在1/2高度處於是會在播放位置之下露出1/2

強制使用anim色盤,Phobos已解除該限制

ShouldFogRemove =

在戰爭迷霧下是否不繪製該動畫,默認yes

是戰爭迷霧,不是地圖黑幕

HideIfNoOre =

如果觸發此動畫的單元格里沒有礦石類型的覆蓋物,則動畫將不會繪製

不過它甚至不檢查單元格內那個礦石類型覆蓋物的生長程度,Phobos已允許設定

與此相同的暫停繪製效果同樣出現在「顯示隱藏對象」所用的[General] -> Behind=動畫上

SpawnsParticle =

動畫結束後生成的粒子,YR中加入,用於病毒狙擊手擊殺步兵

是粒子,不是粒子系統,要生成粒子系統請用動畫掛彈頭生成

NumParticles =

動畫結束後生成多少個上面指定的粒子

實際上這個邏輯很多時候不如用動畫掛傷害調用動畫彈頭上的Particle=設定的粒子系統來刷粒子好用,不過倒是更簡單寫起來方便

碎片

shp碎片的本質是動畫,如ts的流星和建築爆炸時候飛出來的東西都是碎片。和rules里的vxl碎片相似

Bouncer =

為yes時判定此動畫為碎片

IsMeteor =

為yes時判定此動畫為流星碎片,將會從天而降,可獨立於Bouncer使用,同時強制水花動畫使用[General] -> SplashList=最後一項

Z<0時在上方生成,Z速度沿Z軸負方向,XY將在NE-SW線為底邊以西北(↑)的直角三角形範圍內隨機選取

Z>0時在下方生成,Z速度沿Z軸正方向,XY將在NE-SW線為底邊以東南(↓)的直角三角形範圍內隨機選取

也就是說一個經典(Z<0)的流星碎片如果生成位置與命中位置不同(例如由一個在空中播放的動畫TrailerAnim刷出Meteor)

那麼這個Meteor會從屏幕上方飛來,穿過原動畫的位置,然後落到原動畫播放位置正下方的東南一側(↓),無論如何無法落到原動畫西北(↑)一側

MaxXYVel =

碎片在平面上的速度,不得為0否則崩潰,同樣大小的值寫正數負數沒有區別,默認 15.0

常規碎片本就方向隨機,正負就算有意義也不影響

流星碎片無論正負都只會生成自原位置SW-NE一線NW一側的上方(MinZVel為負)或SE一側的下方(MinZVel為正)

MinZVel =

碎片豎直速度的最小值,正數為向上飛再落下,負數直接落下,默認 3.5

對於流星碎片決定了其初始生成高度,正數從下方生成,負數從上方生成

ExpireAnim =

碎片爆炸動畫。可以是另一個碎片的名字,畢竟Shape碎片本質就是Animation

掉入水中會強制播放[General] -> SplashList=第一項作為落水動畫,空中播放結束不會觸發

Damage =

被砸到的傷害數值

DamageRadius =

傷害範圍,單位Lepton,用於對單個格子內的範圍控制,然而基本用不到,多格範圍用彈頭的CellSpread計數

Warhead =

碎片撞擊殺傷的彈頭,很多時候不如往ExpireAnim或BounceAnim的非碎片動畫上掛個傷害好使

Spawns =

撞擊產生子碎片類型

實際數量是從 0 到 SpawnCount 的區間中生成兩個數字,然後將它們相加

SpawnCount =

子碎片數目

LoopStart =

LoopEnd =

LoopCount =

RandomRate =

和前文常規動畫的一樣,搭配Image控制碎片的圖像

*注意:如果碎片有Image=的設定,那麼UseLineTrail相關的參數從Image=的節中讀取,而不從這個碎片下面讀取

TrailerAnim =

和Trailer一樣,只不過用於碎片(動畫)的尾煙,原版下會丟失所屬,Phobos已補全這部分所屬鏈,Kratos已補全所屬鏈

TrailerSeperation =

和 SpawnDelay 一樣,只不過用於碎片(動畫)的尾煙

應用:可用此代碼連接兩個動畫,可在一個固定動畫上掛一個碎片作為尾煙,達成「碎片噴泉」的效果

注意:該語句按動畫生成時間計算間隔,但不必然生成動畫時長/間隔向下取整後的數量,會多生成一個或少生成一個

默認值為0,所以如果用了 TrailerAnim 則必須手動指定 TrailerSeperation 否則崩潰

IsTiberium =

yes時開啟下面兩句

TiberiumSpawnType =

碎片落地產生的覆蓋物,例如寫產生礦的種類GEM01就是晶礦,僅Shape碎片有效,Voxel碎片只能生成[Tiberiums]的第一個礦石類型其Image所對應的覆蓋物對象

非礦石類型會在覆蓋物註冊表擁有一個隨機偏移,也就是並不能固定刷出某類非礦石覆蓋物

TiberiumSpreadRadius =

產礦範圍,單位lepton,有效值[0,4]

Shape碎片只能1層,最大周圍3x3範圍挖掉中心的碎片落點所在格,Voxel碎片強制1x1隨機層數(生長階段)

然而寫一個大於4的值程序依然會去進行計算,所以寫一個巨大的值值只會讓遊戲卡一下,然後依舊只生成3x3範圍的礦

礦石生成位置與礦石生成範圍強相關,下面「/」處為碎片落點,正上方為正北(屏幕右上)方向,數值代表語句達到此值後增加的產礦單元格

NW← | →NE

1 | 0 | 1

2 | / | 2

3 | 4 | 3

一些老詞典中錯拼的TiberiumSpawnRadius和Westwood注釋掉的TiberiumRadius實際上對應的實際語句均為本句

Elasticity =

碎片彈性,越大越強。SHP碎片實際無效,僅可用於開啟BounceAnim,默認 0.8

BounceAnim=

彈跳動畫,雖然SHP碎片實際彈不起來,但仍需要Elasticity>0開啟本句

上兩條詳解見shp碎片彈跳http://bbs.ra2diy.com/forum.php?mod=viewthread&tid=14036

By: Xgamer

Red Alert 2 art.ini 教程

翻譯:小遙指揮官

審核,糾正 MK

最後修訂日期20241106by九千天華