ここでは、「BABA IS YOU」の詳細な仕様や発見されているバグをまとめます
本編未使用語句やテクニックのネタバレが含まれますので、未クリアの方は注意してください




バグっぽい挙動

通常の名詞関係
+ ...
  • v448:「PULL」の挙動が不安定
    • 引かれるPULL物体の列を、先頭から順に1番目、2番目、3番目…と呼ぶと、以下が成り立つ
      • 1番目のPULL物体は、例え自身がSWAP状態であっても、壁に向かって移動しない
      • 2番目以降のPULL物体は、進入禁止を無視(レベル境界を含む)して移動する
      • 3番目以降のPULL物体は、同じターンに同じ方向に連続して2マス以上PULL移動しない
    • 重なった物体が同時に同じ方向に移動してPULL物体を引くとき、以下が成り立つ
      • 重なった物体が共に進入禁止であるとき、引かれたPULL物体は移動しない
      • 重なった物体の一方が進入禁止であるとき、重なった物体の内部IDによってPULL物体が移動しない場合がある
    • PULL物体を挟み込んで同時に同じ方向に移動するとき、次が成り立つ。ここで、左から順に「A B C」という配置で挟んだものとし、Aの方向へ移動するものとし、CとBには「移動に付随する破壊」が発生するルールが存在するとする。
      • 「AがPUSH物体を押す」または「『B IS SWAP』が存在し、AがBよりも内部IDが大きい」とき、移動時にCがBを破壊する
  • v448:「STILL」は、PUSHまたはPULLによって引き起こされるSWAP移動に対しては、移動を封じない
  • v448:「LOCKED」の挙動が不安定
    • 「LOCKED」かつ「MOVE/AUTO/CHILL」である物体は、正しく指定方向への移動を封じない
    • 「LOCKED」かつ「SWAP」である固体の物体は、移動を禁止する方向が逆
  • v453:「移動に付随する破壊」によって生じた物体は、そのターン、変化処理「A IS B」・消失処理「A IS NOT A」・破壊処理「A IS WEAK」の影響を受けない
  • v448:「SHIFT」物体が特定の条件下で「破壊されることを予測」したとき、自身のSHIFT効果を無効化する(「A IS YOU AND SHIFT」「B IS DEFEAT AND STILL」のとき、Bの向きが変化しない。さらに「B IS SHIFT」のとき、Bの向きは変化せずにAだけがSHIFTされる。)
  • v448:「TELE」物体が特定の条件下で「破壊されることを予測」したとき、破壊される側の物体に重なっている物体はTELE移動しない。これを利用して、一方通行のTELEを作ることができる。
  • v448:同レベルで2回以上仮ボーナスを獲得したとき、1回でも仮ボーナスを獲得したターンをUNDOすると、それまでに獲得した全ての仮ボーナスが未獲得扱いになる
  • v448:「A HAS B」「A ON B HAS C」「A ON C HAS D」…のとき、Aが破壊された際に生じる物体は、これらのルールの解釈順に依存する
  • v448:「A 前置詞 NOT A AND NOT B」のような判定は、内部IDに依存した真偽を返す
  • v448:「WITHOUT」「FEELING」の否定は、「NOT WITHOUT」「NOT FEELING」として扱われる
  • v448:「A FEELING B AND FEELING B」は、「A FEELING B AND B」と同値な真偽を返す
  • v448:「PLAY」関連(未調査)
  • v448:「WORD」「SEEING」「POWERED」関連(未調査)

特殊な名詞関係
+ ...
EMPTY関係
+ ...
  • v448: emptyは、全ての移動効果を含めて、1ターンに1マスしか移動しない(ターン初めの無の位置からの移動を繰り返す)
    • 例:「BABA IS MOVE AND PUSH AND REVERSE」、「EMPTY IS YOU AND NEDGEUP」の状態で上入力を押すと、babaは「YOU処理の時に上に移動」「MOVE処理の時に下に移動」「NUDGE処理の時に上に移動」をし、最終的に1マス上に動く
  • v448: 各emptyは、「FOLLOW」による向きの指定に対して、1ターンに1回しか効果を受けない
    • 「UP・DOWN・LEFT・RIGHT」による向きの指定に対しては、何度でも効果を受ける(上書き)
  • v448:「EMPTY FOLLOW EMPTY」は、効果がない
  • v448:「EMPTY FOLLOW LEVEL」は、効果がない
  • v448: empty同士は、浮遊状態が異なっていても「移動に付随する破壊」を引き起こす
  • v448:「EMPTY IS PULL AND LOCKED」のとき、emptyの移動制限の方向が逆。
  • v448:「EMPTY IS PULL」のとき、emptyをSWAP状態の物体に向かって引っ張っても、SWAP移動が発生しない。「EMPTY IS YOU」で直接移動した場合はSWAP移動が発生する。
  • v448:「EMPTY IS ALL」で生成された物体は、emptyに向きが指定されているか否かに関わらず、向きが「無し」として生成される
  • v448:「EMPTY IS ALL」は、「EMPTY IS NOT X」があっても、Xを生成する
  • v448:「EMPTY IS CHILL」は、emptyに向きが指定されているとき、その向きに動く
  • v448:「A IS OPEN」「EMPTY IS SHUT」「EMPTY HAS B」のとき、重なったAがemptyに移動すると、全てのAが破壊され、1つのBが生成される。「OPEN」と「SHUT」を入れ替えても同じ仕様となる。
  • v448:「EMPTY IS YOU AND WIN AND BONUS」のとき、レベルをクリアしない
  • v448:「EMPTY NOT ON EMPTY」は、常に偽
  • v448:「A FEAR EMPTY」は、レベル境界をemptyとみなす
  • v448:「A FACING EMPTY (AND EMPTY …)」は、Aが無を向いているとき真となり、無の数が考慮されない
  • v448:「A SEEING EMPTY (AND EMPTY …)」は、Aの視線上に無が1マス以上あれば真となり、無の数が考慮されない
  • v448:「A 前置詞 NOT EMPTY IS X」は、特殊な物体の扱い、及び複数使用した際の扱いに統一性がない


GROUP関係
+ ...
  • v448:「条件付きEMPTY IS GROUP」は、名詞EMPTYをGROUPに追加しない。物体は追加する。
  • v448:「(条件付き)NOT GROUP IS GROUP」は、「NOT GROUP」に属する名詞が存在する(かつその条件を満たす)ときに限り、「INFINITE LOOP」を引き起こす。(個人的にはこのルールは「(条件付き)ALL IS GROUP」と等価になりそうにも思えるが…)
  • v448:「GROUP IS NOT GROUP」は、GROUPに属している通常の物体がレベル内に存在するときに限り「INFINITE LOOP」を引き起こす。レベル内にGROUPに属する通常の物体が存在しない場合、及びレベル全体と無に関しては存在していても「INFINITE LOOP」を引き起こさない。
  • v448:「A 動詞(≠IS) GROUP」は、X∈GROUPが条件付きでGROUPに入る場合、Xに付与された条件をこのルールに付与する
    • 例:「BABA ON KEKE IS GROUP」「IDLE ME IS GROUP」「FLAG HAS GROUP」のとき、「FLAG ON KEKE HAS BABA」「IDLE FLAG HAS ME」として処理される
  • v448:「LEVEL NEAR NOT GROUP」は、レベル全体に対しては、GROUPが何であっても処理されない
  • v448:条件付きグループの指定を連鎖させると正しく機能しない
    • 例:「ROCK NEAR WALL IS GROUP」「FLAG NEAR GROUP IS GROUP2」「BABA NEAR GROUP2 IS WIN」
  • v448:「NOT GROUP IS GROUP2」は、Xが条件付きでGROUPに指定されているとき、その条件の真偽によらずXはGROUP2に追加されない
    • 例:「BABA ON EMPTY IS GROUP」「NOT GROUP IS RED AND GROUP2 IS BLUE」のとき、babaは赤色にのみ変化する
  • v448:前置詞句に「GROUP」と他の名詞の双方が指定された場合、正しく判定されない

LEVEL・SELECT・PATH関係
+ ...
  • v448:「LEVEL IS YOU」「BABA IS YOU」「KEKE IS YOU2」のとき、YOU2用の移動キーでもレベルが動く
  • v448:「LEVEL IS YOU2」「BABA IS YOU」のとき、YOU2用の移動キーでもbabaが動く。さらに「KEKE IS YOU2」があるとき、babaはYOU2用の移動キーでは動かなくなる。
  • v448:「LEVEL IS STILL/LOCKED」は、「LEVEL IS YOU/CHILL」による向き変化も含めて、移動を無効化する
    • 「BABA IS STILL AND CHILL」のみのときは待機できるが、「LEVEL IS STILL AND CHILL」のときは待機できない
  • v448:「LEVEL IS STILL/LOCKED」は、「LEVEL IS PUSH/PULL」による移動を封じない
  • v448:「LEVEL IS LOCKED」は、「LEVEL IS NUDGE」に対して、レベルがLOCKED方向を向いているとき、任意のNUDGE方向へのNUDGE移動を無効化する
  • v448:「LEVEL IS TURNs」は、レベル全体の見た目の向きと実際の向きに、齟齬が生じる
  • v448:「LEVEL EAT A」は、レベル全体に対して、Aとレベルの浮遊状態を無視して処理される
  • v448:「A EAT LEVEL」は、レベル全体に対して、Aとレベルの浮遊状態を無視して処理される
  • v448:「LEVEL IS SAFE」は、「LEVEL IS BONUS」による破壊を防げない
  • v448:レベルのクリアとレベルの破壊が同ターンに行われる場合、どちらが先に行われるかはルールの処理順による
    • 例:「LEVEL IS WIN AND BONUS」のとき、ボーナスを獲得せずにレベルをクリアする。「LEVEL IS BONUS AND WIN」のとき、レベルが破壊され、クリアとならない。
  • v448:「LEVEL NEAR LEVEL (AND …)」は、レベルに対しては常に偽。レベルアイコンに対しては正しく処理されていると思われるが、見間違えでなければ調査中に挙動が変わったように見えた。調査には無関係なテキストの配置を変えただけなのだが…
    • 「LEVEL NOT NEAR LEVEL (AND …)」は、どちらに対しても正しく処理されている
  • v448:「LEVEL WITHOUT LEVEL」は、常に偽
  • v448:レベルに対して、「LEVEL ABOVE」と「LEVEL BELOW」の挙動が一貫していない。特に「LEVEL ABOVE EMPTY」「LEVEL ABOVE LEVEL」「LEVEL BELOW LEVEL」の3つが他と異なる挙動をしている。
    • 「LEVEL ABOVE/BELOW BABA」は、babaがレベル内に存在するとき真
    • 「LEVEL NOT ABOVE/BELOW BABA」は、babaがレベル内に存在しないとき真
    • 「LEVEL ABOVE EMPTY」は、常に偽
    • 「LEVEL BELOW EMPTY」は、emptyがレベル内に存在するとき真
    • 「LEVEL NOT ABOVE/BELOW EMPTY」は、emptyがレベル内に存在しないとき真
    • 「LEVEL ABOVE/BELOW LEVEL」は、常に偽
    • 「LEVEL NOT ABOVE/BELOW LEVEL」は、レベルアイコンがレベル内に存在しないとき真
    • 上記において、「ABOVE」は「BESIDE←」に、「BELOW」は「BESIDE→」に置き換え可
  • v448:「IDLE LEVEL IS AUTO」は、ルールを有効にするのに1回、ルールを実行するのに1回の、計2回連続で待機する必要がある。ただしレベル開始時は既にルールが有効なので、1回の待機でルールが実行される。
  • v448:「NOT IDLE LEVEL IS AUTO」は、レベル開始時に自動で1ターン経過する。レベル開始時は既にルールが有効であり、このとき「待機」入力の検知は行われないので、「NOT IDLE」の条件を満たしルールが実行される。
  • v448:隠しレベル及びロックされたレベルを別の物体に変化させ、それをREVERTで元のレベルアイコンに戻すと、一時的に選択可能となる(未調査)
  • v448:レベルの見た目上の位置は、「ZOOM MODE」の変更によって元に戻る。元に戻したターンをUNDOすると、レベルが変な方向へずれる。
  • v448:「REVERSE AND LOCKED」のとき、通常の移動、及びFALLでは反転後の移動に対してLOCKED判定を行うが、SELECT移動では反転前の移動に対してLOCKED判定を行う
  • v448: PATH設定を持つ物体に重なったSELECT物体は、待機すると向きが「無し」になる
  • v448:レベル開始直後とリスタート直後の短時間、SELECT移動は反映されない

その他
+ ...
  • v464:「A IS B AND C IS D」は、「A IS B AND C」+「C IS D」として解析される
  • v464:「A IS NOT B ON C IS D」は、「A IS NOT B」+「NOT B ON C IS D」+「C IS D」として解析される
  • v448:「LONELY BABA AND NOT ON BABA IS YOU」は、ANDを無視して解析される
  • v448:「LONELY NOT*n AND LONELY BABA IS YOU」は、NOTを無視して解析される
  • v448:「LONELY NOT BABA IDLE BABA IS YOU」は、何のルールも解析されない
  • v470:「BABA NOT BABA PUSH IS BABA IS YOU」は、何のルールも解析されない
  • v448:「BABA IS RED NOT BABA NOT ON TILE IS BLUE」は、「BABA IS RED」「NOT BABA NOT ON TILE IS BLUE」に加え、「BABA NOT ON TILE IS BLUE」が解析される
  • v448:「P O W E R E D BABA IS YOU」は「POWERED BABA IS YOU」に加え、「BABA IS YOU」が解析される(「RED BABA IS YOU」を認識する)
  • v433?:追加レベルパックにおいて、セーブデータからleveltree設定が消失する(あるいは最初から設定されていない?)場合がある
※ バグ情報を書く際にはバージョンも併記してください。

用語

物体(オブジェクト)

  • もの:マス目単位かどうかを問わず、レベルに存在している全て
  • タイル:マス目単位で配置される、全てのもの
    • タイルとタイルは衝突判定を起こすことができる
  • 物体(オブジェクト):マス目単位で配置される、無以外のもの
    • 物体と物体は重なり判定を起こすことができる
  • 実体(エンティティ)・アイコン・キャラ:物体のうち、テキスト・レベルアイコン・レベル境界でないもの

◯◯s

  • 一部の単語は、それらをまとめて◯◯sと表記する
    • YOUs:YOU、YOU2、3D
    • MOVEs:MOVE、CHILL、AUTO
    • NUDGEs:NUDGEDOWN、NUDGERIGHT、NUDGEUP、NUDGELEFT
    • FALLs:FALL(DOWN)、FALLRIGHT、FALLUP、FALLLEFT
    • DIRs:RIGHT、UP、LEFT、DOWN
    • TURNs:TURN、DETURN
    • LOCKEDs:LOCKEDDOWN、LOCKEDRIGHT、LOCKEDUP、LOCKEDLEFT
    • COLORs:RED、ORANGE、YELLOW、LIME、GREEN、CYAN、BLUE、PURPLE、PINK、ROSY、BLACK、GRAY、SILVER、WHITE、BROWN
    • EFFECTs:BEST、PARTY、PET、SAD、WONDER
    • GROUPs:GROUP、GROUP2、GROUP3
    • ABOVEs:ABOVE、BELOW、BESIDERIGHT、BESIDELEFT
    • RANDOMs:OFTEN、SELDOM

移動

  • 「移動」は「通常の移動」と「特殊な移動」に分類される
    • 「通常の移動」は、YOUs、MOVEs、NUDGEs、FEAR、SHIFTによって引き起こされる移動を指す
    • 「特殊な移動」は、BACK、TELE、SELECT、FALLsによって引き起こされる移動を指す

向き

  • オブジェクトには「向き」が存在し、「上」「下」「左」「右」「無し」の5種類ある
  • 無の向きは、特に向きが指定されない限り「無し」として扱う
  • 向き「無し」の物体は、どの方向にもどの物体にも向いていないとして扱う

変化・消失・破壊・生成

  • 「変化」は、「A IS REVERT」「A IS B」「A WRITE B」によってAが別の物体に変化する処理を指す
  • 「消失」は、「A IS REVERT」「A IS EMPTY」「A IS NOT A」「A IS BACK」「A IS DONE」及び同一マスに7つ以上のAを配置すること、Aがレベル外に存在すること、特殊演出が起きることによって、Aが消える処理を指す
  • 「破壊」は、上記以外の形容詞よってAが消える処理を指す
  • 「生成」は、「A IS ALL」「A IS MORE」「A HAS B」「A MAKE B」によって新しく物体が生成される処理を指す

固体・進入禁止

  • Aが固体であるとは、Aが PUSH・PULL・STOP のいずれかの状態であることをいう
  • Aが進入禁止であるとは、Aが固体であり、かつ押せない状態であることをいう
    • 「押せない」状態とは、特にPUSH属性を持つ場合に、移動先がつっかえている場合や、STILL/LOCKEDを合わせ持つ場合のことをいう

移動に付随する処理・衝突処理

  • 「移動に付随する処理」は「移動の失敗」「移動の連鎖」「移動に付随する破壊」の3つに分類される
    • 「移動の失敗」は、移動先が固体であり、その固体が「移動の連鎖」「移動に付随する破壊」が共に発生しない状態(そのような形容詞が適用されていない、あるいはそのような形容詞が適用されていてもSTILL、LOCKED、FLOAT、SAFE等で上書きされている)のとき、元の移動が行われない処理を指す
    • 「移動の連鎖」は、PUSH・PULL・SWAPによって付随する移動を指す
    • 「移動に付随する破壊」は下記を指す
      • 「A IS OPEN」「B IS SHUT」のとき、一方が他方に移動した際に起こる破壊
      • 「A EAT B」のとき、AがBに移動した際に起こる破壊
      • 「A IS WEAK」のとき、Aが「移動に失敗」した際に起こる破壊
      • 「EMPTY IS WEAK」のとき、物体が無に移動した際に起こる破壊
  • 「通常の移動」の際、「移動に付随する処理」が発生する
  • 「特殊な移動」の際、「移動に付随する処理」は全く発生しないか、一部のみが発生する
  • 「衝突処理」は、PULL以外の「移動に付随する処理」を指す
    • AがBに移動した際に「衝突処理」が発生するとき、AはBに「衝突する」という

向きの付与

  • 「向きの付与」は、下記ルールによる処理をいう
    • DIRs、TURNs、FOLLOW(動詞)
  • 「向きの付与」は、特殊な移動を含めた全ての移動の終了後、及び物体が変化・生成された時に適用される
    • このため、1ターン内にTURNs処理が2回起こる場合がある

内部ID

  • ステージ内の全てのオブジェクト(テキスト含む)は固有の内部IDを持っている
  • 内部IDは以下のときに付与される
    • 同時に同種のオブジェクトが生成された場合(レベルスタート時含む)、同列内を上から下に、同レイヤー内を左列から右列に、各レイヤーを低レイヤーから高レイヤーの順に付与される
    • レベルスタート時は同時に異種の物体が新しく生成されるが、このときは次の手順に沿って内部IDを付与する(ちゃんと確認していないのでもしかしたら違うかも)
      • 上記の順番でマス目を見ていき、テキストに内部IDを付与する。このとき、新しく登場した種類のテキストorオブジェクトがあれば、その順番を記憶する。
      • 登場した種類順に上記の順番でマス目を確認し、同じ種類のオブジェクトに連続して内部IDを振っていく
    • UNDOした時に新しく物体が生成された場合、上記の逆順で付与される
  • 内部IDは、以下のような処理に関係する
    • 2方向から同じ属性の移動でPUSHされた場合
      • 内部IDが小さい方の処理を一瞬行ってから、大きい方の処理で上書きする
    • 向きの異なる2つのSHIFTオブジェクトが重なっている場合
      • 内部IDが小さいほうの処理を優先する(向きが変化するからだと思われる)
      • 3つのSHIFTが重なっていたり、移動先にPUSHオブジェクトがあったりすると上記の限りでない
    • ルールが解釈される順番
      • 普通は気にしなくていいが、処理によっては内部IDではなくルールの解釈順が関係する場合がある

Metatext

  • 特定のテキストを指すテキスト
  • エディタでテキスト名をTEXT_TEXT_IS等とすることで作成できる
  • 正式に対応している訳ではないが、一部の動作に関しては動作する
  • Metatextによって指されているテキストは、ALLの対象になる
    • もちろんテキストの対象にもなる
  • 動作する処理
    • IS/HAS/MAKEによる変換・生成
    • FEAR/MIMICによる処理
    • HOT、OPEN、DEFEAT、WIN、BONUS、END
      • エフェクトは発生しない
    • LEVELとの相互作用
    • 重なったときのEAT
      • 移動に付随する破壊は発生しない

Mesatext

  • Metatextの亜種
  • エディタ上で、例えばbabaを指すテキストの名前を「TEXT_BABA」ではなく「BABA」とすることで作成可能
  • これは、効果の対象として自分自身をとる。動作する処理はMetatextと同じ。
    • Mesatext「BABA」を用いて「BABA IS WIN」を作ると、このテキストの「BABA」自体がWIN状態となる
    • Mesatext「BABA」を用いて「KEKE IS BABA」を作ると、kekeがMesatext「BABA」に変化する
  • さらに(.ldファイルを直接編集して)同名のオブジェクトを用意すると、メサテキストはこのオブジェクトに対しても効果の対象にとる。

文法(beta版)

よりわかりやすく修正できる方いましたらお願いします

記法

  • {A}/{B}…AまたはBが入る
  • (A)…Aが0または1回入る
  • (A)+…Aが0回以上入る

語句のグループ分け(括弧内は例)

  • noun…名詞(BABA)
  • verb…動詞(IS)
    • vis…後ろに名詞/形容詞を伴う動詞(IS,WRITEのみ)
    • vhas…後ろに名詞を伴う動詞(HAS等上記以外)
  • adj…形容詞(YOU)
    • dir…方向を表す形容詞(UP)
  • prep…前置詞(ON)
    • pface…後ろに名詞/方向を伴う前置詞(FACINGのみ)
    • pfeel…後ろに形容詞を伴う前置詞(FEELINGのみ)
  • adv…文頭修飾語(LONELY)

AND,NOTの文法

  • n_***
    • (NOT)+ ***
  • ***_s
    • n_*** (AND n_***)+
  • nounORadj
    • {noun}/{adj}
  • nounORdir
    • {noun}/{dir}
  • verbnoun
    • {vis nounORadj_s}/{vhas noun_s}
  • verbnoun_s
    • verbnoun (AND verbnoun)+
  • prepnoun
    • prep noun_s
    • pface nounORdir_s
    • pfeel adj_s

解釈可能な構文

  • (adv_s) noun_s (prepnoun_s) verbnoun_s

仕様

ルールについて


暗黙のルール

Baba Is Youには、明示されていないが常に成立しているルール(基本ルール)が3つ存在する。
  • TEXT IS PUSH
  • LEVEL IS STOP
  • CURSOR IS SELECT

ルールの非表示について

  • 何のルールも存在しないときはポーズ画面の「RETURN TO MENU」より下の部分に何も表示されないが、「TEXT IS HIDE」や「LEVEL IS HIDE」で隠れている場合は「RULES:」と表示されている
  • 一部のルールが隠れている場合、そのルールのみが非表示となる
  • HIDDEN属性によって非表示となっている場合も同様
    • そもそもこの場合、ルールが成立していない
  • MIMICでコピーしたルールは、元ルールがポーズ画面で非表示の場合、コピーしたルールもポーズ画面で非表示になる
    • 具体的には、暗黙のルールと「TEXT IS HIDE」により非表示になっているルールが該当する

ALLについて


ALLの範囲

  • ALLは通常、レベル開始時に存在する通常の名詞、または通常の名詞によって指されるオブジェクトのどちらかが存在する場合に、それら1種類につき1つずつまとめたものを指す
    • メタテキストが存在する場合、メタテキストによって指されるテキストの種類もALLに含まれる
  • 以下の場合においては、その限りではなく、ALLの範囲が拡張される。拡張された範囲はUNDOでは戻らず、リスタートによって戻る。
    • アルファベットを並べて通常の名詞を作った場合、その名詞がオブジェクトリストに含まれている場合に、新しくALLの範囲に追加される

NOT ALLの範囲

  • TEXT AND EMPTYと同義
  • ALLにメタテキストによって指されるテキストが含まれている場合であっても、NOT ALLの範囲に含まれる

レベルについて


レベルの境界

  • レベルの境界には、PHANTOM以外では進入できないSTOPオブジェクトが配置されている
  • このオブジェクト上に配置された全てのオブジェクトは、いかなるルールも無効化して破壊される
    • luaエラーを引き起こしてターン処理を中断させることでのみ、その上に留まることが可能

レベルツリー

ここでは便宜のため、LEVELTYPEが「LEVEL」「MAP」のレベルをそれぞれ「ステージ」「マップ」と呼び、これらを総称して「レベル」と呼ぶ
  • レベルパックでは、レベルに進入した順番に(ステージ、マップ関係なく)レベルツリーが構成される
  • 既にレベルツリーに登場したレベルに侵入する場合、その部分のループ構造が破棄される
  • レベルを抜けると、レベルツリーで上位に位置するレベルに移る
    • ただし、設定によって指定したレベルへ移すこともできる
  • レベルパックを終了する場合、最後に侵入したマップから現在のステージまでの間のレベルツリーが破棄される
  • 1,3がマップ、2がステージだとする
    • 1→2→3→1→3→2という順番でステージに侵入すると、レベルツリーは
      • 1
      • 1→2
      • 1→2→3
      • 1
      • 1→3
      • 1→3→2
      • 1→3(レベルパックを終了した場合)
    • のように推移する

レベルクリア時に別レベルへ遷移する場合のレベルツリー
+ ...
レベルクリア時、エディタでは特定のレベルへ遷移するようにレベルを作ることができる。
しかし、この際のレベルツリーの作成が少々特殊である。
  • レベルクリア時に特定のレベルへ遷移するようなレベルの場合、レベルツリーにおいて、自分の親のレベルを、遷移先のレベルに書き換える
    • この処理によって書き換えられたレベルツリーは、上記のループ構造が破棄される処理が行われない
  • 1→2→3→4という順番で進入し、4をクリアして5に遷移した場合
    • 1→2→5
  • 1→2→3→4という順番で進入し、4をクリアして1に遷移した場合
    • 1→2→1
  • 1→2→3→4という順番で進入し、4をクリアして2に遷移した場合
    • 1→2→2

レベルの周囲と前置詞

  • レベルへ進入する際、選択したレベルの周囲9マスにあるオブジェクトは記憶され、レベル内の条件判定の候補に追加される
    • オブジェクトのみが記憶され、無、レベルアイコン、レベル境界、レベル全体、レベルアイコン自体の向きは記憶されない
  • レベル周囲のオブジェクトは、1セット分だけ記憶される
    • レベルツリーのような記憶はされないので注意
  • レベル周囲のオブジェクトの記憶は、次の場合に上書きされる
    • レベルに侵入した場合
  • 上記以外の原因(例として下記)によって記憶が上書き・破棄されることはない
    • レベルをクリアする
    • レベルを特殊クリアしてタイトルに戻る
    • 「RETURN TO MAP」によってレベルを抜ける
    • 「RETURN TO MENU」によってレベルパックを終了してタイトルに戻る
    • 「BABA IS YOU」を終了する

例1.
  • 1→2→3→2の順で進入し、3→2への進入時に「LEVEL NEAR BABA」の条件で進入した場合
    • ステージ2において「LEVEL NEAR BABA」が条件を満たし、このレベルを抜けるとステージ1に遷移する
例2.
  • 1→2→3→4の順で進入し、3→4への進入時に「LEVEL NEAR BABA」の条件で進入し、2回「RETURN TO MAP」を行いステージ2に戻った場合
    • ステージ2において「LEVEL NEAR BABA」が条件を満たし、このレベルを抜けるとステージ1に遷移する

メタデータについて


レベルメタデータ

  • オブジェクトは「レベルメタデータ」を持つ場合がある
  • 「レベルメタデータ」とは、主にレベルアイコンに記録されるデータのことで、進入先のレベルやそのレベルアイコンに関する情報を持つ
  • 「レベルメタデータ」は、以下の性質を持つ
    • 4つの属性「OPEN」「NORMAL」「HIDDEN」「COMPLETE」を持つ
      • 非表示でない(=「HIDDEN」属性でも「HIDE」状態でもない)、「NORMAL」属性でないオブジェクトへは、SELECT移動できる
      • 非表示でない「OPEN」属性のレベルアイコンは選択できる
      • 非表示でない「COMPLETE」属性のオブジェクトは(レベルアイコンでなくとも)選択できる
      • 「HIDDEN」属性のレベルアイコンは、非表示になり、自身に関するルールの効果を受けない
      • 「COMPLETE」属性でないレベルアイコン以外のオブジェクトは、レベルへの変化時に一時的に「OPEN」属性となる
    • 無への変化、何も生成しない破壊を除いて、全ての変化・生成処理で「レベルメタデータ」は引き継がれる
    • レベルメタデータを持つオブジェクトは、同一マスにおける重複6つ制限の影響を受けない

PATHメタデータ

オブジェクトは「PATHメタデータ」を持つ場合がある
「PATHメタデータ」とは、主にLINEに記録されるデータのことで、SELECT移動の可否を決定する
「PATHメタデータ」は、以下の性質を持つ
  • 2つの属性「VISIBLE」「HIDDEN」を持つ
    • 非表示でない(=「HIDDEN」属性でも「HIDE」状態でもない)オブジェクトへは、SELECT移動できる
    • 「HIDDEN」属性のオブジェクトは、非表示になり、自身に関するルールの効果を受けない
  • 無への変化、何も生成しない破壊を除いて、全ての変化・生成処理で「PATHメタデータ」は引き継がれる

Stacklimitについて


6limit

  • 同種の「レベルメタデータ」を持たないオブジェクトは、同一マスに最大6つまでしか存在できない
  • 7つ以上を重ねた場合、6つを残して消える
    • この反応を「A IS A」で封じることはできず、「HAS」も反応しない

ルール解析について


テキストを重ねた時の処理

LONELY/NOT/ONなどの語句にテキストを重ねると、その文は多重解釈される。正確には重なった部分までを無効化して再解釈される。正直よくわからない。
  • 例1. 「BABA IS MOVE AND YOU/PUSH」=「BABA IS MOVE AND YOU」+「BABA IS MOVE AND PUSH」
  • 例2. 「LONELY/IS BABA IS MOVE」=「LONELY BABA IS MOVE」+「(IS) BABA IS MOVE」
  • 例3. 「BABA NEAR/IS KEKE IS PUSH」=「BABA NEAR KEKE IS PUSH」+「KEKE IS PUSH」
  • 例4. 「BABA IS MOVE AND/IS YOU/IS」=「BABA IS MOVE AND YOU」+「BABA IS MOVE (AND IS)」+「BABA IS MOVE (IS)」
  • 例5. 「BABA ON KEKE/IS IS MOVE」=「BABA ON KEKE IS MOVE」+「KEKE IS MOVE」
    • KEKE/ISを、KEKE/ONやKEKE/ANDにしても同様
    • BABA ON ISを無効化して再評価している?
  • 例6. 「BABA AND KEKE/IS IS FLAG」=「BABA AND KEKE IS FLAG」
    • BABA ANDを、BABA ISにしても同様
    • 例5.と違って再評価されない。なんで?(どちらかというと例5.がおかしい?)

ルール末端テキストの解析制限

ルール末端のテキストが11個以上重なっている場合、10個分までしか解析されない
  • 同時に11個以上成立させた場合、内部IDに応じて10個分解析する
  • 既に10個以上重なっている箇所にさらにテキストを重ねた場合、新しく重ねたテキストは内部IDによらず解析されない
  • 例. 「ROCK IS PUSH*6/PULL*6/SWAP*6」とした場合、「PUSH」「PULL」「SWAP」のうち、2種類または3種類の属性が付与される

特殊演出


INFINITE LOOP

1ターンに以下の条件を満たすとき、「INFINITE LOOP」と呼ばれる特殊演出が発生する
  • 同じ構文が200回解析される(WORD)
  • 同じ条件が80回解析される(FEELING)
  • オブジェクトが6000回落下する(FALL)
  • グループメンバーが400回更新される(GROUP)
  • PUSH/PULLの処理が10000回発生する
  • CRASHオブジェクトが存在する(内部的な仕様)

発生する例
  • ROCK IS WORDかつrock IS NOT WORD
    • 本編で可能
  • NOT GROUP IS GROUP またはGROUP IS NOT GROUP
  • BABA NEAR GROUP IS GROUP、KEKE IS GROUP
    • 前者は、「BABAが、GROUPに属する全ての種類のオブジェクトの近くにいるとき、GROUPに含まれる」という意味になる
  • BABA FEELING YOU IS NOT YOU
  • BABA IS CRASH(内部的)

発生しない例
  • BABA MIMIC KEKE、KEKE IS BROKEN
    • 単に「BABA IS BROKEN」が成立する

実現可能な公式レベル
  • PLATFORMER(MAIN;6-09)
  • BROKEN(MAIN;8-Ex3)
  • ULTIMATE MAZE(MAIN;???-12)
  • HARVEST PARTY(NEW ADVENTURES;4-04)

ただし、とある操作を行うと全てのレベルで実現できる
+ ...
設定から「FORCE HIGH-CONTRAST COLOURS」を選択すると、ターンを経過させずにルール解析を実行することができる。このため、このオプションを200回以上連続で切り替えると、次の操作時に特殊演出が発生する

TOO COMPLEX

1ターンに以下の条件を満たすとき、「TOO COMPLEX」と呼ばれる特殊演出が発生する
  • 「first words」が5000個存在する
    • 「first words」とは、連続した単語列の先頭か、プログラムが新しくルールを解析できる可能性があると判断した単語を指す。
    • 例として、「IS BABA HAS KEKE MAKE ME」の場合、「IS」、「BABA」、「KEKE」の3単語が「first words」となる。
  • 解析されたルールの個数が3000個以上である
  • レベル内に2000以上のオブジェクトが存在する
  • レベルが同時に50以上のオブジェクトに変換される

「INFINITE LOOP」と「TOO COMPLEX」が同時に発生した場合、「TOO COMPLEX」が優先される。

デバッグモード

セーブファイルがあるファイルに存在するSettingC.txtにおいて、[setting]の箇所にdebug=1を追加することで、デバッグモードが利用できる
デバッグモードでは以下の点が変更される
  • レベルプレイ時、F3キーを押すことで即エディタで開くことができる
  • レベルプレイ時、CTRL+Mで即クリアとなる
  • レベルプレイ時、CTRL+F5で昔のビルドの名残
  • エディタ時、ステージの広さの上限が68×38となる(投稿できる広さの上限は変化なし)

処理順

おおざっぱには
  1. 通常の移動→ルールの解釈
  2. 変化→ルールの解釈
  3. 特殊な移動→ルールの解釈
  4. 破壊→ルールの解釈
の順

通常の移動

  1. YOUs
  2. MOVEs
  3. NUDGERIGHT
  4. NUDGEUP
  5. NUDGELEFT
  6. NUDGEDOWN
  7. FEAR
  8. SHIFTの移動処理
  9. (ルール解釈1)

詳細
+ ...
  • 移動によるstacking/unstackingについて
+ ...
  • 上記の移動番号が同じ移動で、同ターンに同じマスに2つのオブジェクトが侵入した場合、その2つのオブジェクトが固体であるかどうかに関わらず重なる
    • PUSH、PULL、SWAPはそれぞれの通常の移動に追随し、同じ番号扱いで処理される
  • SWAPの処理は、進入禁止を無効化する
  • YOUsの特殊性
+ ...
  • YOUとYOU2は、通常は例えキーコンフィグを同一にしても同ターンに同時に移動することはできないが、「LEVEL IS AUTO」成立時は同時に移動させることができる
  • YOU/YOU2と3Dを同時に適用すると、かなり訳のわからない挙動をとる(調査中)
  • MOVEsの特殊性
+ ...
  • 同じ番号の移動は、同じ方向に移動することを前提にプログラムが作られており、移動する方向と移動量しか格納されていない。そのため、CHILLにMOVE・AUTOやLOCKEDを組み合わせると、直感に反する挙動をとる。
  • old-editor版における注意点
+ ...
  • old-editor版ではFEARとMOVEの優先順位が逆になっている。そのため、これを利用したカスタムレベルは最新版ではクリアできない場合がある。(DOWNTOWN等)

変化・特殊な移動

  1. REVERT・IS・WRITEによる変化処理
  2. (ルール解釈2)
  3. FOLLOW
  4. BACK
  5. TELE
  6. SHIFTの向き変化処理
  7. (ルール解釈3)
  8. SELECT
  9. (ルール解釈4)
  10. FALLs(RIGHT > UP > LEFT > DOWN)
  11. (ルール解釈5)
  12. RIGHT > UP > LEFT > DOWN
  13. TURN RIGHT = TURN LEFT
  14. レベル全体に影響を及ぼす処理
  15. マス目単位ではない特殊な挙動が設定されている処理

詳細
+ ...
  • REVERTの特殊性
+ ...
  • REVERTが適用されている場合、その物体は1つのものにしか変化しない
  • REVERTとIS/WRITEが同時に適用されている場合、REVERTの処理が優先される
  • FALLの特殊性
+ ...
  • FALLは、次のように処理される
  1. FALLRIGHTとFALLLEFT、FALLUPとFALLDOWNを、適用されているルールの数だけ打ち消し合う
  2. 右、上、左、下の順にその方向のFALLについて次の処理を行う:その方向へFALL移動できる物体がなくなるまで次の処理を繰り返す
    1. その方向のFALLが適用されている物体を内部ID順に選び次の処理を行う:次の処理を移動できなくなるまで繰り返す
      1. その物体のFALL方向の隣接するマスを確認し、FALL移動できるのであれば1マス移動する
    2. ステージ上のルールを再解釈する(殆どのルールはきちんと解釈されるが、ルール解釈に影響を及ぼすルールはその内容が正常に更新されないことがある)
  • このため、FALL移動の後のルール解釈5は、FALL移動の内部に含まれていると解釈することもできる
  • 上記の処理を利用して、重なった同じ種類の同じ向きの固体の物体を分離させることができる
  • TELEの特殊性
+ ...
  • 3つ以上の同一物体のTELEは、重なった物体を同時にランダムにワープさせる
  • 複数の異なるTELEオブジェクトが同一マスに重なっているとき、そのマスに乗ったオブジェクトは、ポーズ画面で先に書かれている側のオブジェクトによってTELEされる。
  • BACK中のオブジェクトがTELEオブジェクトの上に乗っても、TELEされない
    • そのTELEの上に別のオブジェクトが乗っている場合、そのオブジェクトのみがTELEされる
  • BACK中のオブジェクトがTELEオブジェクトでもある場合、上に乗ったオブジェクトをTELEさせる
  • TELEオブジェクトAが特定の条件を満たす場合、その上のオブジェクトはTELEしない
    • 特定の条件とは、BACK移動後のTELE直前のタイミングで、TELE移動・FALL移動・TELE以下のルール解釈を無視した場合に、A自身がSINK状態であることに伴う破壊以外の処理によって破壊される、という条件
    • このとき、Aから他方へのTELEは行われないが、他方からAへのTELEは行われる
+ ...
以下、ICE IS TELEとし、babaとiceが重なるとする
  • ICE IS WEAK
    • TELE前にiceが破壊される
  • ICE IS SINK
    • TELE後にbabaとiceが破壊される
  • BABA IS SINK
    • TELE前にbabaとiceが破壊される
  • BABA IS HOT, ICE IS MELT
    • TELE前にiceが破壊される
  • BABA IS DEFEAT, ICE IS YOU
    • TELE前にiceが破壊される
  • ICE ON BABA IS DONE
    • TELE後にiceがDONEする(DONE≠破壊)
  • ICE IS BONUS
    • TELE後のiceによってBONUSを取得する
  • 向きを与える処理の特殊性
+ ...
  • 変化・生成された物体に対しその物体の向きを適用するルール(FOLLOW・DIRs・TURNs)がある場合、向きを与える処理が呼び出されて適用される
    • 例:「A HAS B」「A IS BOOM」「B IS TURN AND TURN」のとき、Aの向きが反転してBになる。

破壊系

  1. (通常の移動に付随する破壊)
  2. (FALL移動に付随する破壊)
  3. DONE
  4. MORE
  5. PLAY
  6. HOLD
  7. SINK
  8. BOOM
  9. WEAK
  10. HOT & MELT
  11. YOU & DEFEAT
  12. OPEN & SHUT(重なったものに対して)
  13. EAT(重なったものに対して)
  14. MAKE
  15. COLORs、EFFECTs、及びその他の単語によるエフェクトの適用
  16. BONUS・END・WIN
  17. レベル外のオブジェクトの破壊
  18. CRASH(内部的・INFINITE LOOPの発生)
  19. (ルール解釈6)
(まだきちんと確認していません)

詳細
+ ...
  • WEAKの特殊性
+ ...
  • WEAKは、それ以前の効果によって「生成」された物体に対しては、そのターン効果を発揮しない
    • 具体的には「移動に付随する破壊」「A IS ALL」「A IS MORE」「A IS SINK」「A IS BOOM」によって生成された物体が該当する

移動に付随する処理

  1. OPEN & SHUT(連鎖していない移動に対して)
  2. WEAK・EAT(連鎖していない移動に対して)
  3. SWAP(能動的)
  4. PUSH & PULL
  5. OPWN & SHUT(PUSH/PULL移動に対して)
  6. WEAK・EAT(PUSH/PULL移動に対して)
  7. SWAP(受動的)
  8. STOP
(まだきちんと確認していません)

条件

  • 他ルールに影響を及ぼす:GROUP, WORD, MIMIC, BROKEN、POWER/POWERED
  • 自身の条件を指定する:文頭修飾語、前置詞
  • ルール全体を読み込んだものをここではルールリストと表現する
  • ルールリストの更新タイミングは、上記までに述べた(ルールの解釈)のタイミングである
  • ルールリストが更新されても、すでにそのルールの処理タイミングが終わっている場合は、そのルールはそのターン何の効果もない
    • ただし、FEELINGによってルールの適用が調査されている場合は別
  • ルールリストの更新と、ルールの条件部分の真偽の更新は、別で行われる
  • 条件の真偽更新は、ターン開始時、移動時、実体が新しく生成された時に行われる。向き変化時には行われない場合もあるらしく、FACINGのルールが正しく機能しない場合がある
    • FEELINGは、ターン中にルールが更新された場合に、条件の真偽が更新される?
  • HASの文に条件を付与すると、ルールの処理順に則った効果となる

エディタ正式追加時に変更されたマップ・ステージ

ネタバレ注意
+ ...
  • SOLITARY ISLAND
    • ステージ順・配置変更
  • WIRELESS CONNECTION
    • 沼の向こうに1列追加
  • DIM SIGNAL
    • 同上
  • LOCK THE DOOR
    • 木が外側に移動してわかりやすく
  • HORROR STORY
    • 初期配置変更(BABA IS YOUが横→縦)
  • EXISTENTIAL CRISIS
    • 初期配置変更(BABA IS YOUが横→縦)
  • CONDITION
    • 別解封じ(KEY IS NOT YOUが追加され、さらに単に「鍵を1つ生成→ルールを崩して鍵をPUSH」だけでは解けないよう変更)
  • SECRET GARDEN
    • 挙動変更による解法一部変更(ISが1つ減り、条件文の一部のテキストが変化して別の変化文が成り立つ場合、その処理は次のターンに行われるように変更)
  • TUNNEL
    • 別解封じ(FIRE IS NOT PUSH追加)
  • TECTONIC MOVEMENTS
    • 別解封じ(TEXT IS FLOAT追加)
  • ???,DEPTHS
    • PARADE, FIREPLACEの位置交換
  • ABC,META
    • QUEUEがABCからMETAに移り、METAのステージ順・配置変更

タグ:

+ タグ編集
  • タグ:
最終更新:2023年05月02日 07:33