机制 【科普&详解】为什么你的房子不合格?

IvyLH03

Lv2
LV
0
 
IP属地
未知
2019/11/05
16
13
勋章
1
  • · 发布于未知
因为Terraria Wiki在这方面的内容存在许多明显错误,而问这个的人也很多,所以在此科普一下。
本文内容的主要参考资料为游戏源码,因此请放心食用。
如果本文出错,请及时指正。


本文受到https://www.bbstr.net/threads/157/ 一文的启发。


你可以通过下面的索引快速翻到想要了解的部分;当然,我更推荐仔细阅读全文。

1.这个房间太小/太大了——一、房屋大小
2.这个房间少了一面墙——二、背景墙
3.这个房屋缺少光源/桌子/椅子/门——三、家具要求
4.此房屋已腐化/这不是有效的房屋——四、环境和站立点
5.我们需要为此提供更好的文本!!!(TooCloseToWorldEdge)
  • ——我暂时没找到触发这条经典翻译错误(?)提示的方法,即使是把房屋挤在世界角落里也依然合格,不知为何。
6.此房屋已被占领/这是个实心块——无可奉告


本文中会反复出现的一些概念:
物块(Block):一般来说那种四四方方的填满一个格子的固体就是block,比如泥土和木头。我不知道如何解释这个概念,不过在这里你只需要知道它不包括平台就行
实心块(Solid Tile):这里指平台和物块。包括平台!包括平台!包括平台!
前景物品(Tile):和物块在同一个“图层”上的所有物品,如物块、平台、家具、树干、植物、木梁等。Tile通常译作“图格”,但我感觉可能会有歧义,因此这里翻译为“前景物品”。

这些概念是我自己总结的,名称也是我自己靠感觉翻译的,因此可能与其他人的用法不同。



一、房屋大小
  • 合格条件:60≤房屋格数(包括边框)<750
各种门和实心块都可以用作边框


计算方法(dfs):
从你鼠标点击的格子开始,向上、下、左、右、左上、右上、左下、右下搜索
(当然,如果你点击的格子放了个实心块,那就会直接停止搜索,并显示“这是个实心块”)
如果搜到的格子有实心块,那么计数器+1,直接返回上一层,继续搜索上一格子的其他方向;
如果搜到的格子没有实心块,那么计数器+1,继续从当前格子向八个方向搜索。
如果计数器的值=750,结束搜索;如果<750,继续搜索;
搜索结束时,计数器的值即为房屋的大小。


换一种说法:
实心块在上、下、左、右四个方向上连接,最后围成一个封闭框架。封闭框架所围成的空间的格数,以及框架本身的格数加起来,就是房屋的大小。
※注意:对回字形套娃房间来说,中间的空心不计入房屋大小,但中间的框架计入。
※注意:只有实心块可以分割房间。绳、藤蔓等不能分割房间。

一些图例:
1.常见火柴盒/监狱的尺寸:
1.png
2.这两个房屋由于边框没有封闭,所以实际上是一个房屋:
2.png
3.由于绳不能分割房间,上下两层实际上是一个房屋:
3.png
4.因为中间被平台隔开,所以整个空间被划为两个不合格的小房屋:
4.png
5.这是一个6×10的合格火柴盒。但如果在墙角放一个物块,房屋的边框会随之发生变化,使房屋的大小变为59,因此过小而不合格。
5.png





二、背景墙
  • 合格条件:不需要铺满,但不能存在连续一排或一列的长度超过4格的漏洞
除了天然墙、船帆和铁栅栏之外的所有背景墙都可以用作NPC房屋的墙壁。
(※铅栅栏可以用作NPC房屋的墙壁)
  • 这里的“天然墙”指的是用锤子敲会碎掉且不产生掉落的墙,以及天然生成的地牢墙(手动放置的不算)

由于函数执行顺序的原因,这条的优先级相当高。
因此,当你查询一个框架不封闭的空间,或者直接在空的地方查询的时候,也会提示“这个房间少了一面墙”。

如果背景墙的填充方式没有问题,但依然显示此条错误讯息,可以检查一下框架是否封闭、有没有使用无法作为NPC房屋背景墙的背景墙。


一些例子
左面的房屋不合格,因为有一个超过五格的漏洞;但右面的房屋合格,虽然这个漏洞很大,但所有连续一排或者连续一列的漏洞都没有超过4格:
1.png
检查一个框架不封闭的房间时,有时也会显示“这个房间少了一面墙”:
2.png
由于实心块可以分割漏洞,但不会分割房间,因此以下的房屋是合格的:
3.png
(发明者:贴吧@_西瓜泡泡 )
4.png
(发明者:我自己)
※注意:这种房屋不会主动吸引NPC入住,需要手动分配,在开荒中最好谨慎选择
 

IvyLH03

Lv2
LV
0
 
IP属地
未知
2019/11/05
16
13
勋章
1
  • · 发布于未知
三、家具要求
  • 合格条件:有一个光源,一个视作桌子的物品,一个视作椅子的物品,一个视作出入口的物品(不需要真的可以出入)

  • 光源包括:各种火把、各种蜡烛(包括水蜡烛)、各种吊灯、杰克南瓜灯、各种灯笼(包括星星瓶、萤火虫瓶、荧光虫瓶)、各种灯柱(包括提基火把)、各种烛台、圣诞灯、水母罐、壁炉
※注意:篝火不算合格的光源。​
※注意:房屋的具体亮度没有要求,只要有一个光源即可。​

  • 可以被视作桌子的物品包括:各种桌子、各种工作台、各种钢琴、各种梳妆台、各种浴缸、各种书架、施法桌、炼药桌、战争桌
  • 可以被视作椅子的物品包括:各种床、各种沙发、各种长椅、各种椅子、王座、马桶
  • 可以被视作出入口的物品包括:门、高门、机关门、平台

游戏检查房屋中是否有这些家具的方法是:在统计房屋大小的同时,记录有哪些前景物品在房屋中被使用过。
然后对光源、桌子、椅子和出入口分别枚举每一个可行的选项,如果至少有一个可行的选项在房屋中被使用过,那么就判断这个房屋中有光源/桌子/椅子/出入口。


※游戏没有要求必须使用火把、普通的桌子、普通的椅子和门。
下图的房屋全部使用了替换项,依然合格。
1.png
※游戏没有要求出入口必须能够起到出入口的作用,你甚至不必把它放在边框上
下图的房屋在边框上没有出入口,但因为内部有一个平台,因此游戏判定这个房屋拥有出入口。
2.png


四、环境和站立点
  • 合格条件:房屋的邪恶度满足一定条件;房屋拥有至少一个合格的NPC站立点
这里是房屋合格条件中最复杂的部分。
首先,一个房屋是否被腐化,与它是否在腐化之地/猩红之地无关。房屋的邪恶度有另一套计算方法,且范围也与环境的判定不同。


房屋的邪恶度统计区域为:
  • 以房屋最上方的格子所在的行为第0行,向上的第41行、
  • 以房屋最下方的格子所在的行为第0行,向下的第44行、
  • 以房屋最左方的格子所在的列为第0列,向左的第43列、
  • 以房屋最右方的格子所在的列为第0列,向右的第43列
这四条边所围成的整个矩形。
(统计区域不包括边界)

游戏会统计上述区域内所有前景物品的出现次数,然后按照以下的公式来计算一个房子的邪恶度:

  • 腐化值=腐化草皮格数+腐化草格数+黑檀石格数+腐化荆棘格数+黑檀沙格数+紫冰雪块格数+黑檀沙岩块格数+硬化黑檀沙块格数-5×向日葵格数
  • 猩红值=猩红草皮格数+猩红石格数+猩红荆棘格数+猩红沙格数+红冰雪块格数+猩红沙岩块格数+硬化猩红沙块格数-5×向日葵格数
  • 神圣值=神圣草皮格数+神圣草格数+珍珠石格数+珍珠沙格数+粉冰雪块格数+硬化珍珠沙格数+珍珠沙岩格数

  • 邪恶度=腐化值+猩红值+5×向日葵格数-神圣值
如果邪恶度≥300,那么会提示“此房屋已腐化”,并结束房屋查询。

※“草皮”指覆盖土块的那一层皮,而“草”指的是草皮上长出来的小草。
Crimson_grass.png猩红草皮
Short_Crimson_Plants.png腥红草
※注意:统计的都是“格数”。
※注意:与腐化不同,猩红草的格数不计入猩红值。
※邪恶度的计算中“+5×向日葵格数”是因为在腐化值和猩红值的计算中各自减过一次。最终向日葵对邪恶度的抵消只计算一次。



但大多数情况下,被腐化/血腥影响的房屋不会提示“此房屋已腐化”,因为邪恶度≥300其实是一个很难达到的标准(连腐化之地都只需要200格方块)。
邪恶度的使用没有结束,在接下来NPC站立点的评分中也会用到。
此时如果邪恶度<50,无论正负,邪恶度会被赋值为0。


一个合格的NPC站立点首先要满足以下条件:
  • 它是一个未被虚化的物块,而不能是平台等;
  • 它上方的3×3的空间中,左面一列和右面一列不能有未被虚化的物块,中间一列不能有任何实心块;
  • 它的左边一格和右边一格都有未被虚化的实心块;
  • 它和它上方的3个格子必须是房屋的一部分。
以下图中的灰砖为例:
条件的图示.png
其次要满足评分标准(以下图中的灰砖为例):
  • 初始分值为50-邪恶度
  • 在下图中蓝火把标示的区域里,每有一格门,分值-20;每有一格实心块,分值-5;每有一格除门、实心块和箱子之外的前景物品,分值+5
  • 此时如果分值≤0,这个站立点不合格,结束评分。
  • 在下图中蓝火把标示的区域里,每有一格宝箱,分值-30。减完之后如果分值<1,那么分值会被赋值为1.
  • 在下图中黄火把标示的区域里,每有一格未被虚化的实心块或其他前景物品,分值-15。
  • 若分值>0,这个站立点合格。
评分区域图示.png

如果一个房屋没有合格的NPC站立点,就会提示“这不是有效的房屋”,而原因可能是物块与家具的位置关系,也可能只是因为邪恶度太高。
NPC入住后,旗帜会悬挂在站立点的上方。


※注意:开启的门只计算关上之后的位置(在源码中会检查这个前景物块是不是门固定的图格)
如下图所示,石砖是这个邪恶度为0的房屋中唯一可能成为站立点的物块。为了抵消门和门上方物块的扣分,我在左面放了4个火把,此时石砖的分值为5,恰好合格。

1.png
把门打开。如果开启的门会额外扣分,那么此时石砖的分值将变成-25,这个房屋会失效。
但把向导移走之后依然可以移回来,房屋没有失效,说明站立点没有被打开的门多出的部分额外扣分。
2.png
实践同样证明开启的门和关闭的门对NPC站立点评分的影响是相同的。

※关闭的机关门被视作物块,但开启的不是。向导旗帜正下方的那一格机关门被当做物块,判定为房屋中唯一合格的站立点。当机关门开启时,这个房屋会因没有合格的站立点而失效。
2.png
 

putianyi888

Lv4
创意家
LV
0
 
IP属地
英国
2018/12/23
69
64
  • · 发布于未知
关于实体块和平台
它们通过Main.tileSolid和Main.TileSolidTop这两个布尔数组控制,前者包括实体块和平台类,后者仅包括平台类。这两个数组的内容见https://www.bbstr.net/threads/terraria.205/post-1292

关于图格tile
图格是TRwiki对tile的翻译,我在百科、词典,甚至MCwiki中均未查到该词,可以认为是TR中的术语。对于术语,取一个公认的说法即可。“物品”已经对应"item"了,所以把"tile"翻译为“物品”不合适。"图格"理解为"有贴图的方格"并无不妥。
 
最后编辑:

IvyLH03

Lv2
LV
0
 
IP属地
未知
2019/11/05
16
13
勋章
1
  • · 发布于未知
关于实体块和平台
它们通过Main.tileSolid和Main.TileSolidTop这两个布尔数组控制,前者包括实体块和平台类,后者仅包括平台类。这两个数组的内容见https://www.bbstr.net/threads/terraria.205/post-1292

关于图格tile
图格是TRwiki对tile的翻译,我在百科、词典,甚至MCwiki中均未查到该词,可以认为是TR中的术语。对于术语,取一个公认的说法即可。“物品”已经对应"item"了,所以把"tile"翻译为“物品”不合适。"图格"理解为"有贴图的方格"并无不妥。
好像懂了,感谢大佬(*°∀°)
 

* 这是一则由 Google AdSense 自动推荐的广告,与本站无关,不对其真实性与可靠性负责

顶部