rimworld吧 关注:293,241贴子:5,362,226

回复:攻击、命中、伤害机制的知识整合与代码解读

只看楼主收藏回复

(7)独特类型、毒素积累、气体
1.击昏
每点击昏伤害会造成0.5秒的击昏效果
每点EMP伤害会对机械体造成0.5秒的击昏效果,但多次EMP攻击的伤害无法叠加
关于EMP伤害的细节可以看第⑦号链接。
击昏伤害与EMP伤害不受各种减伤易伤效果的影响。
2.熄灭
每点熄灭伤害降低一火焰大小,降低后火焰大小<10则火焰消失。
受到熄灭伤害的单位都会获得阻燃泡沫状态,持续15秒。
3.气体
I.一般制造致盲烟雾会使周围4.9格内充满烟
致盲烟雾效果见前文远程命中
II.(生物技术DLC)所有产生毒气的爆炸都会在半径内充满毒气,如引爆毒气弹为4格半径,毒气手榴弹、毒气弹发射器为1.9格、毒气弹陷阱为8.9格。(每格充满需要255点毒气)
有毒垃圾被外来伤害时,将产生(6*堆叠数量*实际伤害量)点毒气。
发射毒气迫击炮会在落点留下弹壳,10秒内每半秒释放255点毒气,留下的弹壳500秒后消失。
毒气背包激活后12.75秒内每半秒释放450点毒气。
III.尸体腐烂后每4.16秒释放(52*体型*人尸)点腐烂气体,是人类尸体时人尸=115%,否时100%。
IV.每格致盲烟雾平均每秒消散1.47%点,毒气1.1%点,腐烂气体1.47%。无论室内室外是否有屋顶都无法改变消散速度。
V.致盲烟雾不会扩散,每格毒气和腐烂气体平均每秒判定1.875次,浓度<6.67%的气体不会扩散。判定时,随机顺序向上下左右四个邻格都扩散一次,如果气体不能通过则扩散失败,浓度相差13.3%及以上的两格的浓度平均化。
VI.暴露在浓度≤19%的毒气中时获得较轻症状。20%≤浓度≤49%中等,50%≤浓度≤100%严重。拥有完全抗毒肺、毒素免疫基因或佩戴毒污面具时无视这些效果。

VII.毒气无法被屋顶保护,生物每暴露在毒气中0.83秒都会增加(2.3%*浓度*(1-有毒环境抗性)*(1-毒素抗性)*(随机85%~115%))点中毒,中毒(极重)阶段时中毒速度降为0.25倍。

VIII.生物暴露在腐烂气体中时,每秒都会增加(5%*浓度*(1-有毒环境抗性))点尸瘟暴露,未在腐烂气体中时每天减少15%,尸瘟暴露≥50%后还暴露在腐烂气体时有概率得肺瘟,拥有排毒肺或完美免疫基因可无视这些效果。

5.中毒
每点毒咬、毒击伤害造成1.5%中毒,每点渗毒枪伤造成0.65%中毒。
实际中毒量还要再除以体型,乘以毒素抗性
这三种中毒伤害在动物觅食时不会使猎物中毒。

具体影响可见wiki(第⑧号链接)
6.活着的生物每4.16秒产生(1.25*体型*人因)点热量,是人类时人因=100%,否则=60%
(DamageWorker_Extinguish、AddGas、GasGrid.Tick、CompReleaseGas.CompTick、HediffComp_SeverityFromGas.CompPostTick、RotStinkToSpawnForCorpse)


IP属地:天津16楼2023-01-15 15:24
收起回复
    就这些了,还是边写边添了不少不相关的内容


    IP属地:天津17楼2023-01-15 15:27
    收起回复
      2026-05-22 12:03:20
      广告
      不感兴趣
      开通SVIP免广告
      很久没看到机制研究帖了,赞


      IP属地:河北18楼2023-01-15 15:36
      回复
        妈耶,写了这么多


        IP属地:安徽来自Android客户端19楼2023-01-15 16:11
        回复
          好帖


          IP属地:湖北来自手机贴吧20楼2023-01-15 17:15
          回复
            环世界的一颗新星,冉冉升起了前些日子我在B站和别人(一个玩得还算不错的,算是熟人)闲聊你的时候,有人直播说你玩灵能是花里胡哨,没啥用,我当时也没说什么;我这些日子用你视频里的无限隐身和倒地盾蝽用得老香了,而且受你启发开始研究的交易价格改善,也算是小有成果。本来以为今天是平平常常的一天,结果你这给我来了发反粒子我去!今天发的这些我上班摸鱼慢慢看23333


            IP属地:黑龙江22楼2023-01-15 22:36
            收起回复
              膜大佬,这不给加个精


              IP属地:天津来自Android客户端23楼2023-01-16 00:04
              回复


                IP属地:重庆24楼2023-01-16 00:17
                回复
                  2026-05-22 11:57:20
                  广告
                  不感兴趣
                  开通SVIP免广告
                  太强大了!


                  来自Android客户端25楼2023-01-16 01:26
                  回复
                    视线总结出来的规律与代码实际实现其实不太一样,虽然规律也是能用的
                    代码:
                    1.数终点与起点横竖轴上分别差几个格子,像图中两个终点都是差1个横格,3个竖格

                    2.计算K=(横差-竖差)*2,像这俩就是负四
                    3.从起点开始检测,向着终点走一格,当K>0时横着走,K<0时在竖轴上走。K=0时,如果终点在起点的东面或正北方向,就直接往东走一格,如果终点在起点的西面或正南方向,就往北或南走一格。
                    像一开始K=-4,所以向北或南走,终点在北面,就往北走。

                    4.如果是横着走了,K就减(竖差*4)。竖着走了,K就加(横差*4)。
                    像上图中向北走了,K就加4,K=0。
                    5.检测走到的格子上是否有填充率100%的建筑,如果有,就是视线被阻挡。没有就可以回到第3步骤,直到走到终点。
                    开始走第二次时,K已经等于0,这时就出现了视野不对称的分歧,像东边的终点在起点的东面,于是向东走,K减12。最后路途如下:

                    而左终点,在起点的西面,于是向北走,K加4,这格有墙,所以视线被挡。路途如下:


                    IP属地:天津26楼2023-01-17 11:16
                    收起回复
                      rw教科书还行,多来点


                      IP属地:中国台湾来自iPhone客户端27楼2023-01-17 12:03
                      收起回复
                        补个死亡和倒地的条件吧
                        倒地的条件是疼痛达到阈值,或移动能力≤15%

                        死亡的条件跟灰机wiki记录得差不多

                        有几点需要补充的:
                        对于机械族,关键身体机能是数据处理、液体过滤、动力供给

                        当单位的所有部位累积了(血量乘数*150)点伤害时就会死亡,注意这个血量乘数不是体型,比如对于人类来说是1,对于战争女皇来说是5.2
                        另外缺失的部位只算一伤害
                        也就是说其实角色还是有一条总血条的,这个血条跟游戏里如下显示的一致。只不过打人类肯定是做不到只把这个血条打光,也就打机械族时太倒霉了才有可能做到

                        像战争女皇打满150*5.2=780点伤害就能杀掉,如下情况已经累积了769伤害,完全没有伤害到身体机能和核心部位

                        再补两拳就直接死亡了

                        当单位因外来伤害而倒地时,如果它不是野人、不属于玩家的派系且与玩家敌对
                        那么它有概率直接死亡
                        对于动物,这个概率固定是50%。对于机械族,概率固定是100%。
                        对于人类,概率=人口调整值*敌人倒地死亡几率
                        其中敌人倒地死亡几率在难度自定义设置中可以查到。

                        人口调整值简单来说就是人越少,上次获得人口日期越久,就越低。当开着死忠难度设置时,这个值也会比关着时低6%左右。这样敌人就不容易当场死亡,方便抓俘虏。
                        当基地等效人口达到20时,关死忠时敌人被补刀概率=92%。人口1时,开死忠时补刀概率=50%

                        细节如下:
                        人口调整值由人口调控系数经过插值得到,如下表:

                        人口调控系数="等效人口"经过插值的P值×"经过日期"经过插值的D值
                        (当P值≤0时,就不用乘D值了)
                        其中人口调控系数、"等效人口"、"经过日期"都可以通过开发者模式查看到。("write storyteller"指令)
                        "等效人口"一般是每个殖民者算1,每个奴隶算0.75,死忠囚犯算0.25,非死忠囚犯算0.5。然后再乘上年龄的相关正比例修正,比如婴儿是0。
                        "经过日期"就是距离上次获得人口日期后经过的天数。
                        插值如下表:

                        (CheckForStateChange)


                        IP属地:天津28楼2023-01-21 15:04
                        收起回复
                          一、天气机制
                          天气会随机持续266.6~2666.6秒,持续时间结束后改变天气
                          当地图上出现火灾或户外温度不适合当前天气时,当前天气的总持续时间会缩短至0.25倍。
                          当出现强制天气影响时,当前天气如果已经持续66.6秒,则立刻改变为此天气。
                          改变天气时,不允许连续同一种天气,必须满足户外温度条件,定居时间<8天时不允许坏天气(旱天雷、暴雨之类的),闪电风暴结束后500秒内不允许降雨降雪
                          然后根据当地的生态系统来决定各天气的权重,按照权重抽选一个天气,改变为此天气。
                          比如热带雨林的权重如下

                          雨雪天气的权重还需根据当地的降雨量进行修正,一般1300mm达到1倍,而雨天在4000mm达到3倍。
                          如果地图上出现火灾,那么所有雨雪天气的权重都变成15倍。
                          当地图上所有火焰的火焰大小总和加上火焰个数*50>9000时,就会判定为出现火灾。

                          (开发者模式weather chances)
                          (WeatherDeciderTick)
                          二、温度交换机制
                          每点热量对于1格房间可以升温1摄氏度,房间内的温度一定是均匀的。
                          参考了英文wiki"Temperature_mechanics"部分
                          每2秒更新一次所有房间的温度:
                          如果房间在地图边缘,或露天区域≥房间格数*0.25,那么温度直接等于户外温度。
                          房间温度交换需要考虑屋顶、墙、特殊建筑,但某种"isdoorway"房间不需要考虑屋顶温度交换
                          ①露天与薄屋顶区域与户外温度计算温差。温差超过100℃时,超出的部分乘5倍。
                          ③露天区域使房间温度变化(8.4%*温差*露天区域占比)
                          ④薄屋顶区域使房间温度变化(0.6%*温差*薄屋顶区域占比)
                          ⑤厚岩顶区域在室内温度≤15℃时,不会产生温度交换。温度>15℃时,与15℃计算温差,使房间温度变化(0.6%*温差*厚岩顶区域占比)
                          ⑥墙体温度交换需要列出所有参与的隔墙格,一般隔墙格就是房间的内表面往外的第二格。如图

                          (开发者模式draw rooms功能)
                          每次随机挑其中五分之一隔墙格(向上取整)。如果隔墙格处于另一个房间,就记录两个房间的温差;如果隔墙格没有处于房间,那么记录房间与户外温差的半值。将这些记录值累加。
                          使房间热量变化(2.04%*累加结果*5)点
                          关于这四种温度交换的具体数据可以在开发者模式查看。

                          (开发者模式show all room stats功能)
                          ⑦对于关着的门,每6.25秒进行一次温度交换。而对于开着的门,则是每0.56秒。对于通风口,是每4.16秒。
                          门温度交换时,先将门的温度变为邻接所有房间温度的平均值。
                          当门或通风口邻接至少2个房间时,其中房间的室内温度会变化[(平均值-房间温度)*建筑系数/房间大小]℃;门的建筑系数=1,通风口的建筑系数=14
                          但室温只能变化到平均值为止,出现这种限制时,计算T=实际变化值/本应变化值,其他房间的变化值乘以T。
                          三、空调的机制
                          如果两端被堵住了,空调就无法生效。
                          每4.16秒空调改变一次两端温度。
                          计算两端的温差,温差=排热端-制冷端温度,此处制冷端温度最高取40。
                          空调使制冷端房间减少[(87.5-温差*67.3%)/房间大小]点温度,负数时不会增温,最多降温至目标温度。
                          使制热端产生(109.375-温差*84.13%)点热量
                          四、其他温控建筑的机制
                          篝火平均每秒释放21点热量,最多加热至28℃
                          蒸发制冷器平均每秒减少11点热量,最多降温至17℃
                          加热器每4.16秒释放87.36点热量,周围温度>20℃时释放的量逐渐减少,直到120℃无法释放,同时最高加热至目标温度。


                          IP属地:天津29楼2023-01-22 11:47
                          收起回复
                            教室旁边的是什么🥵


                            IP属地:云南来自iPhone客户端30楼2023-01-28 08:38
                            回复
                              2026-05-22 11:51:20
                              广告
                              不感兴趣
                              开通SVIP免广告
                              太棒了,解答了我一直以来的许多疑惑


                              IP属地:上海31楼2023-01-28 10:15
                              回复