机制 (缓更中...)个人数字助手/手机显示的各种信息相关机制详解

-Cyril-

创意者
2018/08/28
30
38
55
大家好我是Cyril,不知道说什么所以开始吧
===================

开局一张图,信息全靠编
225
手机显示的各种信息预览图(甚至看不出哪个对应哪个[贴吧_吐]
绝了,要江12个,可能这坑填不完了我觉得可以填完 👌[贴吧_滑稽]

224
这个是合成图,当普及一下基础知识
PS: 在多人模式中,来自手机的信息会与附近同一团队的玩家共享。 对于合成它的材料物品(魔镜冰镜除外)显示的信息也是如此

===================

时间 - #2楼
天气 - #3楼
月相 - #5楼

渔力 - #6楼
 
最后编辑:

-Cyril-

创意者
2018/08/28
30
38
55
时间
基础知识

白天开始于上午 4:30,而夜晚开始于下午 7:30。
所有新创生的世界都开始于上午 8:15。
显示(参考自中文Terraria WiKi)
时间染发剂简述(来自中文TerrariaWiKi):发色随着一天中的时间改变。从下半夜到早晨是浅蓝色、早晨到中午是绿色、中午到傍晚是黄色、傍晚到上半夜是红色、上半夜到午夜是紫色、午夜到下半夜是深蓝、之后回到浅蓝。颜色非常平滑地随着时间推移而变化。
其他小知识
在内部,时间计数器在黎明和黄昏时都会重置为零。
在白天,计数器可以上升到 54000,而在夜间则只能上到 32400,如果上升到最高值会自动归零。
时间计数器每秒会+60,即为每帧+1。
[其他小知识]时间计数器仅有向上的限制,并没有向下的限制,因此你可以将时间计数器设置为负数
[不确定]在移动版的肉山前(Pre-Hardmode),时间在没有发生事件或没有正在与 Boss 战斗时,时间流动的速度会上升,
初步推测为速度×2(即时间计数器每帧多+1),然而当以上条件有任何不满足时,时间流动速度与其他版本一样。

当时间计数器为负数,会有一些很Interesting的画面效果
508
509
既然有了负数超出控制,当然也有正数超出控制了
只要每帧的时间流速超出了时间计数器的上限,时间计数器就来不及归零了,就可以超出正数时间上限

231
230

特别的知道了也没什么用的知识
当游戏在主界面(既Menu)运行时,并且游戏并不处于多人模式
你会发现太阳和月亮以极快的速度运行着
其实这个也是时间计数器控制的,并且在这种情况下,时间计数器是每帧+86.4

仅需一秒,时间计数器就增加了5184

在主页面等待是永远等不到血月的,除非改了游戏源代码
===================
时间篇章到此结束
如果有需要再补充
 
最后编辑:

-Cyril-

创意者
2018/08/28
30
38
55
(本篇章的一切内容由楼主看着TR源码编写)
天气
基础知识

天气收音机(以及它的合成物)不仅显示天气,还显示风速(不过正常游戏中一般不需要获取风速的数据)
236
这是天气收音机显示的界面

“大部多云”即为天气
“(20 mph西风)”即为风速
如果你想继续看下去这一章,请了解一个数值叫"dayRate"
很容易理解,当时间计数器 > 32400时为60,否则为1

然后就是:"cloudAlpha"
如果游戏状态为服务器模式,cloudAlpha直接等于maxRaining(后面会说这个)
否则当下雨时:
如果cloudAlpha小于maxRaining,则cloudAlpha + 0.0005×dayRate(如果游戏在主页面,这个乘积还要×20),如果增加后大于maxRaining,则cloudAlpha=maxRaining
如果cloudAlpha大于maxRaining,则cloudAlpha - 0.0005×dayRate(如果游戏在主页面,这个乘积还要×20),如果减少后小于maxRaining,则cloudAlpha=maxRaining
如果并没有下雨,则cloudAlpha - 0.0005×dayRate(如果游戏在主页面,这个乘积还要×20),如果减少后小于0,cloudAlpha=0

还有一个:"cloudBGActive"(以下简称CB)
这里引入三个数值:
第一个是n1,n1 = 86400(即游戏中白天+黑夜的时间代表的数值,详见前面说过的“时间”篇章)
第二个是n2,n2 = n1 ÷ 24(将总时间变成“24小时制”)
第三个是n3,n3 = 判断 1 和1+4×cloudAlpha哪个最大,数值选取为两个之中最大的数值

如果CB > 0:
如果CB > 1,则CB - dayRate ÷ n3
(通过了上一条后)如果CB < 1,则CB=1
(通过了上一条后)如果CB=1,且(一分之)1 / n2×2÷dayRate×n3的几率"抽奖"抽中了,则CB = (随机数:最大值为n1×4,最小值为n2×4) × -1
否则(如果CB ≤ 0):
如果CB < 0,则CB + dayRate × n3
(通过了上一条后)如果CB > 0,则CB = 0
(通过了上一条后)如果CB=0,且(一分之)1 / n2×8÷dayRate÷n3的几率"抽奖"抽中了,则CB = 随机数:最大值为n1×3,最小值为n2×2
========计算结束========

关于天气
在TR中,TR将天气划分为了两个部分:雨和云
而由信息栏UI显示的信息中,显示雨的优先度高于显示云的优先度
简单点说就是:如果下雨就显示雨的信息,否则显示云的信息
那么先从雨开始吧
关于雨
TR将雨又划分为了几个部分,
这几个部分主要由游戏里的一个float数值“maxRaining"控制
它们之间并没有对游戏玩法的不同影响,仅仅为了美化而已
Heavy Rain - 暴雨 (当maxRaining > 0.6时显示)
Rain - 雨 (当不满足暴雨的显示条件,且maxRaining ≥ 0.2时显示)

Light Rain - 小雨(当不满足雨的显示条件,且正在下雨(maxRaining > 0)时显示)

那么问题来了,maxRaining啥时候变化啊?
答:

  • 如果游戏进入了主页面,且游戏正处于单人模式 或 世界刚刚创建完毕,maxRaining = 0
  • 当雨停时,maxRaining = 0
  • 当开始下雨(即为下雨开始的那一帧以及当游戏内正在下雨,玩家从主页面进入游戏的那一帧)
    • 当cloudBGActive > 0并且云的数量>150
      • 有1/3的几率,maxRaining=最小值为20,最大值为90的随机数×0.01
      • 如果上面那一条不满足(1/3的几率"抽奖"没抽中)则,maxRaining=最小值为40,最大值为90的随机数×0.01
    • 当上面那条不满足时,如果云的数量>100
      • 有1/3的几率,maxRaining=最小值为10,最大值为70的随机数×0.01
      • 如果上面那一条不满足(1/3的几率"抽奖"没抽中)则,maxRaining=最小值为20,最大值为60的随机数×0.01
    • 当上面哪条不满足时
      • 有1/3的几率,maxRaining=最小值为5,最大值为40的随机数×0.01
      • 如果上面那一条不满足(1/3的几率"抽奖"没抽中)则,maxRaining=最小值为5,最大值为40的随机数×0.01
拓展:关于开始下雨/尝试更改雨的状态的条件
游戏中每一帧有(一分之)1 / 86400÷dayRate×5.5的几率开始下雨/尝试更改雨的状态(比如原来是“雨”,检测了这个发现满足了”暴雨“的生成条件,就转变为”暴雨“)
(所以在这个条件下夜晚最容易下雨,因为夜晚时dayRate最小)
同时当cloudBGActive≥1时,每一帧有(一分之)1 / 86400÷dayRate×5.5×4的几率下雨/尝试更改雨的状态
(以上运行都是在没有下史莱姆雨的情况下进行的)


关于云
TR将云又划分为了几个部分,它们主要由numClouds控制
天气收音机(以及它的合成物)仅在不下雨的时候显示云的状态
Overcast - 阴天 (当cloudBGActive > 0时显示(在这种情况下最容易下雨))
Mostly Cloudy - 大部多云 (当上一个条件不满足,且numClouds>120时显示)
Cloudy - 多云(当上一个条件不满足,且numClouds>80时显示)
Partly Cloudy - 局部多云(当上一个条件不满足,且numClouds>20时显示)
Clear - 清除(官中的鬼翻译 )(当上一个条件不满足时显示)

那么问题来了,numClouds啥时候变化啊?
答:

游戏在决定numClouds时会用到三个基准值:"numCloudsTemp"、"cloudAlpha"(前面有提到过)和"cloudLimit"。
cloudLimit的默认值为200,numClouds的默认值是cloudLimit
numCloudsTemp的默认值是numClouds,cloudAlpha的默认值是0
还有一个值是"weatherCounter",它的默认值为0,但它是决定numClouds时最重要的一个值
游戏采取以下步骤来决定numClouds

  • 有1 / 60的几率,增加numCloudsTemp,增加幅度为-1到2
  • 有50×cloudBGAlpha‰的几率,numCloudsTemp加一
  • 有25×(1-cloudBGAlpha)‰的几率,numCloudsTemp减一
  • 有200×cloudAlpha(注意这个没有BG)‰的几率,且当numCloudsTemp < cloudLimit÷2时:numCloudsTemp加一
  • 有50×cloudAlpha‰的几率,numCloudsTemp加一
  • 有1%的几率,且当numCloudsTemp < cloudLimit÷4时:增加numCloudsTemp,增加幅度为1到3
  • 如果cloudBGAlpha ≤ 0、cloudAlpha = 0且numCloudsTemp > cloudLimit÷2时:numCloudsTemp = cloudLimit÷2
  • 运行了上面的之后,如果此时numCloudsTemp < 0,则numCloudsTemp = 0
  • 运行了上面的之后,如果此时numCloudsTemp > cloudLimit,则numCloudsTemp = cloudLimit
  • weatherCounter减一
  • 运行了上面的之后,如果此时weatherCounter ≤ 0,则numClouds = numCloudsTemp,然后weatherCounter变化,变化幅度为3600到18000
  • 循环(注意以上步骤都是每帧运行一次,即为一秒运行60次)
========运行结束========
关于风速
详见中文WiKi(中文WiKi中关于风的条目中写的与TR源码中写的几乎完全一样)

英文WiKi
其他:游戏同时决定风速"windSpeedSet"和"numClouds",细节是numClouds是在决定widSpeedSet之后决定的(尽管它们都是在同一帧决定的)
WiKi上面还有些细节没有提到,我补充一下:
238
关于上面这一步的具体算法为:
  • 如果 windSpeed < windSpeedSet,则windSpeed增加0.001×dayRate的值。如果在这一步运行后windSpeed > windSpeedSet,则windSpeed = windSpeedSet
  • 如果 windSpeed > windSpeedSet,则windSpeed减少0.001×dayRate的值。如果在这一步运行后windSpeed < windSpeedSet,则windSpeed = windSpeedSet
  • 在上一步运行过后,如果游戏正处于多人模式,或不处于服务器模式但游戏停留在主界面,则步骤不继续运行,同时决定numClouds的步骤也不运行
239
关于上面这一步的运行条件与之前说过的numClouds=numCloudsTemp一样
详细点说就是:

  • weatherCounter减一
  • 运行了上面的之后,如果此时weatherCounter ≤ 0,则:
    • numClouds = numCloudsTemp
    • windSpeedSet = windSpeedTemp
    • 然后weatherCounter变化,变化幅度为3600到18000
所以说,numClouds和windSpeedSet基本上都是每1-5分钟决定一次的
这也说明:风速和云的状态基本上是每1-5分钟改变一次

========本章结束========
补充:
  • Moblie(就是手机版)1.2.12785也存在风速机制
  • 风速机制将会在未来的Terraria: Journey's End里得到升级,将会影响即将加入的落叶特效,
 
最后编辑:

-Cyril-

创意者
2018/08/28
30
38
55
月相
基础知识

月相由六分仪(以及以它为合成材料的物品)显示,如果没有六分仪,可以通过查看油漆工目前出售哪副绘画作品来确定月亮处在哪个弦月中
255
这是六分仪显示的界面(突然改成了国服1.3是因为lz用手机更贴:razz:)
关于显示的图标也有一些细节:
如果当前正处于血月或日食,则显示的图标会被替换为"血月"版本,特征为图标月亮是血红色的
否则为正常版本(就是图上的那个版本)
显示的文本自然无需说明了,就是月相
========机制说明========

关于月相
当游戏检测到为白天(是的,月相是在白天变化的)且未进行"白昼更新",游戏会增加一次"月相编号"
那么"月相编号"是什么呢?
实际上月相编号0-7对应着每一种月相:
#0 满月 - Full Moon
#1 亏凸月 - Waning Gibbous
#2 下弦月 - Third Quarter
#3 残月 - Waning Crescent
#4 新月 - New Moon
#5 娥眉月 - Waxing Crescent
#6 上弦月 - First Quarter
#7 盈凸月 - Waxing Gibbous
关于月相编号的运行方式:

  • 检测是否已进行"白昼更新",如未进行,则开始进行
  • "月相编号"加一
  • 如加一后"月相编号" > 7,则"月相编号"设为0
  • 继续更新其他项目,一切更新完后,"白昼更新"设为进行完毕,并等待下一个白天开始再进行
========运行结束========
然后貌似没啥好说的了(因为这就是关于月相更替的全部内容了)
更多与本篇目相关的资料请看中文WiKi英文WiKi
========本章结束========
 
最后编辑:

-Cyril-

创意者
2018/08/28
30
38
55
(引用:钓鱼 - 官方中文 Terraria WiKi)
渔力
基础知识

渔力由渔民袖珍宝典(以及以它为合成材料的物品)显示
510
这是渔民袖珍宝典显示的界面
PS: 当使用的鱼饵是“松露虫”时,显示的信息为“警告!”

========机制说明========


上钩概率
每帧 = 每1/60秒!
(PS:以下表格搬运自泰拉瑞亚中文WiKi, 稍作改动)

钓鱼时,有一个隐藏的捕获计数来追踪捕获前的进度。计数从 0 开始,随着时间推移增加。当它超过 660 时,有 ((75 + 渔力) / 2) % 的几率鱼会咬钩,在渔力达到 125 时几率达到上限。随后计数会重置为 0,无论是否有鱼咬钩。
捕获计数在每中增加的数值由以下因素决定:

  • 默认每帧增加 1-2 点(平均每帧 1.5 点)
  • 每帧60 分之 1 的几率 增加60 点(平均每帧 1 点)
  • 每帧增加 (渔力 / 30)
  • 每帧有 (渔力/ 3)% 的几率额外增加 1-2 点
简单来说,渔力越高鱼上钩的频率越快,但是脸黑也是没有办法的事情[贴吧_滑稽]~

渔获品质
渔获有 6 个不同的渔获品质位,各自有相应的概率:
(PS:以下表格搬运自泰拉瑞亚中文WiKi, 稍作改动)
捕获品质概率
丰富默认渔获(可理解为备用)
常见(150 / 渔力) 分之 1,上限为 1/2
不常见(300 / 渔力) 分之 1,上限为 1/3
罕见(1050 / 渔力) 分之 1,上限为 1/4
非常罕见(2250 / 渔力) 分之 1,上限为 1/5
极度罕见(4500 / 渔力) 分之 1,上限为 1/6
以上公式里括号内的值(即概率的分母部分)是向下取整的。

当生成新的鱼时,各个渔获品质是互相独立的进行判定的。例如,不常见、罕见、非常罕见可能全部成功通过掷骰判定,与此同时常见与极度罕见的掷骰判定则失败。随后,游戏根据哪些品质成功通过判定以及诸如高度与生物群落之类其他因素来生成鱼。

成功通过判定的渔获品质中最高的那个会优先于更低的那些渔获品质位。然而,并不是每个渔获品质位上都一定有可捕获的鱼;在这种情况下,游戏将继续检查更低的那些渔获品质位。成功通过判定的高渔获品质位并不会向下转为更低的品质位。例如,如果罕见品质的判定成功通过,但却并没有可捕获的罕见鱼,游戏会继续检查不常见品质的判定是否成功通过;如果不常见品质的判定失败,就会继续检查常见品质的结果。

在水中钓鱼时,如果极度罕见品质成功通过掷骰判定,则一定会首先对几种特定渔获(蛙腿、气球河豚鱼、和风鱼,依以上顺序)进行检查判定。如果这些检查全部未成功,游戏才会继续对生物群落特产鱼进行检查。

如果其他检查全部失败并且是在水中钓鱼,默认会捕到丰富品质的鱼。


宝匣
有一个独立的掷骰判定用于决定捕到的是否是宝匣,默认几率是 10% (如果宝匣药水处于激活状态则为 20%)。如果渔获的品质是极度罕见或非常罕见,会生成金匣;渔获的品质是罕见会生成生物群落特产的宝匣(如果有,否则会生成铁匣);渔获品质为不常见会生成铁匣其他情况下则是木匣。 在熔岩或蜂蜜中钓鱼永远不会生成宝匣。[贴吧_吐]

堆叠大小
可堆叠的鱼(即炸弹鱼和寒霜飞鱼)在生成时的堆叠大小是基于渔力变化的。这种变化可以相当大,较高的渔力提高了生成时的最小堆叠大小,同时显著提高了最大堆叠大小。

========本章结束========

本篇大部分内容来自Terraria WiKi(似乎我成了搬运工...[贴吧_满头大汗]),一些内容被我修改地更加通俗易懂了,那么就这样吧!
WiKi还是很有严谨性的
 
最后编辑:
  • 投币
反馈: 小太

-Cyril-

创意者
2018/08/28
30
38
55
不同天气在游戏中的表现有什么不同吗?比如说暴雨(HeavyRain)和雨(Rain)之间的区别是啥,暴雨的雨点更密集?
只有显示上的差别,如云和雨更加密集,“太阳光”更暗等
 

-Cyril-

创意者
2018/08/28
30
38
55
这里吱一声,我没死,只不过一直在忙着做Mod...更新也无限期延期,但是有朝一日我一定会回来更新的!
我来了 -2020.2.16
 
最后编辑: