• 目前各个板块都招收单个板块的版主,工作优秀则可以申请大区板块的版主(问答大区仅接受大区版主申请,是例外)。大区版主工作优秀则可以申请管理员工作,同样版主可以掌握多个板块的管理员(称为“兼职”,则需要发布申请兼职帖)。版主申请您可以直接在“综合申请”板块进行申请,管理员申请请私信在职管理员具体操作后续知晓。感谢您的支持与配合~
    点击此处申请

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

-Cyril-

向导
创意者
注册
2018/08/28
消息
24
反馈评分
26
点数
13
大家好我是Cyril,不知道说什么所以开始吧
===================
开局一张图,信息全靠编
225
手机显示的各种信息预览图(甚至看不出哪个对应哪个:mad:
绝了,要江12个,可能这坑填不完了我觉得可以填完 :mad:
224
这个是合成图,当普及一下基础知识
我先挑简单的讲:razz:
===================

时间 - #2楼
天气 - #3楼
月相 - #6楼
 
最后编辑:

-Cyril-

向导
创意者
注册
2018/08/28
消息
24
反馈评分
26
点数
13
时间
基础知识

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

当时间计数器为负数,会有一些很Interesting的画面效果:razz:
不说了,上图:
232
关于楼主是怎么看到这张图的:
因为楼主是做Mod的,所以闲着没事干就弄了一个控制时间流动的物品
然后试了试把时间流动设置为-10000倍,等了一会就发现...:razz:

既然有了负数超出控制,当然也有正数超出控制了
只要每帧的时间流速超出了时间计数器的上限,时间计数器就来不及归零了,就可以超出正数时间上限

231
230

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

仅需一秒,时间计数器就增加了5184...
所以这就是主页面昼夜更替如此快的原因

对了还有,在主页面等待是永远等不到血月的,除非你改了游戏源代码...
如果你等到了血月,说不定就跟我时间负数那张图一样23333
===================
时间篇章到此结束
如果有需要再补充
 
最后编辑:

-Cyril-

向导
创意者
注册
2018/08/28
消息
24
反馈评分
26
点数
13
(本篇章的一切内容由楼主看着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 - 清除(官中的什么鬼翻译 :mad:)(当上一个条件不满足时显示)

那么问题来了,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中关于风的条目中写的与TR源码中写的几乎完全一样)

你没有权限查看链接 现在登录或注册。

其他:游戏同时决定风速"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分钟改变一次

========本章结束========
嗦下感想吧(会有人想听我bb吗233):

在做关于这个的之前,我以为TR里关于天气的部分只是几条简单的代码,没有什么很NB的机制
然后我错了(呜呜呜),没想到TR给他搞得那么多细节
我在之前从未看到过有人专门讨论TR中关于风速和各个天气的级别(基本都是非雨天和雨天),Re-Logic应该也知道玩家不会去太在意这些
所以Re-Logic为了让这个游戏在某些方面更贴近实际也是做了很多(其实就是在不务正业吧 :mad:
Re-Logic,看不透啊看不透

对了补充一下:Moblie(就是手机版)12785也存在风速机制,其他的我就不知道了,也许所有1.2版本的都有
 
最后编辑:

Meowmere

冒险家
注册
2019/01/30
消息
2
反馈评分
0
点数
1
年龄
18
这很容易理解(误
 

-Cyril-

向导
创意者
注册
2018/08/28
消息
24
反馈评分
26
点数
13
月相
基础知识

月相由
你没有权限查看链接 现在登录或注册。
(以及它的合成物)显示,如果没有六分仪,可以通过查看油漆工有售哪副绘画作品来确定月亮处在哪个弦月中
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
  • 继续更新其他项目,一切更新完后,"白昼更新"设为进行完毕,并等待下一个白天开始再进行
========运行结束========
然后貌似没啥好说的了(因为这就是关于月相更替的全部内容了)
更多与本篇目相关的资料请看
你没有权限查看链接 现在登录或注册。
你没有权限查看链接 现在登录或注册。

========本章结束========
 
最后编辑:
顶部