神州重工mod介紹(上)環(huán)世界/邊緣世界/rimworld/mod介紹

關(guān)于青蛇戰(zhàn)術(shù)狙擊步槍的事情,我這里稍微補(bǔ)充一下,因?yàn)檫@些東西比較復(fù)雜,要結(jié)合代碼才能說得明白。如果大家想要修改的話,用記事本打開對應(yīng)的文件,找到對應(yīng)的語句就可以直接修改。
同時,還希望能有哪位朋友可以在創(chuàng)意工坊上反應(yīng)一下,向作者大大說明這把槍的問題。
當(dāng)然,如果有哪位朋友希望能更深入的研究這方面的問題,我建議使用Notepad++這類更專業(yè)的代碼編輯軟件。它那個界面會比記事本好很多,有一定的代碼校驗(yàn)功能,使用體驗(yàn)會比記事本好很多。
以下先貼出相關(guān)文件、文件夾的位置和名字,方便大家查閱。
神舟重工mod文件夾位置和默認(rèn)文件夾名稱:
X:\……\RimWorld\Mods\2883670795
(所有關(guān)于該mod的文件內(nèi)容都在該文件夾下,正常來說,所有mod的文件夾名稱都是該mod在創(chuàng)意工坊的編號。后面為了目錄簡短,我就默認(rèn)都從這個編號文件夾目錄下開始寫了。)
青蛇狙擊槍物品定義文件位置、文件名和定義語句:
2883670795\Defs\Weapons\Rifles\QBU71.xml
<defName>QS</defName>
青蛇狙擊槍子彈定義文件位置、文件名和定義語句:
2883670795\Defs\Weapons\Projectiles.xml
<defName>Bullet_QS</defName>
青蛇狙擊槍子彈傷害定義文件位置、文件名和定義語句:
2883670795\Defs\ DamageDef\ Damages.xml
<defName>ATB</defName>
麻醉子彈Debuff定義文件位置、文件名和定義語句:
2883670795\Defs \Hediff\ Hediffs.xml
<defName>SMAnesthetic</defName>
以上,一共是4個文件以及當(dāng)中的4處位置。
所謂定義語句是mod文件所定義的東西要在系統(tǒng)內(nèi)有一個唯一的定義名稱,所有關(guān)于這個東西的定義都會寫在這個定義名下面。由于子彈、傷害、buff三個文件內(nèi)還寫了其他武器的相關(guān)內(nèi)容,所以我貼出這個定義名稱語句,方便大家搜索。
同時,為了方便大家理解和修改,需要修改的內(nèi)容,我都按照要查找那個文件位置、定義語句、需要修改的語句原文及附近部分、修改意見或修改后的語句、修改原因,這樣一個順序該大家介紹說明。希望能方便大家的理解。
1. 青蛇狙擊步槍物品定義修改:
文件位置:2883670795\Defs\Weapons\Rifles\QBU71.xml
定義語句:<defName>QS</defName>
需要修改的語句:
<defaultProjectile>Bullet_QS</defaultProjectile>
????????????????????<warmupTime>2.5</warmupTime>
????????????????????<range>53.9</range>
????????????????????<forcedMissRadius>0.1</forcedMissRadius>(問題語句)
修改后的語句:
<defaultProjectile>Bullet_QS</defaultProjectile>
????????????????????<warmupTime>2.5</warmupTime>
????????????????????<range>53.9</range>
????????????????????<!-- <forcedMissRadius>0.1</forcedMissRadius> -->
修改原因:
通過翻譯可知,該語句是讓子彈強(qiáng)行偏移了0.1格。但是這個具體的原因要結(jié)合下一個修改來解釋。這里大家只需要知道語句本意即可。
我的修改方式是把問題語句給轉(zhuǎn)成了注釋,即在需要修改的語句前后分別加上“<!--”和“-->”。這也是很多軟件語言修改的好辦法,方便未來查閱。如果大家嫌麻煩可以直接刪除這一行,效果是一樣的。但是不建議將數(shù)值改得更精確,具體原因在下一個修改里來解釋。
2. 青蛇狙擊槍子彈定義修改:
文件位置:2883670795\Defs\Weapons\Projectiles.xml
定義語句:<defName>Bullet_QS</defName>
需要修改的語句:
???</graphicData>
???<thingClass>Projectile_Explosive</thingClass>(問題語句)
???<projectile>
修改后的語句:
???</graphicData>
???<!-- <thingClass>Projectile_Explosive</thingClass> -->
???<projectile>
修改原因:
通過翻譯可知,這個語句的意思是給青蛇的麻醉子彈做一個類型定義,定義為一種爆炸子彈。這個定義實(shí)際上就是各種炮彈的定義。
換句話說,有這個語句在,青蛇的麻醉子彈被定義為了一種炮彈。結(jié)合上一個修改,就是一種強(qiáng)制偏移0.1格的炮彈。我猜測作者的本意可能是希望把青蛇的麻醉子彈定義為一種1格范圍的麻醉子彈??梢酝瑫r對疊在一起的多個目標(biāo)生效。
然而,不知道是改版還是其他什么原因,在當(dāng)前1.4版的環(huán)世界游戲里,炮彈的命中機(jī)制與子彈不同。目視觀測上,炮彈沒打中就是真的沒打中,但是子彈沒打中,那只是一個動畫效果,是否真的擊中應(yīng)該是按照命中率去計(jì)算的。
所以以上兩個問題語句聯(lián)合起來,經(jīng)常導(dǎo)致青蛇的麻醉子彈打不中敵人。
3. 青蛇狙擊槍子彈傷害定義修改:
文件位置:2883670795\Defs\ DamageDef\ Damages.xml
定義語句:<defName>ATB</defName>
需要修改的語句:
?????<li>
???????<hediff>SMAnesthetic</hediff>
?????????????<severityPerDamageDealt>0.5</severityPerDamageDealt>(問題語句)
??????<victimSeverityScalingByInvBodySize>true</victimSeverityScalingByInvBodySize>(問題語句)
?????</li>
修改后的語句:
?????<li>
???????<hediff>SMAnesthetic</hediff>
?????????????<severityPerDamageDealt>1</severityPerDamageDealt>
??????<victimSeverityScalingByInvBodySize>false</victimSeverityScalingByInvBodySize>
?????</li>
修改原因:
由翻譯可知,兩個問題語句的含義分別是每點(diǎn)傷害帶來的Buff嚴(yán)重程度,以及Buff嚴(yán)重程度是否會受到目標(biāo)體型大小的影響。
先說明一下,青蛇狙擊步槍的基礎(chǔ)傷害為1點(diǎn),傳奇能達(dá)到2點(diǎn)。這些定義是寫在上一個子彈定義部分里的。
這些語句的修改原因以及原本的問題等,需要結(jié)合下一個修改來一起說。
4. 青蛇狙擊槍麻醉子彈Debuff定義修改:
文件位置:2883670795\Defs \Hediff\ Hediffs.xml
定義語句:<defName>SMAnesthetic</defName>
由于這一部分修改內(nèi)容較多,所以我就把整個定義代碼都貼在這里了。
需要修改的語句:
???<HediffDef ParentName="DiseaseBase">
???<defName>SMAnesthetic</defName>
???<label>mechanites anesthesia</label>
???<description>mechanites in the brain. Anesthetic renders creatures unconscious.</description>
???<isBad>false</isBad>
???<initialSeverity>1</initialSeverity>
???<maxSeverity>1</maxSeverity>
???<comps>
?????<li Class="HediffCompProperties_Disappears">
???????<disappearsAfterTicks>15000~15000</disappearsAfterTicks>(問題語句)
???????<showRemainingTime>true</showRemainingTime>
?????</li>
?????<li Class="HediffCompProperties_SeverityPerDay">
???????<severityPerDay>-0.8</severityPerDay>(問題語句)
?????</li>
???</comps>
???<stages>(問題語句,直到</stages>為止的整個部分都有問題)
?????<li>
???????<label>sedated</label>
???????<capMods>
?????????<li>
???????????<capacity>Consciousness</capacity>
???????????<setMax>0.01</setMax>
?????????</li>
???????</capMods>
?????</li>
???</stages>
?</HediffDef>
修改后的語句:
???<HediffDef ParentName="DiseaseBase">
???<defName>SMAnesthetic</defName>
???<label>mechanites anesthesia</label>
???<description>mechanites in the brain. Anesthetic renders creatures unconscious.</description>
???<isBad>false</isBad>
???<initialSeverity>1</initialSeverity>
???<maxSeverity>1</maxSeverity>
???<comps>
?????<li Class="HediffCompProperties_Disappears">
???????<disappearsAfterTicks>45000~55000</disappearsAfterTicks>
???????<showRemainingTime>true</showRemainingTime>
?????</li>
?????<li Class="HediffCompProperties_SeverityPerDay">
???????<severityPerDay>-1.0</severityPerDay>
?????</li>
???</comps>
???<stages>
?????<li>
?????????????<minSeverity>0.98</minSeverity>
???????<label>sedated</label>
???????<capMods>
?????????<li>
???????????<capacity>Consciousness</capacity>
???????????<setMax>0.05</setMax>
?????????</li>
???????</capMods>
?????</li>
???????<li>
???????<minSeverity>0.99</minSeverity>
???????<label>sedative kicking in</label>
???????<painFactor>0</painFactor>
???????<capMods>
?????????<li>
???????????<capacity>Consciousness</capacity>
???????????<setMax>0.9</setMax>
?????????</li>
?????????<li>
???????????<capacity>Moving</capacity>
???????????<offset>-0.5</offset>
?????????</li>
?????????<li>
???????????<capacity>Manipulation</capacity>
???????????<offset>-0.5</offset>
?????????</li>
?????????<li>
???????????<capacity>Talking</capacity>
???????????<offset>-0.5</offset>
?????????</li>
?????????<li>
???????????<capacity>Metabolism</capacity>
???????????<offset>-0.5</offset>
?????????</li>
?????????<li>
???????????<capacity>Sight</capacity>
???????????<offset>-0.35</offset>
?????????</li>
???????</capMods>
?????</li>
???</stages>
?</HediffDef>
修改原因:
?“<disappearsAfterTicks>15000~15000</disappearsAfterTicks>”語句意為在15000tick時間后,麻醉buff強(qiáng)制消失。這個語句本身沒有什么問題,但是時間給得比較短,相當(dāng)于游戲內(nèi)6小時。這個時間……反正我是經(jīng)常不方便抓人的。我覺得還是弄長一點(diǎn)好。所以我改成了接近游戲內(nèi)1天的麻醉時間。
當(dāng)然,這個是否真的能有那么長的麻醉時間,還要看下面這個語句的配合。
“<severityPerDay>-0.8</severityPerDay>”語句意為buff每天的變化程度,這里是指buff每天減少80%的嚴(yán)重程度。如果嚴(yán)重程度將為0%,buff也會消失。所以這個語句與上面那個語句配合起來,保證在buff強(qiáng)制消失時間內(nèi)buff本身不會減少到0%,才能真正讓一個buff維持到強(qiáng)制消失時間。
語句段落“<stages>” 到“</stages>”這個之間的部分是定義在整個buff變化過程當(dāng)中,各階段具體上什么buff。
在原來的語句當(dāng)中,定義是很明確的,就是全過程麻醉,也就是只要青蛇麻醉子彈buff存在,就起到麻醉效果?!?lt;capacity>Consciousness</capacity>”和“<setMax>0.01</setMax>”的意思是Buff的效果是意識的最大值只有1%。顯然中了這個buff的小人肯定是倒地不起的。
但是,也正是這個地方,導(dǎo)致了青蛇狙擊槍的麻醉子彈會打死人。
經(jīng)過我的測試,在目前1.4的版本機(jī)制下,能夠造成傷害的武器,也就是除了原版心靈沖擊槍這種純粹上buff擊倒人的武器外,任何一種武器只要在對目標(biāo)造成傷害后,能夠?qū)е履繕?biāo)倒地。目標(biāo)是否死亡都會按照敘事者的倒地死亡概率設(shè)置進(jìn)行判斷。
也就是說,如果敘事者的敵人倒地死亡率設(shè)置為100%,那么青蛇狙擊槍麻醉子彈奇效后,都會被敘事者判定為死亡。反正,如果倒地死亡率設(shè)置為0%,那么青蛇狙擊槍的麻醉子彈就會起到正常的麻醉效果。
于是,參照VE武器拓展當(dāng)中的非致命武器拓展,我只能給它修改成一個漸進(jìn)式buff。在100%到99%嚴(yán)重程度的時候(對應(yīng)語句<minSeverity>0.99</minSeverity>),麻醉buff不會讓目標(biāo)立即倒地,而是會大幅度減少目標(biāo)的移動速度。從98%嚴(yán)重程度開始(對應(yīng)語句<minSeverity>0.98</minSeverity>),目標(biāo)才會由于麻醉buff失去意識倒地。
這1%的時間放在1倍速的游戲內(nèi),差不多相當(dāng)于現(xiàn)實(shí)當(dāng)中20秒左右。按照計(jì)算應(yīng)該是相當(dāng)于10秒的,可能是我這邊幀率低吧,我當(dāng)時1倍速可能只有30幀左右。
但是這又出現(xiàn)了另外一個問題。
由于青蛇子彈傷害定義里,也就是上一處修改里,青蛇麻醉子彈的buff嚴(yán)重程度是每點(diǎn)傷害只增加buff嚴(yán)重程度50%,并且還會受到目標(biāo)體型的影響。體型越大,中槍后buff嚴(yán)重程度越低。這就導(dǎo)致了大體型動物中槍后,直接進(jìn)入第二階段的麻醉狀態(tài),倒地昏迷,因此又被敘事者判定為受傷后擊倒,代入倒地死亡率判斷。
所以,我只好把前面子彈傷害的部分代碼也做了修改。讓青蛇的麻醉子彈每點(diǎn)傷害都能打滿100%的buff嚴(yán)重程度,并且與目標(biāo)體型不相關(guān)。這就是子彈傷害定義部分需要修改的原因。
這一部分修改比較復(fù)雜,希望這些解釋能讓大家看得懂。
我個人猜測,會出現(xiàn)這些問題,除了mod作者大大測試的時候用的是休閑難度之外,他的本意應(yīng)該是希望青蛇的子彈面對大體型目標(biāo)時容易打中,但是不會麻醉很長時間;面對小體型目標(biāo)時很難打中,但是能麻醉很長時間。
這才有了將青蛇子彈定義為炮彈,并且強(qiáng)制偏轉(zhuǎn)0.1格;將子彈每點(diǎn)傷害的麻醉buff嚴(yán)重程度與目標(biāo)體型大小掛鉤。
然而,環(huán)世界自帶的游戲機(jī)制不支持這個想法,沒有對應(yīng)機(jī)制的設(shè)定空間。如果一定要這么做,我覺得應(yīng)該要寫一個專門的.dll文件才行。
我也考慮過是不是能讓buff變成正向增加的buff,也就是“<severityPerDay>-0.8</severityPerDay>”語句當(dāng)中的值變?yōu)檎龜?shù)。然后buff階段的設(shè)置按照正增長來進(jìn)行設(shè)置。
然而這樣做的結(jié)果,只能是讓大體型目標(biāo)中槍后更久才能倒地,或者是要多中幾槍才能倒地。但是正如之前所說,如果中槍后出現(xiàn)立即倒地的情況,那又會被敘事者代入倒地死亡率計(jì)算,在高難度下還是會打死目標(biāo)。
所以這個辦法也是不行的。就像前面所說,真的想實(shí)現(xiàn)作者大大的目標(biāo),只能專門寫一個dll文件了。
以上就是我個人對青蛇狙擊步槍的研究和修改意見了,我修改之后,確實(shí)沒有在出現(xiàn)打死人的情況了。只是,我這邊雖然沒有打CE,mod總數(shù)也有400個以上。再加上本人水平有限,這件事也過去了幾個月了,如果上文有哪里有錯,或者是由于mod沖突引起的,還請各位大大能夠在下的回復(fù)里批評指正。
同時也希望有哪位大大看到后,能在創(chuàng)意工坊給作者大大留言,說明以上問題。創(chuàng)意工坊界面是有字?jǐn)?shù)限制的,實(shí)在不行可以貼這個文章的鏈接也可以。