Skip to content

Yangsy56302/BabaMakeParabox

Repository files navigation

Baba Make Parabox

BabaMakeParabox

Baba Make Parabox(简称 BMP)是Yangsy56302以推箱子游戏Baba Is You(by Arvi Hempuli)的机制为基础进行二次创作,缝合了另一个推箱子游戏Patrick's Parabox(by Patrick Traynor)的主要机制而做出的推箱子游戏,目前处于开发阶段。

本游戏的源代码使用MIT许可证 ……大概吧。

游戏使用Pygame作为游戏引擎,而Pygame使用GNU宽通用公共许可证 2.1版 因此,本人不提供Pygame的源代码,而是提供使用未经修改的Pygame版本经PyInstaller打包后形成的游戏程序。

PyInstaller使用GNU通用公共许可证 第2版

本人并未拥有游戏纹理的所有权。 如果您有关于游戏纹理的使用权等权利的更多信息,请尽快联系我

该游戏的雏形诞生于2024.05.15,游戏文件夹创建时间为北京时间12:12:15。

请去查看changelog.md(段落标题就是链接)。

新手指南

下载

请跳转到Gitlab, 点击页面右上方写着Code的蓝色按钮,在展开的下拉菜单里找到zip并点击,即可下载。

该流程下载的压缩包(BabaMakeParabox-main.zip)内含有可执行程序(bmp.exe)源代码(BabaMakeParabox文件夹)Baba Make Parabox 添加的新纹理(sprites_new)Baba Is You 的部分音效(sounds) 等内容。

备用下载地址包括连接不稳定的Github 以及需要注册账号才能下载的Gitee,此处不推荐。

安装

  • 推荐方式
    1. 在您准备安装的位置(如C:\Program Files)新建文件夹;
    2. 将压缩包BabaMakeParabox-main.zip内的文件和文件夹解压到上一步新建的文件夹内;
    3. 在上一步解压的文件中找到baba-is-you-original-sprites.zipBaba Is You 本体的纹理),解压到与上一步相同的文件夹内;
    4. 找到文件夹sprites_old并将其重命名为sprites
    5. 把文件夹sprites_new里面的所有图片放到重命名后的sprites文件夹里面。
  • 备用方式
    1. 完成推荐方式的所有步骤;
    2. 通过以下任意一种方式安装Python
      • 官方安装方式
        1. 进入Python的官方网站
        2. 找到位于Logo右下方的Downloads,悬停展开;
        3. 在展开后的部分找到Download for Windows下方的按钮,点击以下载;
        4. 打开下载完成的安装程序,勾选最下方的Add python.exe to PATH,然后点击醒目的Install Now以安装Python;
        5. 等待安装完成,然后重启电脑。
      • (待补)
    3. 运行inst-win.bat,等待一段时间(大概在三分钟以内),直到文件夹内出现bmp.exesubmp.exe

运行

游戏仅在命令行窗口存在且未选中内部文本时正常运行。

这是Windows命令提示符的预期行为和 Baba Make Parabox 临时使用的简陋交互设计导致的现象,并非游戏Bug。

双击运行play-win.bat,这将会间接运行bmp.exe,然后启动程序。 直接运行bmp.exe也是可行的,但程序故障后会直接关闭终端窗口,所以不推荐。 如果您的Windows系统安装了Python,还可以尝试运行run-win.bat来启动游戏。

同时确保您已经准备关卡包文件……或者准备制作一个新的关卡包了

游戏未响应时,请先在命令行内 取消选中文字 , 确保游戏 并未询问输入 , 然后耐心 等待十秒左右 直至游戏继续运行。

如果游戏仍然处于未响应状态或在一段时间后崩溃,则可以确认该现象是一个游戏漏洞。

游戏内容

由于游戏目前仍然处于开发阶段,Baba Make Parabox 暂时没有官方的可玩关卡包。

控制

  • W / S / A / D:移动
  • SPACE:等待
  • ESC:回到上层关卡
  • Z:撤销
  • CTRL + R:重新开始关卡包
  • O:载入临时存档
    • CTRL + ...:可指定此临时存档的名字
  • P:保存临时存档
    • CTRL + ...:可指定此临时存档的名字
  • TAB:显示各种信息
  • F1: 显示FPS
  • 鼠标左键:进入空间
  • 鼠标右键:回到上层空间
  • 鼠标滚轮:循环选择空间
  • 关闭游戏窗口:停止游玩,指定文件名以保存
  • 关闭终端:强制退出程序

编辑器

该章节暂不提供有关如何设计谜题等问题的信息。

控制

  • 鼠标左键:放置物体
    • SHIFT + ...:即使该位置存在物体也额外放置
    • CTRL + ...:设置部分物体的额外信息 *
    • ALT + ...:进入空间
      • SHIFT + ...:进入关卡
  • 鼠标右键:删除物体
    • ALT + ...:回到上层空间
      • SHIFT + ...:回到上层关卡
  • 鼠标滚轮:循环选择物体类型
    • SHIFT + 鼠标滚轮向上滚动:选择该物体的名词
    • SHIFT + 鼠标滚轮向下滚动:选择该名词指向的物体
    • ALT + ...:循环选择空间
      • SHIFT + ...:循环选择关卡
  • (W / S / A / D) / 方向键:选择物体朝向
  • 0 ~ 9:从快捷栏选择物体类型
    • SHIFT + ...:设置快捷栏的物体类型
  • N:新建空间 *
    • ALT + ...:新建关卡 *
  • M:删除空间 *
    • ALT + ...:删除关卡 *
  • R:设置全局规则 *
    • SHIFT + ...:删除全局规则 *
  • T:设置所处空间的标识符 *
    • ALT + ...:设置所处关卡的标识符 *
  • CTRL + (X / C / V):剪切 / 复制 / 粘贴 光标上的物体
  • F1: 显示FPS
  • 关闭游戏窗口:退出编辑器,指定文件名以保存
  • 关闭终端:强制退出程序

注意:带有 * 的键位提示代表按下该键之后需要在终端内输入更多信息。 这段时间内,游戏窗口会被冻结,因为程序正在等待您的输入。

放置的空间、克隆和关卡默认指向摄像头所在的空间和关卡。

一段有关特殊物体的极其详细且复杂甚至可能会忘了更新的描述

  • 文本TEXT):Baba Is You的核心玩法,用来组成游戏规则的物体。
    • 文本物体默认拥有PUSH属性(可以推)。
    • 根据用法的不同,可以进行分类:
      • 名词:指代一类物体。
        • 诸如BABAFLAGTEXT等都是名词。
          • 注意区分所有文本和TEXT:所有文本都是TEXT名词的指代对象。
        • 部分特殊名词可以指定更详细的物体。
        • 如果开启元文本选项,则可以出现元文本——指向特定文本的名词,如指向BABATEXT_BABA
          • 元文本也属于文本,所以可以出现TEXT_TEXT_TEXT_BABA这样的多层套娃元文本。
      • 介词:指代操作类型。
        • 截至3.2,只有四种:ISHASMAKE,和WRITE
      • 属性词:指代一类物体属性。
        • 诸如YOUWINWORD等都是属性词。
        • 当名词作为属性词使用时,会将被赋予名词属性的物体,转换为用于属性词的名词所指代的物体。
      • 修饰词:指代限定条件类型。
        • 前缀修饰词:SELDOMOFTENMETA
        • 中缀修饰词:ONNEARNEXTTOWITHOUTFEELING
      • 元文本修饰词:TEXT_
        • 尽管TEXT_的作用方式类似于前缀修饰词,然而数据层面上TEXT_并不属于修饰词。
          • TEXT_在源代码内的类名为TextText_,其直接继承自Text类(文本)而非Prefix类(前缀修饰词)。
          • TEXT_暂时无法修饰TEXT_,但可以叠加到一起来修饰其他文本物体。
      • 并列词:AND
      • 否定词:NOT
    • 若将其他类型的物体转换为文本物体,则该物体会转换为对应的名词物体。
  • 空间SPACE):Patrick's Parabox的核心玩法,一块容纳所有物体的长方形空间。作为区分,空间物体则是位于空间内部,间接包含前者的特殊物体。
    • 空间物体默认拥有PUSH属性。
    • 若外空间内有一个内空间物体,则可以尝试通过把具有PUSH属性的物体推出边缘而将其从内空间推出到外空间。
      • 若物体被空间物体阻挡,则尝试根据相对位置转移物体。
        • 若物体或转移空间的ENTER属性被禁用,则失败。
      • 若过程中多次经过同一空间,则:
        1. 在关卡内寻找名称相同,无限等级大一的空间,作为无限大空间。
        2. 在关卡内寻找包含无限大空间物体的空间。
        3. 尝试将物体从无限大空间推出。
          • 若物体或无限大空间的LEAVE属性被禁用,则失败。
      • 若物体或空间的LEAVE属性被禁用,则失败。
    • 若外空间内有一个内空间物体受到推力,则其按顺序选择以下一项:
      1. 尝试通过推动前面的物体从而允许自身被推动。
      2. 将在推力方向距离内空间物体最近的具有PUSH属性但无法被推动的物体从外空间挤入到内空间。
        • 若物体或空间的ENTER属性被禁用,则失败。
      3. 将对内空间物体施加推力的物体从外空间推入到内空间。
        • 若过程中多次经过同一空间,则:
          1. 在关卡内寻找名称相同,无限等级小一的空间,作为无限小空间。
          2. 尝试将物体推入无限小空间。
            • 若物体或无限小空间的ENTER属性被禁用,则失败。
        • 若物体或空间的ENTER属性被禁用,则失败。
    • 可以有多个指向同一个空间的空间物体。
      • Patrick's Parabox 里的盒子确实只能有一个对应的本体,但本游戏出于关卡设计的自由度抛弃了该设定。
      • 当物体从被多个空间物体对应的空间推出时,所有空间物体都会创建一个该物体的副本。
        • 此机制可以用来快捷地复制物体。
    • 关于规则:部分属性词会同时作用在整个空间范围内。
    • 关于转换:
      • 若将空间物体转换为其他类型的物体,则:
        • 克隆物体:转换为指向相同空间的克隆物体。
        • 关卡物体:转换为以指向的空间为主空间,包含所在关卡内所有空间的关卡物体。
        • 其他物体:转换为该物体,保留空间相关信息。
      • 若将其他类型的物体转换为空间物体,则:
        • 克隆物体:转换为指向相同空间的空间物体。
        • 关卡物体:转换为以主空间为所指向的空间,包含该关卡内所有空间的空间物体。
        • 其他物体:
          1. 转换为以该物体可能包含的空间相关信息为所指向的空间的空间物体。
          2. 若无相关信息,则转换为指向该物体所在空间的空间物体。
    • 克隆CLONE):克隆物体类似于空间物体,但默认禁用LEAVE属性。
      • 克隆物体的LEAVE属性被禁用表现为:将物体从空间内推出时,忽略克隆物体。
      • 并不存在克隆空间:克隆物体同样指向空间。
      • 克隆物体的其他特性也与空间物体一致。
  • 关卡LEVEL):包含多个空间的存在。作为区分,关卡物体则是位于空间内部,间接指向关卡的特殊物体。
    • 关卡物体默认包含属性STOP
    • 关于规则:部分属性词会同时作用在整个关卡范围内。
    • 关于转换:
      • 除了上述情况外,若将关卡物体转换为其他类型的物体,则转换为该物体,保留关卡相关信息。
      • 除了上述情况外,若将其他类型的物体转换为关卡物体,则:
        1. 转换为以该物体可能包含的关卡相关信息为所指向的关卡的关卡物体。
        2. 若无相关信息,则转换为指向该物体所在关卡的关卡物体。
  • 游戏GAME):指代游戏本身,一般不作为解谜要素。
    • 关于规则:
      • 可以使用大部分属性词,且部分有独特的效果。
      • 无法附加修饰词。
    • 关于转换:
      • 若将游戏物体转换为其他类型的物体,则将该物体贴图覆盖游戏界面。
      • 若将其他类型的物体转换为游戏物体,则删除该物体,同时新建子进程显示该物体的默认贴图。

杂项

计划实现

  • 短期
    • GROUP的逻辑。
    • 文本可以跨空间组成规则。
    • 方向属性词,以及空间物体的方向属性。
  • 中期
    • 类似于 Maxwell's Puzzling Demon 的关卡机制。
    • GUI(图形用户界面)。
      • 使用可输入文本的游戏窗口取代命令行的显示。
  • 长期
    • GAME的复杂语法。
      • 目前对GAME应用修饰词会使其不指代任何物体。
    • Infinite Loop与其检测方法。

异常情况分类

游戏特性

  • 属性前带有多个NOT的规则只会否定一条恰好缺少一个NOT的规则。
    • 例如,BABA IS NOT YOU否定一条BABA IS YOUBABA IS NOT NOT YOU否定一条BABA IS NOT YOU,可能导致已有的BABA IS YOU不再被那条BABA IS NOT YOU否定。
  • FEELING每轮只检测一次,以试图避免检测停机问题和判定无限循环。
  • WORD属性对TEXT有效。

游戏漏洞

  • 移动系统的完成度很低,有时表现会与 Baba Is You 不同,主要出现在多个物体同时移动的情况下。
    • 比如,如果有多个常规空间物体同时存在,物体进入悖论空间时会超额复制。

联系作者

哔哩哔哩:https://space.bilibili.com/430612354

QQ:2485385799

163邮箱:yangsy56302@163.com