下载客户端

新手如何使用IC10编程万物

2026-04-07 19:00:24
发布在Stationeers
转载

AI智能总结导读

这是《太空工程师》的IC10编程新手指南,涵盖从基础开关控灯到高级堆栈迭代等内容,还介绍了游戏更新后IC10指令、逻辑功能、芯片类型等变更,附带大量编程示例与指令说明,帮助玩家掌握IC10编程。

从插槽说明到堆栈迭代,从灯光和开关开始学习所有内容。本指南通过简单且实用的示例,演示《太空工程师》中MIPS的所有核心功能。 更新内容 各位读者好。这部分内容只是临时添加,之后会删除。在“史上最大更新”中,Rocketwerkz对核心逻辑进行了重大调整。我需要一些时间将所有这些变更整合到指南中,同时我认为,为回归玩家提供一个集中包含所有新信息的部分会很有帮助。 天啊,我得重写好多内容最大的变化是ld和sd指令已被移除。取而代之的是,s和l指令现在可自动处理设备地址。相当不错的更新内容 动态逻辑类型相关功能 还记得我们可以通过bdns根据设备是否连接来进行分支处理吗?现在,我们可以通过bdnvs和bdnvl根据设备是否关联特定逻辑类型来进行分支处理。 实用数学功能 线性插值现在可以通过lerp实现一行代码完成,并且使用ext和ins将数据打包到寄存器中现在效率更高。 全新芯片类型 现在你可以扔掉你的PID控制脚本了,因为有了专用的PID芯片,其参数可以直接在外壳上进行调整。 让蜘蛛都嫉妒 现在有字符串功能了。所以如果你想在IC外壳上显示文本: define running STR("running...db设置运行中 基础知识 如果你已经编写过一两个脚本,或许可以跳过这部分——我们将用开关来控制一盏灯。

不过话说回来,我们开始吧:电脑就是计算器

归根结底,计算机所做的一切都可以简化为某些数字的函数运算;不过,我们可以用名称来替代这些数字,从而创建汇编代码,这正是我们在《太空工程师》中所使用的。因此,我们的机器所执行的任何操作都是某些命名数字的函数运算。 逻辑类型

这些命名数字中,有些是逻辑类型(例如开启、设置、激活)。编写脚本时,我们会尝试使用来自各种设备的数字来更改与其他设备相关联的数字。你对这些逻辑类型与各设备功能之间关系的理解越深入,编写的脚本就会越好!首先,试着了解某些逻辑类型相关的单位,比如压力的单位是千帕(kPa),温度的单位是开尔文(kelvin)。 最困难的部分:命名事物 要访问逻辑类型,我们需要与一些设备进行通信。在《太空工程师》中,与任何设备通信的最简单方法是使用螺丝刀将设备链接到外壳上。每个外壳有六个插槽:d0到d5。还有db,即外壳本身。你也可以使用设备的参考ID,但这会在后面详细讨论。 除了与设备通信外,我们还必须将值存储在变量中以对其进行更改。要为设备和变量命名,我们使用别名指令。这并非必需,但好的名称能让编写代码变得更轻松。变量只有16个数字寄存器(r0-r15),所以要合理使用它们。 alias switch d0 #注释可以解释你的脚本。使用“#”来开始一条注释 alias light d1 #设备寄存器 alias state r0 #数字寄存器 读取 要控制灯光,首先需要获取开关的状态。要从设备读取值,我们使用加载指令: l r? d? 逻辑类型 l state switch Setting 写入 如果开关关闭,我们希望灯光也关闭。这意味着我们希望开关的设置直接对应灯的开启状态。要写入值,我们使用存储指令: s d? LogicType r? s light On state 循环和标签 现在,我们只需要让这两条指令永远循环,我们的灯光控制脚本就完成了。要跳转到不同的行,我们可以使用j指令。我们可以给它一个行号,但如果我们更改脚本,可能需要使用的行号也会改变。相反,我们可以创建一个标签来动态存储重要的行号。所以我们基本的无限循环如下: Loop: l state switch Setting #'Loop:'是带标签的行。关于标签无注释 灯开启状态 j 循环 #跳转到标记为“Loop:”的行 Ticks and Timing 上述脚本可以运行,但目前每tick会额外运行31次。《太空工程师》中的一个tick为半秒,tick是游戏引擎用于同步所有逻辑和物理系统的单位。这意味着设备每秒最多变化两次。我们可以使用yield指令停止并等待下一个tick开始。要等待更长时间,可以使用sleep。或者你可以等待脚本执行完128行。 yield sleep a #其中a=时间(秒) 灯光/开关控制器 综合以上内容:

做更多操作 我没见过多少基地只装一个壁灯,所以我猜你也有多个需要控制的灯。 设置批量指令 要同时与多个同类型设备通信,我们可以使用批量指令和批量名称指令。我们可以像之前一样加载开关的设置,但有了这些新灯后,情况会变得更复杂。存储批量指令的格式如下: sb 预制体哈希 逻辑类型 r? sbn 预制体哈希 名称哈希 逻辑类型 r? 哈希与宏 要获取预制体哈希和名称哈希,我们可以使用HASH宏。这是一个将名称转换为数字的函数。要获取预制体哈希,只需对预制体名称使用HASH(可在空间站百科中找到)。名称哈希就是对名称进行HASH运算的结果。那么,如果我们有默认壁灯和长壁灯,且都通过标签机命名为“自动灯”,我们就可以通过以下定义来控制所有灯: 定义 lightName HASH("自动灯") #=某个数值 定义 lightID HASH("StructureWallLight") #=某个数值 定义 longLightID HASH("StructureLightLong") #=某个数值 注意,一旦定义了某个内容,就无法更改。lightName 并非寄存器中的变量,它是一个永久值,会在脚本中所有出现 lightName 的地方进行简单替换。 额外控制 现在,让我们将开启状态的逻辑变得更复杂一些。假设我们希望灯在开关设为开启状态时,或者当占用传感器检测到玩家时点亮。这样,我们晚上去采矿时就可以让灯一直亮着,这样怪物就不会钻到我们床底下了:或者 r0 isOn isOccupied 切换多盏灯 要完成这一切,我们需要在脚本中添加一个设备、一个新变量,并且为了保持一致性,我们要更改现有变量的名称。把所有这些整合起来,我们得到:

我们甚至可以将或指令切换为异或(XOR)指令,这样即使玩家在基地内,也能通过打开开关来关闭灯光。然后,当玩家离开基地时,灯光会重新亮起。

为了更好地预测“或”等逻辑语句的行为,可以查阅该运算的真值表。 那么批量加载指令呢?批量加载指令稍微复杂一些,因为它们具有一个额外的参数——批量模式(BatchMode): lb r? 预制体哈希 逻辑槽类型 批量模式 lbn r? 预制体哈希 名称哈希 逻辑槽类型 批量模式 一个寄存器只能存储一个值,但我们却通过批量加载指令一次加载多个值,对吧?批量模式就是告诉计算机如何将这些值组合在一起。共有四种批量模式: 平均值 总和 最小值 最大值 电力危机检测器 让我们换个角度,用一堆电池来控制一盏灯,以此演示批量加载指令。如果所有电池的平均电量低于20%,此脚本将打开警示灯: 别名 警示灯 d0 定义 电池ID HASH("StructureBatteryLarge") 定义 最低电量比例 0.20 检查电量: lb r0 电池ID 比例 平均 #你也可以用总电量除以总容量 slt r0 r0 最低电量比例 #逻辑小于比较。如果电量(r0)小于最小值,r0=1(即真) s 警示灯 开启 r0 yield j 检查电量 设备插槽说明 让我们简要讨论一下设备插槽。 除了具有某些逻辑类型外,设备可能还具有插槽,而这些插槽又具有逻辑插槽类型。例如,水培托盘有一个植物插槽和一个肥料插槽。堆叠器有一个输入插槽、一个输出插槽和一个内部插槽。水瓶填充器有两个瓶子插槽。要读取和写入插槽,请使用: ls r? d? slotIndex LogicSlotType ss d? slotIndex LogicSlotType r? 一个简短的绕行 对于即将到来的水瓶填充器脚本,你需要了解jal指令。jal指令是-al指令家族的一部分。所有这些指令都会将下一行的行号保存到一个特殊的寄存器ra中。实际上,我们可以创建函数: jal Function #将返回到这里,顺便创建无限循环 Function: s db Setting 1 j ra #跳转到'-al'指令之后的行 随处分支 有时,我们只希望在满足特定条件时才跳转。条件跳转被称为分支,并且有许多分支指令。以下是一些示例: beq x y Label #如果x等于y,则跳转到"Label"(或行号) beq r0 9 DoEqualsNine beqz r0 DoEqualsZero bltz r0 DoLessThanZero 自动水瓶填充器 假设我们希望仅当水瓶填充器中有至少一个需要填充的瓶子时,才自动将其开启。我们可以使用每个槽位的【已占用】和【数量】来查看是否存在瓶子以及是否已满: alias bottler d0 alias slotIndex r15 CheckSlots: yield #我们首先让步,因为可能无法完全执行完该函数 move slotIndex 0 #将后续函数的槽位索引设为0 jal HandleSlot #跳转到函数并可能返回 move slotIndex 1 #检查下一个槽位 jal HandleSlot j CheckSlots #循环 HandleSlot: ls r0 bottler slotIndex Occupied ls r1 bottler slotIndex Quantity slt r1 r1 1.5 #r1=瓶子未满,因为每个瓶子最多可容纳1.5升 且r0 r0 r1 #瓶子存在且未满 s 灌装机 开启 r0 bnez r0 检查槽位 #如果灌装机刚启用,不返回检查剩余槽位, j ra #直接从主循环重新开始。否则,返回到-al地址(ra) 这样可行,并且如我所愿展示了函数和分支,但我们实际上可以通过使用基本算术使其更简单。我们只需要计算可以储存多少水,并将其与实际储存的水量进行比较: 别名 灌装机 d0 别名 瓶子容量 r15 别名 最大容量 r14 处理灌装机 ls r0 灌装机 0 已占用 ls r1 灌装机 1 已占用 加 r0 r0 r1 #r0=瓶子数量 乘 最大容量 r0 1.5 ls r0 bottler 0 Quantity ls r1 bottler 1 Quantity add bottleAmt r0 r1 slt r0 bottleAmt maxAmt s bottler On r0 yield j HandleBottler 水瓶灌装机的耗电量极小,因此除非你在另一个更重要的脚本中有空间容纳此逻辑,否则它的作用不大。不过,水培站可以实现自动化,当所有插槽中都没有植物时关闭生长灯。但要注意不要检查肥料插槽!这部分内容留给读者自行实践。

循环与堆栈 我的电脑有旋转的彩虹灯,我很喜欢,所以我们也在空间站里装一些旋转彩虹LED吧。我会先演示错误的方法来讲解设备索引,然后再展示使用堆栈的更好方法。 设备索引 99%的情况下,我们应该使用设备的别名,但有时你可能就想用d0、d3或dX。有没有办法在代码中使用dX呢?有!只需定义寄存器的设备。例如: move r3 1 #将1存储到寄存器3中 alias indexedDevice dr3 #indexedDevice = d1 s indexedDevice On 1 yield s dr3 On 0 #同一设备 move r3 2 s dr3 On 0 #不是同一设备 我们甚至可以对寄存器这样操作,还能递归进行!移动 r3 2 移动 r2 0 移动 r0 rr3 #r0=0 别名 设备 drr3 #设备=d0 错误方向

那么我们从4盏灯开始。我们希望每次只点亮1盏灯,并且希望灯光从d3循环到d0。我们需要记住3个值:正在操作的设备索引、下一个要点亮的LED索引,最后,我们要记住总共有4个灯,这样才能正确终止循环: alias light0 d0 #为设备命名在设置IC外壳时仍然有帮助 alias light1 d1 #但它们不会出现在脚本中 alias light2 d2 alias light3 d3 define numLeds 4 alias deviceIndex r15 alias litLedIndex r14 StartIteratingLeds: move deviceIndex 0 #从第一个设备开始 HandleThisLed: alias thisLed dr15 #r15是设备索引 seq r0 deviceIndex litLedIndex #如果此设备应被点亮,则r0=1 s thisLed On r0 add deviceIndex deviceIndex 1 blt deviceIndex numLeds HandleThisLed #当deviceIndex<=3时继续循环 FinishTick: yield# 漂亮的颜色 等等,先增加litLed的值,然后再次循环。将litLedIndex加1,比较litLedIndex和numLeds的大小,若litLedIndex有效则r0为真。如果有效则保持litLedIndex不变,否则重置为0,然后跳转到StartIteratingLeds。 我确实指定了彩虹灯,但这些还不够。我们需要为每个LED写入不同的颜色值。我们可以查看游戏内百科来找到所需颜色对应的正确数值,但实际上我们可以使用现有的颜色枚举来编程: 设置light0的颜色为Color.Red 设置light1的颜色为Color.Blue 使用现有的枚举可以让你的代码更灵活且更易读。 使用引用ID 而不是使用d0、d1等来与设备通信...我们可以使用设备的参考ID来直接与脚本中容纳的尽可能多的设备进行通信。

第一个以$显示的值是十六进制表示。我倾向于使用这个,因为它通常更短,因为十六进制的信息密度更高。或者你也可以使用十进制,这其实没什么关系——反正最终都会转换为二进制。 定义lightRefID $3c1e #'$'是十六进制预处理器宏 FlipPower: l r0 lightRefID On seqz r0 r0 #'seqz'通常比'not'更好,因为'not'会对每个位执行操作 s lightRefID On r0 yield j FlipPower 堆叠物品

在基础汇编中,栈是最接近数组的结构。脚本开始执行时栈为空,栈指针sp=0。 我们可以将一个项目压入栈,这会使sp增加1;或者从栈中弹出一个项目,这会使sp减少1。请注意,弹出操作不会实际删除sp处的值。 push 32 push 42 push 420 Loop: select sp sp sp 3 #当sp=0时,将栈指针移回顶部(3) pop r0 s db Setting r0 #显示栈值 yield s db Setting sp #然后显示栈索引(先前弹出后的sp-1) yield j Loop 此外,如果我们更改sp,那么压入和弹出操作将与栈上的新位置进行数据交换。相对跳转 如果你出于某种原因想要减少脚本的行数,应该开始使用相对跳转来避免在标签上浪费行数。示例如下: move r0 42 add r0 r0 1 brlt r0 50 -1 #持续回退一行并加1,直到r0=50 s db Setting r0 正确方法

现在,让我们把这些整合起来,构建一个基于堆栈的LED控制器。不过不包含颜色枚举。由于堆栈大小是可变的,将颜色视为普通数字以便我们可以遍历它们是合理的: push $refId0 #灯光0 push $refId1 #灯光1... push $refId2 push $xyz push $abc push $123 push $4a3c push $23ff push $1223 #我们可以在脚本中放入尽可能多的设备,不只是6个。这里有9个 alias thisLed r15 #不再使用设备索引,引用ID只是一个数字 alias litIndex r14 alias numLeds r13 #我们不能将numLeds定义为sp,因为sp是一个寄存器,而且 #寄存器在编译时是未定义的。定义必须在编译时已知。 #所以我们必须使用一个寄存器,并且记住永远不要更改它。移动 numLeds 到栈指针 跳转并链接到 SetLightColors #只需设置一次颜色 开始迭代灯光: 移动栈指针到 numLeds #注意缺少标签。我们从“brgtz sp -3”跳转到“弹出当前灯光” 弹出当前灯光 将栈指针与点亮索引比较,结果存入r0 设置当前灯光的开关状态为r0 如果栈指针大于0则跳转到-3行 让步 #循环已结束,等待写入的值更新 点亮索引自增1 比较点亮索引与numLeds,结果存入r0 根据r0选择点亮索引的值为当前值或0 #然后我们改变哪个灯光被点亮 跳转到开始迭代灯光 设置灯光颜色: 将r12别名为颜色 #此函数只需运行一次。要与集成电路(IC)当前栈之外的栈进行交互,我们需要使用get和put指令。不过,我们也可以对db使用get和put指令来管理栈内存,而无需从栈指针(sp)进行入栈或出栈操作。 put d? stackIndex r? get r? d? stackIndex 我们还可以使用clr指令来清空栈: clr d? 举个简单的例子,让我们编写一个非循环逻辑块,将逻辑分类器设置为黑名单冰块,这样它就会过滤掉其他所有物品: define logicSorter $34ac alias instruction r0 move instruction SorterInstruction.FilterSortingClassCompare #填充第一个字节 sll r1 NotEquals 8 #将表示比较操作的字节左移8位 sll r2 SortingClass.Ices 16 #将用于排序类的16位数字移至2字节 或指令 指令 r1 #使用逻辑或合并数值 或指令 指令 r2 将logicSorter 0指令放入 #将组合好的数值放在第一个堆栈索引处 要组合指令,你需要知道各类信息的放置位置。设备的所有堆栈指令都可以在其【Stationpedia】页面中找到:它会循环遍历颜色 定义maxColor 6 #与堆叠上的LED数量对应,并将颜色写入LED 移动 color maxColor 移动 sp numLeds 弹出 thisLed 选择 color color color maxColor 设置 thisLed Color color 如果sp等于零则跳转到ra #当所有灯光都设置好颜色后返回 减 color color 1 跳转 -5 其他内容 这些是高级的、相关的主题。 可选设备处理 有时,你可能希望脚本中的某个设备是可选的。例如,可能警示灯并非必需,只是有了更好。我们可以通过使用bdns或bdse来跳过启用设备,或者使用sdns或sdse围绕设备创建逻辑。例如, alias warningLight d4 #一个可能已设置或未设置的设备 brdns warningLight 2 #如果设备未设置,则向下移动两行 s warningLight On r7 #在此处跳过或继续 嵌套函数调用 与其他寄存器一样,地址寄存器ra只能存储一个值,这意味着以下代码不会如你所期望的那样工作,并且永远不会跳转到SomethingElse: LetsDoSomething: s device Setting something jal DoAnotherThingInAFunction j SomethingElse DoAnotherThingInAFunction: s device Activate 1 jal HeresTheNestedFunction j ra #由于最后一条jal指令设置了ra,此处会陷入无限循环 HeresTheNestedFunction: s device On 1 j ra 我们可以通过多种方式来处理此限制。如果你没有将栈用于其他用途,我们可以在每次嵌套时持续将ra压入栈中,然后在每次需要从之前的地址返回时将其弹出。此示例将按预期工作: DoSomething: s d0 Setting r0 jal FirstFunction j SomethingElse FirstFunction: push ra jal SecondFunction pop ra j ra SecondFunction: push ra jal ThirdFunction pop ra j ra ThirdFunction: s device On 1 j ra 如果栈被占用,你可以选择其他寄存器来保存ra的值,然后再将该寄存器的值移回ra: Function: move r4 ra jal NestedFunction move ra r4 j ra IC通信 有些任务非常复杂,可能需要多个脚本,分布在多个外壳中,协同工作。例如,用于建造熔炉的配方芯片可以通过使用另一个负责获取矿石的集成电路外壳的设置来请求矿石。配方芯片可能包含以下代码行: alias vendorChipHousing d4 alias desiredOre r7 WaitForChipAvailable: l r0 vendorChipHousing Setting beqz r0 SetRequest #等待外壳的设置变为0后再进行更改 yield j WaitForChipAvailable SetRequest: s vendorChipHousing Setting desiredOre yield j SomewhereElse 而售货芯片可能会这样使用设置值: WaitForRequest: l r3 db Setting bnez r3 HandleRequest yield j WaitForRequest HandleRequest: jal PickSilo #此函数获取包含矿石的料仓的refId silo Open 1 #矿石哈希=r3(此处未定义) yield silo Open 0 s db Setting 0 #将外壳改回0以表示完成 yield j WaitForRequest 通道DataIn 在上一节中,我们使用设置值来传递一个数值在两个芯片之间。我们可以使用任何设备的通道数据进行通信,并同时存储多个值。 回顾之前的示例,让我们将其修改为使用通道数据,这样我们就可以写入矿石以及矿石数量: 别名 vendorChip d4 别名 ore r15 别名 amt r14 SetRequest: s d4:0 Channel0 ore #每个网络连接有8个通道。s d4:0 通道1 数量 #从空间站百科获取网络连接索引 生成 跳转到 其他位置 然后供应商芯片会像这样加载这些值: 别名 矿石 r15 别名 数量 r14 处理请求: 加载 矿石 数据库:0 通道0 加载 数量 数据库:0 通道1 跳转到 其他位置 请记住,通道数据存储在电缆网络中,因此如果对该电缆网络进行任何更改,您写入的任何通道数据都将被设置为NaN(非数字的缩写,实际上只是另一个数字)。 关于位的一点说明 我撒谎了,实际上我们可以只用一个寄存器存储多个独立的数字。例如,1607是一千六百零七,但如果我们将数字分开,就可以得到16和07。二进制数字是位(0或1),许多位组成完整的二进制数。我们可以将这些位向左或向右移动,以操作寄存器的数字,从而有效地将多个数字整合到一个更大的数字中。此外,此代码片段已过时。请参见上方的【更新内容】。 sll 寄存器 值 x #逻辑左移:将所有位向左移动 x 位,最右侧的位用 0 填充 sra 寄存器 值 x #算术右移:将所有位向右移动 x 位,最左侧的位用最高有效位的副本填充 结合前一节的内容,我希望移位操作的一些应用是显而易见的,但下一节将更详细地介绍如何为堆栈指令打包二进制数。 堆栈指令 集成电路外壳并非唯一具有堆栈内存的设备。制造机(如自动车床)和逻辑分类器也具有堆栈内存。

部分表格 以下是所有设置指令: 表单详情 s d? logicType r? set sd referenceID logicType r? set direct sb deviceHash logicType r? set batch sbn deviceHash nameHash logicType r? set batch name ss d? slotIndex logicSlotType r? set slot sbs deviceHash slotIndex logicSlotType r? set batch slot 以下是所有加载指令: 表单详情 l r? d? logicType load ld r? referenceId logicType load direct lb r? deviceHash logicType batchMode load batch lbn r? deviceHash nameHash logicType batchMode load batch name ls r? d? slotIndex logicSlotType load slot lbs r? deviceHash slotIndex logicSlotType batchMode load batch slot lbns r? deviceHash nameHash slotIndex logicSlotType batchMode load batch name slot lr r? d?试剂模式 试剂哈希 加载试剂 以下是所有分支和跳转指令:相对分支/跳转指令(如jr、breq、brdns)、跳转返回指令(如jal、bapzal、bneal)以及除beqz外的所有零(-z-)指令均为简洁起见已省略。 格式详情 j a 跳转到行a beq a b c 若a等于b则跳转到c beqz a b 若a等于0则跳转到b bne a b c 若a不等于b则跳转到c blt a b c 若a小于b则跳转到c bgt a b c 若a大于b则跳转到c ble a b c 若a小于等于b则跳转到c bge a b c 若a大于等于b则跳转到c bap a b c d 若a约等于b则跳转到d bna a b c d 若a不约等于b则跳转到d bnan a b 若a为非数字则跳转到b bdns d? a 若设备未设置则跳转到a bdse d? a 若设备已设置则跳转到a a与b的近似相等或不相等的程度由c定义。有关bap和bna的完整定义以及相关的s-、-r-、-z-和-al指令,请参阅《太空工程师》知识库条目。 以下是所有逻辑指令(注:除seqz外,所有零指令(-z)均已省略): 格式详情 选择 r? a b c r?=c(若a==0)否则=b seq r? a b r?=1(若a==b)否则=0 seqz r? a r?=1(若a==0)否则=0 sne r? a b r?=1(若a!=b)否则=0 slt r? a b r?=1(若a<b)否则=0 sgt r? a b r?=1(若a>b)否则=0 sle r? a b r?=1(若a<=b)否则=0 sge r? a b r?=1(若a>=b)否则=0 sap r? a b c r?=1(若a=~b)否则=0 sna r? a b c r?=1(若a!~b)否则=0 snan r? a r?=1(若a为NaN)否则=0 sdns r? d? r?=1(若设备未设置)否则=0 sdse r? d? r?=1(若设备已设置)否则=0 and r? a b a和b的按位与 or r? a b a和b的按位或 not r? a a的按位非 nor r?a b a和b的按位或非异或r? a b a和b的按位异或逻辑左移r? a b 逻辑左移逻辑右移r? a b 逻辑右移算术左移r? a b 算术左移算术右移r? a b 有关位运算的更多信息,请参阅【其他内容】中的【位运算简介】 以下是所有算术指令: 形式 详情 move r?a 将寄存器设为a add r?a b a+b sub r?a b a-b mul r?a b a*b div r?a b a/b mod r?a b a%b exp r?a e^a sqrt r?a a^0.5 log r?a log(a) abs r?a |a| max r?a b 较大值 min r?a b 较小值 trunc r?a 整数部分 floor r?a 下一个最小整数 ceil r?a 下一个最大整数 round r?a 最接近的整数 rand r?随机数 sin r?a 正弦 asin r?a 反正弦 cos r?a 余弦 acos r?a 反余弦 tan r?a 正切 atan r?a 反正切 atan2 r?a b arctan(a/b) 以下是所有堆栈指令: 形式详情 pop r?:获取栈顶(sp)的值并将sp减1 push a:将a放入栈顶(sp),然后将sp加1 peek r?:检查栈顶(sp)的值 poke a b:将b放入栈中位置a put d? a b:将b写入设备栈的位置a putd referenceId a b:参见上文 get r? d? a:获取设备栈位置a的值 getd referenceId d? a:参见上文 clr d?:清除设备的堆栈内存 clrd referenceId:参见上文 以下是所有杂项指令: 形式详情 alias str r?|d?:为设备或寄存器命名 define str a:为不可变值命名 yield:等待至下一个滴答周期再继续 sleep a:等待a秒后再继续 rmap r? d?reagentHash 获取设备hcf的reagentHash对应的itemHash,简直会爆炸 结束 我想就是这样了。

评论

共0条评论
face
inputImg
相关阅读
最新更新

更好的跳跃键

随便搞搞积木编程

2025-07-09 09:1811赞 · 4评论

编程重做启动包

新编程系统重制指南 新系统入门 首先,你需要三样东西:一台采矿机、一座熔炉和一台电脑。 新编程系统初上手时会有些难度,但当你开始操作后会发现它还挺有趣的,而且能…

2026-03-21 22:000赞 · 0评论

编程基础

在《Mechanica》中学习编程基础 简介 本指南将涵盖以下主题: - 函数 - 变量 - 事件 - 常用函数 - 示例程序 函数 简单来说,函数可以被执行并…

2026-03-20 13:000赞 · 0评论

编写Python代码

for those about to code はじめに 農家は Replace() されましたはプログラム学習に良いソフトだけど、初心者には基本的な説明がかな…

2026-02-18 04:000赞 · 0评论

Stationeers 工程师

这份指南将帮助你理解或学习成为《太空工程师》工程师所需的知识。工程师的技能是一门艺术。 简介 我决定制作这份指南,因为这款游戏相当复杂,我希望分享一些知识。 重…

2026-04-01 01:000赞 · 0评论

普罗托科技战争

生存对抗Factorum派系的策略与战术。遭遇战说明及完成提示。 游戏更新内容 2024年10月14日,Keen Software发布了1.205版本更新,该更…

2026-02-14 22:000赞 · 0评论

社区焦点 2025年12月

图片来源:2025 创意工坊 advent calendar 我们最喜欢的消遣方式就是浏览创意工坊——我们深爱玩家们不断分享的所有作品。 我们每个月都迫不及待地…

2026-01-09 08:160赞 · 0评论

《太空工程师》核心系统更新将于11月24日上线

《太空工程师》核心系统更新发布公告 - 发布时间:11月24日(周一)UTC时间下午6点 - 发布直播: - Twitch:https://twitch.tv/…

2025-11-17 12:130赞 · 0评论

太空工程师 《太空工程师》免费更新发布 开放世界宇宙沙盒冒险

《太空工程师》:Steam地址 由《DayZ》创始人Dean Hall提出创意支持的经典开放世界宇宙沙盒冒险游戏《太空工程师》,现已推出全新免费更新——“Ape…

2025-09-03 15:290赞 · 0评论

space engineers 太空工程师steam英文名

太空工程师在steam平台上无法通过输入中文来搜索到,需要我们输入它的英文名Space Engineers就能进入详细的商店页面了。游戏没有任何的打折,售价为7…

2025-07-31 21:440赞 · 0评论
暂无更多

最新更新

  • 颜色编码 — 我决定创建自己的颜色标准图表,用于未来的建造。我的颜色排列主要基于每种气体过滤器所使用的颜色,目的是让过滤器与管道颜色以及处于过滤模式下已涂装的相关大气设备相匹…
  • 颜色编码 — 社区颜色编码标准化尝试 基础 无论你是追求整洁有序、目标明确,还是杂乱无章、行事匆忙,在某些时候,你可能都想为系统的一些重要部件进行颜色编码。这能帮你减少一些麻…
  • 空调设置 — 一份帮助创建房间和基地空调系统的简明指南。我将介绍几种不同的房间冷却系统。 大气空调单元 在本节中,我将概述大气空调单元的设置和操作。这是一个相当简单的系统,可…
  • 基础气体熔炉冶炼指南与参考表 — 包含所有金属和合金冶炼的温度/压力参考表、燃料负载千帕值、一般冶炼技巧,并介绍和展示了一个基础燃气熔炉的构造,该熔炉能够捕获、过滤并以66/34的比例供给氢气/…
  • 残酷生存于每颗星球 — 学习如何在残酷开局下生存甚至发展壮大。 生存的关键:优先级 残酷开局的生存过程分为不同阶段,每个阶段由你的优先级决定。生存的五个阶段如下: 1. 糟了,糟了,糟…
  • Stationeers 工程师 — 这份指南将帮助你理解或学习成为《太空工程师》工程师所需的知识。工程师的技能是一门艺术。 简介 我决定制作这份指南,因为这款游戏相当复杂,我希望分享一些知识。 重…
  • 高级熔炉中的多气体熔炼 — 单独使用燃料就能满足大多数熔炼需求,但按预设温度泵入气体可实现更多控制。而泵入不同温度的动态气体混合物则能达到极高的控制精度。我分享一些在制作自动气体管理系统后…
  • 《Stationeers》v0.2.6227.27061热修复公告 — 《太空工程师》热修复公告 1. 修复了由孤立物品导致的存档加载失败问题 2. 为新的气体和液体变体添加了缺失的逻辑类型 3. 修正了燃烧错误,此前复杂燃料和氧化…