以撒的结合吧 关注:291,203贴子:3,415,208

【Debug Console】Afterbirth+自带控制台使用说明

取消只看楼主收藏回复

说在一堆话前面:你们要的作弊,还是官方自带的
Afterbirth+自带了一堆工具,tools\LuaDocs\index.html是一份描述编程接口的文档,如果没理解错的话Afterbirth+的Mod可以直接用官方提供的方法修改游戏逻辑了,游戏内置了一个Lua语言的执行器。制作mod的门槛一下子降了好多,以后没准还可以做以撒自动贴吧直播发帖器Mod什么的,道具逻辑也可以很容易实现。另外不同mod脚本文件不会冲突。感觉这才是Afterbirth+真正的精华部分。
研究了一下游戏自带的控制台,简直了……忍不住把文档这页手工翻译了一下发出来。研究道具超好用的东西。
如果想慢慢享受游戏的乐趣,以下内容请斟酌尝试……连语法提示都是带剧透的。配合游戏使用更佳。
胎衣+官方文档的个人翻译,我的英语水平也不是很高,如果哪里翻译的不恰当,感谢指正了
理解困难的话配合游戏食用更加。。
另外纪念逝去的后悔药。


IP属地:北京1楼2017-01-05 21:08回复
    这楼是我自己的话:控制台开启的条件是启用一个mod,mod文件夹在游戏根目录savedatapath.txt里面写着,游戏会把该文件夹中的每一个文件夹认作一个mod,只要建一个空文件夹就可以了(名字英文)。
    游戏开启任意mod之后就会禁掉成就系统(类似于挑战,不能解锁成就),想解锁成就的话请保持该文件夹为空或在游戏中禁用Mod。
    步骤总结:
    1.打开savedatapath.txt,复制里面的mod文件夹路径
    2.到mod文件夹下,新建一个英文名字的文件夹(或者创意工坊有mod)
    3.运行游戏,游戏中按`(esc下方)打开控制台
    如果以后有什么补充的我会发到这楼。


    IP属地:北京3楼2017-01-05 21:09
    收起回复
      2026-02-13 00:12:46
      广告
      不感兴趣
      开通SVIP免广告
      控制台基础操作
      只有启用mod后才能打开控制台。如果没有mod,可以到steam创意工坊里面下载一个,或者在mod文件夹里面新建一个空文件夹。
      显示控制台:在游戏中按`~键开启(键盘左上,esc下方)。
      隐藏控制台:不输入文字,直接按回车。
      小心剧透:有些本应在正常游戏中体验到的东西会在调试控制台中“意外”悉知。
      控制台是Isaac(名词空间)的一个抽象,在重生时代就有了,但在AB+版本之前,只在开发人员构建(developer build)时启用。现在mod作者们可以充分利用它了!它能在开发mod时省去大量的时间。
      调试控制台不是绝对稳定的,输入某些命令会引起游戏崩溃(比方说数字超出范围什么的)。文档中记录了一部分的崩溃问题,也有一些没有记录。
      如果想测试某个道具或者道具组合,可以输入命令然后退出继续,道具会重新载入,你不用再敲一遍那些相同的命令。也可以尝试使用剪贴板。一次性复制多条命令然后用拷贝指令来输入。
      (PS:不是很懂,无视上面那句话就好……)
      有些游戏中的命令没有在此列出,他们要么是只有Nicalis的开发者才有用,要么就是已经没用了。比如成就和彩蛋指令会解锁存档,但是当开启mod的时候持久性数据是不会保存的。
      #命令(Commands)
      生产(spawn)
      (PS:可以生产敌人,宝宝,各种箱子,钥匙,金币什么的)
      语法:
      spawn mega maw
      spawn 20
      spawn 10.1
      spawn 10.2.0.4
      在实体(entities)中,名字可能会冲突,所以可能需要先敲一部分名字来查到它的编号(通过语法提示),然后把名字删掉,手动输入查到的编号。
      小数点的使用方法:种类.变体.子类型.精英类型(Type.Variant.Subtype.Champion)。
      spawn 10.2.0.4 可以获得一个gaper(10)的燃烧变体(.2),并且是蓝色精英怪(.4)。(PS:看语法提示)
      跳转(goto)
      语法:
      goto s.boss.1010
      goto s.error.21
      goto d.10
      s的意思是特殊(special)房间,d是正常的房间类型。不同的层房间也不一样,所以在第一层和第三层,goto d.10跳转到的房间也是不一样的。
      层跳转(stage)
      语法:
      stage 1
      stage 10a
      stage 3b
      在同一个种子中移动到其他层。可以用这条命令来跳到后面一些的层里,返回前面的层。输入当前层的id来重置当前层。
      输入不存在的层数会导致游戏崩溃。
      生产地形(gridspawn)
      (PS:石头、火、翔、地下室通道等)
      语法:
      gridspawn 1000
      gridspawn 1494
      gridspawn 9000
      gridspawn 9100
      在房间中的随机位置产生一个给定ID的地形实体(grid entity)。当无法覆盖某些实体、尝试在房间外放置实体等情况出现时,不会发生任何效果。如果不重新出入房间,生成的沟壑(Pit)会显示异常。
      调试(debug)
      对测试很有用的各种作弊指令。另外还有一些弃用地、不重要的或者无效的指令没列举出来。下面这些是很有用的指令:
      debug 3 完全无敌
      debug 4 DMG +40,不会切换角色当前武器。和豆浆(Soy Milk)配合超棒
      debug 7 显示攻击数值,和Spider Mod很像
      debug 8 主动道具无限充能
      debug 9 高幸运,和幸运值有关的事件的发生概率大幅度提升
      debug 10 启用后,所有敌人立即受到大量伤害,房间马上会清理完毕
      (PS:当你输入debug 3之后,游戏会提示Enabled debug flag,意思是帮你插了一个“你马上会掉血”的flag,你再输一遍就会把flag拔掉)
      给予道具(giveitem)
      别名(alias):givetim,g
      道具、饰品语法:
      giveitem dr. fetus
      giveitem c15
      giveitem Petrified Poop
      giveitem t15
      giveitem ipec
      givetim mutant sp
      g soy milk
      道具名字很容易发生冲突,所以可能需要先敲一部分名字来查到它的编号,然后把名字删掉,手动输入查到的编号。对于道具,使用"c15"来指明编号。对于饰品,可以使用"t15"。注意,如果不打全名字,可以自动补全。像"<3"这种名字奇葩的道具,必须找到道具编号,然后用"c15"这样的指令来表示,不支持输入名字。
      /*注意*/小写字母"p"开头的名字会被理解为药丸的id:p0(Bad Gas)。P开头的物品需要输入大写字母。
      (PS:c15表示15号道具,即道具<3,"<3"是个道具名字,t15表示15号饰品,编号和图鉴一致)
      药丸语法:
      giveitem p0
      g p22
      卡牌语法:
      giveitem k1
      g k45
      不支持输入药丸或卡片的名字,需要输入编号。就算一个药丸的效果还未知,也可以通过指令来获取它。它不会在之后的随机过程中被改变。
      /*注意*/小写字母"p"开头的名字会被理解为药丸的id:p0(Bad Gas)。P开头的物品需要输入大写字母。
      (PS:药丸卡牌善用语法提示)
      移除(remove)
      语法:
      remove t53
      remove soy milk
      remove cursed eye
      r bob's brain
      r experi
      remove *
      remove * 是一个特殊语法,会移除角色身上的所有道具。
      服装测试(costumetest)
      语法:
      costumetest
      costumetest 33
      随机给Isaac一套服装,相关道具不会生效。
      重置(restart)
      和长按R效果相同。重置游戏并开始新的一局。
      枚举道具(listcollectibles)
      显示身上拥有的道具及其数量。
      重复输入(repeat)
      语法:
      spawn 10
      repeat 50
      giveitem meat!
      repeat 100
      repeat 100
      上面的第一条指令产生一个gaper(PS:10 是gaper的id),然后第二条会产生50个gaper,然后第三条给你一个MEAT!,最后你会多出来200个MEAT!。repeat指令向上查找指令记录,最后执行过的一条非repeat指令会被自动输入给定的次数。可以用这条指令来给予大量道具或者生成大量敌人。注意克制!大量重复执行某些指令可能会导致游戏崩溃或长时间未响应。
      清除彩蛋(clearseeds)
      移除当前局所有复活节彩蛋的效果
      种子(seed)
      语法:
      seed GGGG GGGG
      seed T1MM AY48
      /*按照正常方法,退到人物选择界面再输入种子更方便一点。*/
      复活节彩蛋种子是无效的。大小写敏感(仅支持大写),不要把'i'写成'1'什么的。
      挑战(challenge)
      语法:
      challenge 20
      随机种子开始一个给定编号的挑战。输入大于原始游戏的挑战编号会造成游戏崩溃。
      道具组合(combo)
      语法
      combo 0.69
      给予一系列道具,从给定的道具池拾取69个道具(这个例子中0是宝物房道具池)
      宏指令(macro)
      这条指令不是为普通用户设计的,macros只适用于C++代码。抱歉!如果有太多人要求的话我们会设计一条相似的指令给modder们用。它只是能够把一串很长的指令缩写为一个简单的指令以方便快速输入。可以用剪贴板来达到类似效果。
      诅咒(curse)
      语法:
      curse 2
      curse 16
      curse 127
      设置标志位用来获得想要的诅咒
      Darkness (1) + Labyrinth (2) + Lost (4) + Unknown (8) + Cursed (16) + Maze (32) + Blind (64) = 127
      (PS:想要哪些诅咒直接数字加起来就可以,没加的会被清空)
      加入迷宫之诅咒(Labyrinth)之后可以用stage或者reseed指令来强制重新生成一层生效。
      重置种子(reseed)
      使用新的楼层种子重新生成当前层。这次生成的楼层和其他人正常游戏时遇到的是不同的。
      复制(copy)
      语法:
      copy 3
      复制控制台上最后3条指令到剪贴板,用ctrl+v/command+v(mac)来粘贴一行或多行指令。
      运行lua脚本(luarun)
      语法:
      luarun /full_path/hello.lua
      luarun relative_path/hello.lua
      立即加载并运行给定的lua文件。路径是关联至游戏的安装目录的。
      加载Lua mod(luamod)
      语法:
      luamod mygreatmod
      加载并运行此mod文件夹下的main.lua。可以在不重启游戏的情况下重新加载一个mod。
      查看Lua内存(luamem)
      报告Lua的内存使用情况。


      IP属地:北京5楼2017-01-05 21:11
      收起回复
        另外这蜜汁排版是什么情况……全部内容都在5楼,更新完毕。


        IP属地:北京7楼2017-01-05 21:17
        回复
          既然帖子已经被盗完了,那么接下来我继续更一波图片说明.gif
          如果有吧友不是很明白怎么用的话可以看一下。
          首先是控制台的开启条件:至少有一个Mod被启用,我们需要确保游戏拥有mod,也就是说mod文件夹里面要有东西。
          我新建了一个名叫GG的文件夹,所以游戏中就会有一个名字是GG的空白mod。
          *如果在创意工坊里面订阅过mod,此步骤可以跳过

          然后就可以启动游戏了,在游戏的MOD菜单中启用一个mod,进入游戏后就可以按~键开启控制台
          *如果小退的话,控制台的指令历史是会保留的,但是其实游戏状态已经重置了。
          *上下箭头快速输入历史指令,Enter键确认输入,输入空白指令可以退出控制台


          IP属地:北京20楼2017-02-03 17:19
          收起回复
            输入stage可以切换当前所在层,各层编号是对应的,名字参照语法提示

            图示输入为:
            stage 12(进入THE VOID层)
            stage 2(进入BASEMENT II层)


            IP属地:北京21楼2017-02-03 17:38
            回复
              这里我补充说明一些东西,控制台里面用到的很多编号其实就是对应枚举变量的值,我们可以通过游戏自带的lua文档查阅得到,比如各个道具的道具ID,spawn生成物的编号等等(图鉴:……,语法提示:……)。
              打开游戏目录下的tools\LuaDocs\index.html在左侧找到Modules,里面有一个Enumerations,直接点开后可以看到右侧文档显示了一系列枚举变量的定义,也可以在这个页面下面找到表格,里面没有标号但是有一些注释(左侧的链接会定位到下面的表格)。
              比如spawn指令要求提供四个数字,生成萌死戳可以用20.0.0.0,生成可拾取的硫磺火可以用5.100.118(不够四位应该是自动补0)
              关于第一位数字,见枚举变量EntityType:

              之后的大部分是一些小怪、Boss名字,所以没有翻译。
              也就是说5号是生成可拾取道具,如果第一位是5,第二位也就代表了可拾取道具种类,详见枚举变量PickupVariant(表格往上翻可以翻到定义部分,这部分是有数字的,但是没有注释,Ctrl+F搜索比较方便):

              PICKUP_COLLECTIBLE = 100, PICKUP_SHOPITEM = 150,这两个还比较显眼,100代表可收集物品,150代表商店物品,所以带底座硫磺火自然就是在5.100。前两位是5.100的时候,第三位就必须是物品ID。
              各物品ID就参照枚举变量CollectibleType(建议Ctrl F搜索 “CollectibleType {”,不带引号),实际上就是一个官方的道具ID表,这里就不截图了。118号是硫磺火。于是spawn 5.100.118生成硫磺火 spawn 5.150.118生成15块的硫磺火。
              注意这些枚举变量实际上是给编程用的,官方提供的控制台接口有限,并不能发挥全部功能(luarun这个就不考虑了吧……)。


              IP属地:北京22楼2017-02-03 21:32
              回复
                giveitem指令,给予玩家某个物品,支持输入编号或者部分单词(自动补全)
                remove指令,移除角色身上的某一个物品 如 remove c118移除118号道具
                remove *,重置角色,移除全部道具

                图示输入为:
                giveitem soy
                remove *
                giveitem可以缩写为g
                之后是一个空格,紧跟一个参数代表物品:
                c311代表311号道具,t39代表39号饰品,p26代表26号药丸,k46代表46号卡牌
                道具ID见枚举变量CollectibleType
                饰品ID见枚举变量TrinketType
                药丸ID见枚举变量PillEffect
                卡牌ID见枚举变量Card

                图示输入为:
                g soy
                g c311
                g t39
                g p26
                g k46


                IP属地:北京23楼2017-02-03 21:44
                收起回复
                  2026-02-13 00:06:46
                  广告
                  不感兴趣
                  开通SVIP免广告
                  goto指令用于传送至特定房间,s是特殊房间,d是普通房间,可以指定房间编号。
                  *房间编号可以参考地图编辑器

                  图示输入为:
                  goto d.0
                  goto s.boss.1010
                  debug用于开启或关闭作弊功能,游戏小退后会失效,需要重新开启。

                  图示输入为:
                  debug 3 无敌
                  debug 7 显示攻击数值
                  debug 4 高伤害


                  IP属地:北京24楼2017-02-03 21:55
                  收起回复
                    spawn和gridspawn的编号其实可以参考游戏文件夹的tools\RoomEditor\icons对应的图片(地图编辑器)。
                    gridspawn随机产生地形,编号可以看语法提示。

                    图示输入为:
                    gridspawn 4000
                    gridspawn 1000
                    spawn生产各种东西,详见前文。
                    简单的来说格式就是 spawn a.b.c.d,abcd是四个数字。
                    a可以参考枚举变量EntityType,有眼泪/跟班/点燃的炸弹/可拾取物品/各种Boss等
                    b是a的子类型,c又是b的子类型。
                    如果是生成敌人的话,d可以 看作是变异类型。
                    可以把b和c填0。
                    repeat 5 重复输入5遍前一条指令。

                    图示输入为:


                    IP属地:北京25楼2017-02-03 22:24
                    收起回复
                      接楼上:
                      spawn 5.30.1
                      repeat 5
                      下图是产生四种不同变异的Gaper,编号为10:

                      图示输入为:
                      spawn 10.0.0.1
                      spawn 10.0.0.2
                      spawn 10.0.0.3
                      spawn 10.0.0.4
                      combo可以给角色某个道具池的一堆道具
                      道具池编号见语法提示……

                      图示输入为:
                      combo 3.5 给角色3号道具池(恶魔房道具)中的5个道具


                      IP属地:北京26楼2017-02-03 22:34
                      回复
                        这楼已经不是正文了。
                        控制台不是万能的,不能实现游戏不存在的逻辑,想自己做逻辑需要用Lua编程。
                        @小人国国王324
                        用lua实现的随机添加怪物
                        首先是代码:
                        local list ={57,62,63}
                        local function addl(a,b)
                        for i = a,b do
                        list[#list+1]=i
                        end
                        end
                        addl(40,46)
                        addl(79,82)
                        Isaac.Spawn(list[Random() % #list + 1],0,0,Game():GetRoom():GetGridPosition(52),Vector(0,0),Isaac.GetPlayer(0))
                        上面这段代码可以实现随机产生怪物到第52号方块(debug 11看到的编号)
                        随机产生那些怪物,可以这样改:
                        第一行list={57,62,63}代表57 62 63把这三个怪物加入到列表,也可以自己继续加
                        后面以addl开头的那两行是范围加,也就是addl(40,46)意思是把40 41 42 43 44 45 46全部加入列表
                        仿照这个,把想生成的怪物ID加进去就可以了。
                        怪物ID看22楼的EntityType。
                        简易执行方法:
                        复制上面那段代码,然后新建一个文本文档,粘贴进去,修改名字为abc.lua【注意改后缀】
                        然后复制到游戏根目录isaac-ng.exe
                        控制台上输入 luarun abc.lua
                        可执行这段脚本。
                        当然也可以包装成mod来用。


                        IP属地:北京44楼2017-08-10 21:52
                        收起回复
                          【补充】关于成就解锁,以及几条官方文档没有提到的指令(部分参考wiki)
                          首先要弄明白控制台为什么会限制成就:
                          控制台不会限制成就,但是控制台的开启条件是启用任意mod,在官方一开始发布的版本里,mod会限制成就。
                          有人说最近成就系统很迷,其实是官方做了更新改动(以下内容来自wiki):
                          Playing with any enabled mod prevents any achievements from being unlocked.
                          启用任意mod都会使得成就无法被解锁。
                          If you have beaten Mom's Heart at least once, achievements will no longer be locked.
                          如果你曾经打败过一次妈妈的心脏,成就系统将不再会被锁定。
                          后面这个来源于Booster Pack #2的第一次更新,版本号V1.06.J75,一个官方未提及的特性:
                          Enabling mods no longer disables achievements after beating Mom's Heart.
                          在击败妈心后启用mod将不会锁定成就。
                          这里的【击败妈心】不是指一局游戏内,而是一个存档,因此相当于变相的放开了mod对成就的限制。
                          因此控制台的成就限制也就跟着解开了。
                          下面补充三条指令,其中有两条是因为成就相关所以没有在官方文档里面列出,所以之前我翻译的时候也没有注意到。
                          成就(achievement)
                          (PS:成就解锁指令,想通过控制台解锁成就的同学总算不用刷刷刷了,很爽吧(误,游戏的乐趣在于游戏本身的体验,强烈不建议用自己正在打的存档来做这种事))
                          语法:
                          achievement 100
                          解锁给定编号的成就,100是成就编号。目前是编号从1到348,可以参考wiki等的成就页。
                          输入后会有两个提示,一个是Achievement is already unlocked,doing nothing.成就已经被解锁过,什么都不做。
                          另一个是Achievement unlocked.成就解锁。
                          彩蛋(eggs)
                          语法:
                          eggs
                          用于在主菜单中解锁全部的彩蛋指令。执行后控制台回显:
                          主菜单中所有的复活节菜单全部解锁。在彩蛋菜单按Q+E+Tab或者LB+RB+X来把彩蛋移出列表。
                          补货(restock)
                          (PS:来源于WIKI,游戏中没有语法提示)
                          语法:
                          restock
                          给商店补货。当前房间是商店的时候执行,可以重置商店,类似于商店Roll机的效果。


                          IP属地:北京46楼2017-09-03 10:20
                          收起回复
                            复制粘贴tip:
                            控制台支持使用ctrl+v粘贴指令,别人发过来的指令直接用就好了,不用自己再敲一遍
                            curse指令:
                            这个指令本来是调超大层,lost等诅咒的,我当时没有测试成功。根据wiki解释,它就是不工作。


                            IP属地:北京82楼2019-12-21 22:15
                            回复
                              2026-02-13 00:00:46
                              广告
                              不感兴趣
                              开通SVIP免广告
                              【补充指令】
                              时间(time)
                              语法:
                              time
                              显示游戏内的运行时间(基于游戏帧数)
                              PS:会比游戏内直接显示的时间更准一点
                              过场(cutscene)
                              语法:
                              cutscene 1
                              播放游戏过场动画
                              播放音效(playsfx)
                              语法:
                              playsfx 1
                              播放给定ID的音效
                              清除(clear)
                              语法:
                              clear
                              清理控制台的指令历史记录。录视频的时候会有用一些。
                              【前方有用预警,直接ctrl+v粘贴】
                              lua
                              别名:
                              l
                              语法:
                              lua print('hello world')
                              l for _,v in pairs(Isaac.GetRoomEntities()) do if v:IsVulnerableEnemy() then print(v.HitPoints.."/"..v.MaxHitPoints) end end
                              l print(1+1)
                              直接执行lua代码
                              PS:这条指令是一条非常有用的指令,控制台可以直接执行lua程序,意味着仅依靠控制台的输入就可以修改游戏的几乎全部逻辑。
                              PS:语法中第二行的程序意思是:对于房间中所有实体,如果能受伤,则打印其 当前HP/最大HP
                              指令补充自wiki。


                              IP属地:北京83楼2019-12-21 22:37
                              收起回复