泰拉瑞亚1.4.5失谐全物品电路
修改于03/162336 浏览综合
泰拉瑞亚中的失谐编码全物品电路,用于将输入的物品 ID 转换为失谐门装置的控制信号。
左边输入物品id,右边输入物品数量,拉下拉杆,即可得到任何你想要的物品:

失谐全物品电路-游戏中的任何物品,都可以通过此装置无限获得
这就是泰拉瑞亚中超越神明的造物-失谐全物品电路
由于旧版的失谐门已经被修复,我们团队从源码中找到四种物品来替代门:

4x6画,3x2画,红烟花火箭和绿烟花火箭,加在一起即可覆盖全部物品id
它是如何生成物品的呢?
例如3x2画作的部分代码如下:
在破坏时,
会由 frameX 计算出 styleIndex = frameX ÷36然后根据 styleIndex生成物品
游戏中存在32个3x2画,
最大 styleIndex 是31,
当我们修改 frameX令styleIndex大于等于32时会使用最后的分支-得到物品ID = 1474 + styleIndex的物品,也就是生成的物品ID = 1474 + frameX ÷36
3x2画作的原位置是使用 frame 计算出来的,破坏时会遍历原位置开始的3x2范围。
所以只需要确保失谐块不在计算出的3x2范围内即可得到可无限被破坏并生成物品的失谐块。
由于 frame的类型是有符号16位类型 short,最大值是32767 (2^15-1)
所以能得到的最大 ID是1474 + 32767÷36=2384游戏中存在32个3x2画
所以最小生成物品ID是32 + 1474 = 1506
所以3x2画可以生成的物品ID范围是1506 ~ 2384并不能只使用一个失谐装置刷出全部物品
所以我们在源码中找到了三种合适的物体来覆盖全部物品。它们的制作方法与 3x2画装置类似
那么,如何在1.4.5最新版构建出失谐框架制作失谐块呢?
首先,使用多人模式进入游戏,离地面8格搭出这样一个框架:

使用土块,木门,木材工作台,平台沙块和蘑菇雕像
用锤子敲击左下角的木材,蘑菇雕像消失不见,依次在平台右侧和上方放置木材顶出蘑菇雕像。
然后切换到单人模式或重新进入多人服务器,
可以看见一个悬浮的蘑菇头:

悬浮的蘑菇头,激活frameX±198
挖掉蘑菇头底下的物块,向上搭一层,用电线激活蘑菇雕像,放置烟囱,关闭蘑菇雕像 。
在烟囱右侧放置血月天塔柱,在天塔柱右侧放上灯笼,按照如图所示接线

左中开关:蓝线激活血月天塔柱,黄线和绿线激活烟囱;左下开关:红线激活烟囱,蓝线激活血月天塔柱
这样,一个简单的失谐框架就构建好了,血月天塔柱和烟囱用于纵向移动转化灯笼的作用范围,通过灯笼来横向移动转化物品id。
点击左中开关一次,灯笼贴图向上转化三格(frameY-54),作用范围将会向下移动到第二个红色区域;
点击左下开关一次,灯笼贴图向下转化三格(frameY+54),作用范围会向上移动还原。
点击右上开关一次,控制灯笼影响的红色区域物块的frameX+18。(控制移动)
点击右下开关一次,灯笼熄灭,控制下次点击右上开关时,影响的红色区域物块frameX-18,再次点击还原。(控制移动方向)
利用失谐框架,可以构建出3x2画和4x6画的失谐:

3x2画,先利用灯笼失谐标牌,按左下左上右下左下的顺序点击标牌,保留一格放上格栅

4x6画,失谐大炮做出灯头,用灯头移动画,保留一格放上格栅
纵向移动输入:失谐烟囱+血月天塔柱,彩色箭头标牌,大炮,篝火(已修复)
横向移动输入:灯笼,灯柱,猫雕(已修复)
纵向移动选用失谐烟囱+血月天塔柱,横向移动选用灯笼,以这两种输入为主来构建失谐门。
失谐块:
3x2画,横向移动2次id±1;
(int num=frameX/36)
4x6画,横向移动6次id±27,纵向移动1次id±0.75;
(int num = 27 * ((((int)frameX) / 18) / 6) + ((((int)frameY) / 18) >> 2))
烟花火箭,纵向移动1次id±1.35。
(int num=frameY/40)
由于利用源码中的num手算失谐移动次数,手动点击移动过于麻烦,所以可以全部交给电路来完成。
失谐全物品电路可以用id计算出移动次数,自动移动并自动生成物品。以下是失谐全物品的电路部分:

16位BCD数显,ROM,id比较器
输入数字时,输入的数字被转化为16位BCD码并显示。拉下拉杆时,输入的BCD码被转化为二进制数。
转化后的二进制id被送入比较器,与ROM里储存的7个阈值id进行比较。
根据id所在范围返回对应的操作码:4x6画操作码0010,3x2画操作码0100,烟花火箭操作码0110。

移动计数器,16时序乘法器/除法器,移动译码器
3x2画:新id与旧id作差得到移动次数,大于0右移,小于0左移,发送移动次数信号(每次id±1),由移动译码器执行移动。
4x6画:id大于2384时减去838(映射),得到的结果除以27得到商和余数,商为左右移动的次数(每次id±27),余数为上下移动的次数(每次id±0.75)。
烟花火箭:由于火箭每次移动id±1.35(二进制为无限小数),需要运用乘法和除法来计算移动次数并反向运算确定使用的装置。
(输入id×20+6)/27得到的暂存值减去先前值为移动次数,暂存值比较输入id为输出的装置(0为红火箭,1为绿火箭)
当物品数量和结束信号发送到生成计数器后,它会激活生成装置,根据物品数量(激活次数)生成对应数量的物品。
这就是一个完整的生成流程-
输入、控制、计算、输出,全串行通信,多模块并行,搭载1200hz失谐驱动(20个60hz水泵计时器),全部过程在一瞬间完成。
制作团队
电路:混乱沉睡
失谐门:小七L142857
Project Manager - CrypticNight.
Project Architects - BEYONDtogether, SpeeQz1.
Wiring Specialist - Yfdyzjt, putianyi888.
Transmutation Specialist - ARK Quasar, SpeeQz1, Haku, RHgeKZ, Terraria is great, 7L142857.
Math Specialist - ekinator.
Project Initializer - VultaxPlayz.
Console Conversions - Tomo, Pharuxtan, Mikey.
#


