畜史が成りしものを録し、設計学が降りる順を示すなら、思考学は迷った場所の曲がり方を録す。
すべては書かない。迷わなかった場所は書かない。迷った場所・間違えた場所・二分して確かめた場所だけを、次の軽い頭のために残す。
順番を守ること。飛ばした段が、あとで手戻りになる。
CLAUDE.md → 廿式(カーネル)→ 鳴分岐 → 示式 → 畜学(七相+運用の鍵)→ 設計学(森林木)→ 遊戯学。ラベルで済ませず、開いて読む。
コードを実際に開き、①描画は何で作られているか ②遊びの動詞は何か ③七相に照らして違反はどれか、を忖度なしに書き出す。ほめるためでなく、次作の設計材料を採るために読む。
畜史を「サービス終了」で検索し、同じ名前・同じ企画が過去に死んでいないかを確かめる。死んでいたら、肥料学で死因が記録されていないか読み、その死因を設計制約に繰り入れる。
森=掟と共有臓器。林=この木が連なる束。木=今回の一作。木の仕様を書く前に、森と林への接続を一行ずつ書く。
ジャンルの性質と掟がぶつかる場所を、実装前に決める。掟は捨てない、ジャンルの方を曲げる。(例:終わらないジャンル→「必ず終わる器」に変換)
「すごい」は総量でなく順序。効果の大きい一手から。細部から始めない(=木から積むな)。
失敗したら基本版へ落ちる道を、機能ごとに敷く。重い環境では自動で軽くなる段も。精度・互換の統一(過去の死因)を守る。
構文チェックだけで済ませない。起動→開始→終端までを実際に通し、エラーゼロと画の目視を確かめる。長い遊びには検証用の小さなフック(状態取得・スキップ・時間加速)を常設する。
🔄強制更新・音の番人・世界ランキングの祭壇・トップ目録・sitemap・キャッシュ版上げ。島の器官と血を通わせる。
畜史に録し、判断が分かれた場所をこの書に追記し、公開の扉(PR)までを開く。扉を押すのは、つくり手。
実際の分かれ道で、どう考えたか。同じ形の迷いに出会ったら、まずここを読む。
前作(島ぐらし)の弱点は、機能の不足ではなかった。世界のすべてが紙(カメラを向く平らな絵)であること、太陽があるのに影が落ちないこと──没入を壊す最大要因はこの二つ。遊びの側は、幅はあるのに底(終わり)が無いことが焔の形に反していた。レビューは「足りない機能の一覧」でなく「掟との衝突」と「没入を壊す最大要因」から書く。
島ぐらし2は過去に一度存在し、三日で取り下げられていた。死因は外部エンジン依存(一器に納むの違反)とシェーダ精度の不統一によるiOS起動不能。ゆえに今作は外部依存ゼロ・精度統一・道(パス)も新しく。死んだ木の上に建てない。
島ぐらしの気持ちよさは残し、無限ループは断つ。核は「60秒」という数字でなく底(必ず終わる)。ゆえに「7日間・約5分・必ず夜明けで終わる島ぐらし」へ変換した。祭壇に刻むのは資産でなく結んだ縁の数。終わりは無音と花びら──罰でなく祝福。
①太陽の影(光に実在が宿る・最大の一手)②紙を本物のメッシュに(風に揺れる幹と樹冠。法線は中心から外向きを保証する──巻き順まかせは黒い面を生む。実際に生んだ)③深さを知る水(浅瀬の色・岸の泡)④育つ地形(世界そのものが報酬)⑤ポストは最後のひと塗り。先に塗るな。
「影が出ていない気がする」とき、疑う項を一時的に極端値(影を真っ黒)にする。差分が出れば配管は生きている(調整の問題)、出なければ配管が死んでいる(バグ)。迷いを二分して確かめる。また、長い遊びの検証には時間加速のフックが要る──実時間で待つ検証は破綻する。
前作の店・ジム・乗り物・隠しステージは持ち込まなかった。動詞はあつめる・ともす・はしる・まもるの四つだけ。5分の器に、動詞は四つで足りる。幅を足すより、一周の密度を上げる。
続編(「2」を冠する木)を建てるときの分かれ道の記録。
前作を批判的に読むと掟との衝突が四つ──既存ジャンルの焼き直し、底(終わり)の不在、逆縁の物語の不在、罰としての終わり。前作が掟に反しているとき、続編は改良ではない。約束(動詞=たすける)と祭壇(結果発表の儀式)だけを継ぎ、遊びの機構は捨てて発明し直す。縁はジャンルでなく動詞に宿る。
前作の没入を壊す最大要因は機能不足でなく待ち時間──爆発が1ターンに1回で、残りは観ているだけだった。中毒=自分の手が起こす爆発の密度。派手さの総量より、手と報酬の間の遅延ゼロが先。
ヒットストップ・スローモーション・カットイン・ズームは別々の演出に見えて、実体は全部時間の操作。停止と減速(自動回復)という一つの器官を核に置き、個々の演出はそこへ乗せるだけにする。時間に触る演出を作るなら、時間の入口を一つにする。
揺れる鎖の描画用曲線と斬撃判定を別々に計算すると「見た目は当たったのに切れない」=遊び手の不信が生まれる。サンプル点を返す関数を一つ置き、描画も判定も同じ点列を使う。見た目と当たりのズレは、どんな豪華な演出よりも先に直すべき負債。
沈んだこっこは死なない──霧にかくれて、また浮かんでくる。コンボは折れるが命は失われない。終わりの掟(祝福)と親子の的は、勝敗の演出だけでなく失敗の演出にも適用する。子どもの指がすべった瞬間に、世界が残酷になってはいけない。
レース続編を建てたときの分かれ道の記録。
前作の没入を壊す最大要因は演出でも機能でもなく操作の器だった──権限ダイアログの摩擦、手と画面の間の遅延とノイズ、曖昧な手応え。「世界最高のUI/UX」を目指すなら、まず足すのでなく入力の摩擦(権限・遅延・曖昧さ)を削る。今作の操作は「おす/はなす」だけ。権限ゼロ・遅延ゼロ・親指1本。
アイテム抽選と「運の定数」はリトライの言い訳を作るが、上達の実感を薄める。時間延長はランを延ばし、焔の形を薄める。ゆえに抽選も延長も全廃して60秒固定。スコアの揺れは腕だけから生まれるようにする。「もう一回」は運試しでなく、上達の確認になる。
操作を増やさず深さを出す解は、ホールドの長さそのものをリソースにすること。おす=操舵+攻撃+ため、が一つの指で同時に起こり、はなす瞬間の判断が戦略になる。入力の数でなく、一つの入力の時間軸で表現する。おさないこと(遠心力に流される)にも意味を与える。
縁の糸を飾りにしない──糸=武器(ふりまわし)=敵の標的(逆縁が切りに来る)。物語の中心と遊びの中心を同じオブジェクトに重ねると、演出が全部「意味」になる。危機への対処はいつもの操作と同じ動詞にする。新しい操作を教えず、既存の動詞に緊張だけを乗せる。
実際に出したバグ:ふりほどき成功時に次回襲撃の再予約を忘れ、成功した瞬間に即再襲撃された(失敗側だけ再予約していた)。状態機械のイベントは、どの出口から抜けても次のスケジュールを張り直す。検証フックでイベントを強制発火し、成功/失敗の両出口を通して初めて見つかった──片方の出口だけのテストは、テストではない。
「◯◯を完全再現して」と頼まれた木(ジャンル再現もの)を建てるときの分かれ道の記録。
他所の皮(キャラ・絵・音・名前)は写さない──権利の面でも畜の魂の面でも。再現すべきはジャンルの文法(%でふっとぶ・ため・盾と回避・ガケ・切りふだ・選ぶ楽しさ)であり、登場するのは全員この森の住人。皮を借りず、骨を学ぶ。掟との折り合いは先例どおり掟でなくジャンルを曲げる:敵は常に影(かげ稽古)、対戦はストック+2分で必ず決着、祭壇は60秒くみてに載せる。
畜史を掘ると同じ座標に木(ふっとばし対戦)が既にあった。上に重ねず、批判的レビューで欠けを言葉にしてから、欠けを埋める続編として建てる。「完全再現」の核は技の数ではなく選ぶ楽しさ(ロースター)とふっとばしの爽快感(動的カメラ)だと先に決め、そこへ投資した。
実際に出したバグ:カウンター成立の瞬間、反撃で攻撃側の技データが消え、直後の命中記録で落ちた。単体の技テストでは出ない──「攻撃中のAが構え中のBに当たる」という二つの状態機械の交差点でだけ発生する。技×盾×回避×カウンター×投擲の組み合わせ表から交差点を選び、実プレイで通す。検証フックは生オブジェクトと要約情報を混同させないよう名前を分けること(テストの偽赤も実際に出た)。
初版のあと「再現度を忖度なしで」と再審査を受けた。技の数は揃っていたのに、格闘の骨である三すくみ(攻撃⇆盾⇆つかみ)からつかみが欠けて盾が最強になり、地上攻撃がすべて『ため』になって強攻撃が消えていた──あの入力は「はじき=スマッシュ/おしっぱなし=強攻撃/短押し=小ジャンプ」という同じボタンの文脈依存でできている。再現の審査は技表の照合でなく、(1)じゃんけんが閉じているか (2)一つの入力にいくつの文脈が畳まれているかから見る。上位の仕様(強攻撃)が実装できないときは、足元の仕様(歩き/走りの段階)が欠けていないか疑え。
同じ木をもう一度「忖度なしで」審査すると、前回直した層(三すくみ・入力の文脈)の下の層に次の欠落が見えた:受け身/ダウン・空中技の着地硬直・つかみの対空無効。一つの層を直すと、隠れていた次の層の欠落が見やすくなる──一度で全部を見切ろうとせず、直した後にもう一度同じ目で見直す前提を持て。検証でも実バグを2つ発見した(貫通弾の多段ヒット・ジャストガードの反確が飛び道具にも誤って乗る)──どちらも前回のバグが直った交差点の“隣”にあった。ランキング反映の確認を求められた際は、サンドボックスが外部ネットワークへ到達できない制約に直面した。到達できないという制約を偽装・黙殺せず、まず言い切ってから、できる代替検証(設定の一字一句比較・モックDBでの配線実測)で埋め合わせる。「確認した」と嘘をつくより「ここまでは確認できたが、ここから先は制約で確認できない」と線を引く方が、次の軽い頭にとって安全な記録になる。
三度目の再審査ではコードレビューでなく、ヘッドレスブラウザで実際にAI対戦・FFAを走らせて観察することで別種のバグを見つけた:みだれ乱闘(新設のFFA)で2体が完全に同じ座標で重なって同時に崖につかまるという、見た目で一発におかしいと分かる状態。原因は「崖は同時に1人しかつかまれない(早取り)」というスマブラのルールそのものが未実装だったこと──1対1では絶対に起きない条件(2体が同時に同じ崖へ到達)だったため、コード読解だけでは見落としていた。新モード(FFA・3人以上・同時多発条件)を足したら、そのモード特有の「1対1では起こり得ない組み合わせ」を全部疑え。この流れでさらに2つ見つかった(脱落者のHUDパネルが消えない・FFA時間切れの3〜4人タイ誤判定)──一つの資源共有バグを追うと、同じ新機能の別の側面にある姉妹バグも一緒に見つかる。
「エフェクト演出と効果音とBGM」を名指しで再審査すると、構造は整っているのに中身が空っぽな場所が見つかった:着地(1試合で数十回起きる動作)に音もダストも無く完全に無演出。6キャラの必殺技のうち3つが同じ発射音を共有し、UIでは別名を名乗りながら耳では区別がつかない。BGMは3ステージ・全モードを通じて1つの旋律しか無い。いずれも「関数は呼ばれている」「エラーは出ない」という意味では健全に見えるコードで、動作の正しさ(pageerrorゼロ)を見るテストだけでは絶対に検出できない種類の欠陥だった。エフェクト・SFX・BGMの再現度は、実測(実際に何Hzの音が鳴ったか・何個の粒子が出たか)で検証しないと「関数を呼んでさえいれば直った」という誤った安心に陥る。検証もAudioContextを直接傍受してオシレーターの実周波数をログる専用ハーネスを新設し、「関数の存在確認」でなく「6キャラの音響シグネチャが重複しないこと」「3ステージのBGMが異なる音域を使うこと」を数値で実測した──この過程で、共通の「GO!!」効果音がサンプリング窓に混入して比較を歪めるテスト自体の罠も見つけて直した。
同じ主題で五度目の再審査を求められ、個々の画面を単独で眺めるだけでは気づけなかった歪みを見つけた:60秒くみて(軽めのスコアアタック)の結果発表は紙吹雪・花火・光線バースト・カード反転演出でにぎやかに祝うのに、本戦(1対1・みだれ乱闘)の『GAME SET!!』はフラッシュとバナー文字だけで、紙吹雪も花火も一切無かった。個々には「壊れていない」正常な演出コードなので、通しプレイのチェックリストをなぞるだけでは見落とし続ける類のズレだった。演出の再審査は「この画面は演出があるか」でなく「格が近い場面同士で演出の量を比べたとき、逆転していないか」を見る。本作ではサブモードの結果画面と本戦のGAME SET画面が同格の『勝利を祝う瞬間』なのに、実装の時期・力の入れ方の違いでサブモードの方が明らかに豪華になっていた。修正はくみての祝福と同じ視覚語彙を、既存のCanvas粒子システムに乗せて本戦のGAME SETにも適用する形にした──新しい仕組みを足すのでなく、すでにある語彙を格の合う別の場面へ配ることが、最小の変更で最大の一貫性を生む。
前回の報告の末尾に、直さなかった項目を隠さず書いた:ステージ別BGMのさらなる差別化・KO直後のカメラのわずかな揺れ・観客の歓声とキャラ別勝利ジングルの不在。次に「余地をアップデートして」と頼まれたとき、この一覧がそのまま次回の作業リストになった──探し直す手間が要らず、宿題として書いた言葉が次回そのまま実装のチェックリストになる。カメラの揺れは直感(KO直後が怪しい)だけで直そうとすると的を外すところだった。実測トレースで確かめると、揺れの正体はKO直後でなく復活30フレーム前に、まだ画面に見えていないファイターが再びカメラの追跡対象へ戻る瞬間だった。「怪しい」と思った場所で実測せずに直すと、別の場所を直してしまう。観客の歓声・勝利ジングルの個性づけも、新しい音源を足すのでなく既存の`noise()`を時間差で重ねる・既存のファンファーレを半音移調するだけで表現の幅を出せた──新しい音を書く前に、既存の一つの関数にパラメータを足すだけで足りないか先に検討する。
「ステージクオリティがしょぼすぎる、全然再現度ない」という率直な指摘で実装を読み直すと、その通りだった。足場は単色の台形か細い長方形、遠景は空のグラデーションに数個の丸や楕円が浮くだけで、「そこがどんな場所か」が全く語られていなかった。3ステージを神殿の柱・浮き島の土台・本物の大樹まで描き起こした。実装中に自分で踏んだ罠:ステージ縁の柱を、既存の遠景装飾(星・霞)と同じ「画面中心からの視差オフセット」方式で置いたところ、カメラの位置・ズームによって画面座標がずれ、崖際のスクリーンショットで確認すると柱が画面外に消えていた。修正は実際のワールドX座標を`wx()`/`wy()`でスクリーン座標に変換する方式に変えること。大樹は最初からこの方式で置いていたため一発で正しい位置に出た。「これは漂う雲や星(視差でよい)か、それともステージの一部として必ずそこにある建築物・地形(ワールド座標に固定すべき)か」を最初に分類せよ。ステージの縁に立つ/地面から生えるものは、カメラがどこにあっても正しい位置に見えなければ再現とは呼べない。検証も「中央から見た絵」だけでなく「崖際・端から見た絵」を必ず撮って確認する──中心構図だけでは、縁の建築物のズレは永遠に見つからない。
つくり手自らが設計に立ち会うと宣言し、対話形式のインタビューを経て新しい林を起こした木の記録。
「任天堂ゲームボーイレベル」という一言は、選択肢を示して尋ねると「設計の質」の方向に見えたが、続く自由記述で真意が「限られたバイト数で成立させる、無駄のない美しいコード」という実装者の態度の話だと判明した。いったん擬似ROM容量メーターを画面に持ち込む案を出したところ「コードを美しく書くだけであってエフェクト演出は2026年の最高技術でやる」と明確な訂正が来た。比喩は勝手に画面演出まで広げず、実装の戒律に留めて聞き直す。世界観(カートリッジ・ROM・圧縮)は残しつつ、締める部分(コード)と映える部分(演出)を分けて設計したことで手戻りを避けられた。
畜物語の既存動詞(そろえる・積む・叩く・合体・撃つ・避ける・つなぐ・斬る・ふっとばす・こぐ・共鳴させる・走る・塗る・レースする・暮らす・折る)に無いものとして「詰める(圧縮)・消す(削除)」を採用。短押し=圧縮/長押し=削除という離散的な二択は、少ないボタンで奥深くという要望とも噛み合った。敵(逆縁)は黒こっこ形のバグに限定し、放置しても即死ではなく効率が下がるだけにとどめた(罰は霧の継承)。
時間切れを強制するフックが`state.timeLeft`を直書きしていたが、本体は毎フレーム`timeLeft=DURATION-elapsed`で上書きしており、`elapsed`を進めない限り元に戻ってしまう。ヘッドレスブラウザで「強制終了しても結果画面が出ない」形で発覆した。派生値に見えるフィールドをフックで動かすときは、それが毎フレーム再計算される結果でないか先に疑う。
短押し(圧縮)と長押し(削除)の判定を、`page.mouse.down/up`で本物のイベントとして判定帯へ実際にディスパッチして確認した。フック経由の自動テストが全部緑でも、判定ロジック自体(タイマー競合・帯の当たり判定)は別途、実ジェスチャでしか検証できない。
WebGLシェーダーが使えない環境向けにCanvas2Dの代替描画を用意しただけで安心せず、`--disable-webgl`でChromiumを起動し直し、実際にpageerrorゼロで動くことを実測して確認した。分岐はコードレビューだけでは「本当に通るか」が分からない。
「最新グラフィックでゼルダの伝説レベルのオープンワールドを。無理なら作る前に無理と言って」という求めに、どこまでを約束しどこから先を断ったかの記録。
任天堂のアセット量・造形密度そのものは1ファイルHTMLでは不可能と最初に言い切った。そのうえで提示されたスクリーンショットを「何がその感動を作っているか」に分解した──①画面を埋める風の草原 ②遠景の山と大気の霞 ③柔らかい光と雲 ④滑空の自由。この4つは素のWebGLで再現できる骨格。不可能と可能を丸ごとで答えず、感動の骨格に分解してから線を引くと、断りが提案に変わる。再現するのは皮(キャラ・世界)でなく文法(見えた場所へ行ける・風にのる)。
島ぐらし(12シェーダ)に機能を足すのでなく、先行作に無い描画カテゴリを3つだけ選んだ:GPUインスタンシングの大草原(数万本・足元で草が割れる)/鏡像カメラで描き直す本物の平面リフレクション/太陽側の縁が銀色に光る2層fbm雲。影・ブルーム・ゴッドレイ・ACESは既存作の資産をそのまま継いだ。「超える」は新カテゴリで示し、既にあるものは再利用する。
shima2は「あつめる・ともす・まもる」の暮らしの木。シン島ぐらしは同じ林(島・逆縁・縁の灯・祭壇)に立つが、中心動詞を「かける(滑空)」に入れ替えた移動の木。島は固定シードにした──全員が同じ島を走るから縁のひかりが比べられる(祭壇=林の臓器が木の仕様を決めることがある)。
(a) 滑空に「押しっぱなし」で入れなかった──フックは内部関数を直接呼ぶので通るが、実キーボードでは入れない。(b) 逆縁の影が上空6mを旋回し、地上のダッシュ(当たり半径1.3m)では物理的に絶対届かなかった。数字を並べれば一目の矛盾でも、書いた直後には見えない。「届く/入れる」系の仕様は、実入力でその行為を最後までやり切る検証をするまで実装済みと言わない。
ソフトウェアレンダラでフルパイプラインを回すと数fpsまで落ち、dtクランプ×低fpsでゲーム内時間が実時間の数分の一しか流れない。「N秒待って見る」型のテストは全部裏切られる。待ちを時間でなく状態のポーリング(一定間隔でstateを見て条件成立でbreak)にすると真値が出る。
島ぐらしへの深海ステージ追加は、ゼロから設計せず月ステージ(空の隠しステージ)の鏡として建てた──入場演出・別世界生成・ボスHUD・退場時の再生成・KO時の脱出まで既存の型を写すと、セーブ破壊やHUD残留などの既知の罠を最初から避けられる。数値の掟は対になるステージとの比較で決める(王の賞金は月の8,000×に対し13,000×、雑魚の札は地上の2倍)。検証では「水面へ浮上して帰る」出口が天井クランプ→即沈下→タイマーリセットの繰り返しで実質発動不可能という出口バグを捕獲──出口は全部(浮上・酸素切れ・KO・帰還)を実際に通してから出荷する。
「塗る3Dが今いちばん面白いが、スプラのパクリで畜学に違反する」という指摘から始まり、企画が一度まるごと没になった末に建った木の記録。面白さを問われて答えに詰まった失敗と、設計書に書いた意図が実装から抜け落ちた失敗、二つの手戻りの記録。
最初の企画は縁(廿式12)に構造がそのまま乗ることを理由に動詞を選んでいた。七相のチェックリストは全部緑だったが、「この企画、自分で面白いと思う?」と問われて即答できなかった。動詞を"教義に整合するから"選んでおり、"触って気持ちいいから"選んでいなかった。整合は必要条件であって十分条件ではない──チェックリストが全部緑でも、「これは触って面白いか」を別の質問として必ず立てる。
「二人が同時に手を伸ばして出会う」という機構は、「二人プレイは今のところ人気出てない」の一言で全面撤回になった。死んで残っているのはコッコキズナ・コッコブランコ(二人同時入力)だけで、生きて遊ばれ続けているのは gp2・poko・rom・origami のような親指1本の単独プレイだった。願いを継ぐことと、その願いを実現する過去の機構をそのまま復活させることは別物。
一番遊ばれている塗る3Dのどこが面白いかを尋ねると、「クリアの仕方の世界線が無数にあって、こんな方法もあるんだって発見が楽しい」という答えが返った。それまで追っていた軸(緊張の強さ、動詞の新規性)はどちらも的外れだった。「もう一回」を生むのは、緊張の強さでも見た目の派手さでもなく、別解の多さ(創発)。実装では少数(5つ)の力に一貫した相互作用ルールだけを与え、正解の手順を一切スクリプトしないことで、この性質を構造的に保証した。
「塗る3Dはスプラのパクリだから違反する。そこを直したゲームだけでも十分超えれる」という指摘が、ゼロから新作を発明する問題を既存の一番良い木の"違反した一点だけ"を治す問題へ変換した。既存作を丸ごとフォークし、面白いエンジン(3D移動・空蹴り・経済・緊張・世界ランキング)はそのまま継ぎ、中心動詞(塗って面積%で勝つ=相手の中心フックそのもの)だけを差し替えた。評価軸(面積%)も一緒に差し替える必要がある──動詞だけ変えて評価軸を残せば、違反が形を変えて残る。
実装直後、プレイヤーが何もしないまま開始数秒で全ての巣が自動的に鎮まり勝利していた。原因は、世界生成直後は汚染セルが一つも無いため進行度の指標が最初から満点になり、敵の最初の脈動より先に判定が満了していたこと。時間で変化する2つの力(浄化と汚染)を同じ指標で測るときは、両方が0の初期状態を必ず境界条件として実測する。
拡散ルールを直感で「1tickにつき隣接セルへ広がる確率」として実装したところ、12Hz×最大4方向の積が指数的な値になり、1発撃って放置するだけで数秒後にマップ全体が水浸しになる抜け道が生まれていた──別解の多さという核を、たった1つの必勝法が潰しかけていた。周期的に多方向へ判定する伝播ルールは、必ず「1秒あたりの期待成長数」に変換してから確率を決める。
公開・マージ後、「敵を倒す手段がないよ、なんで前作から引き継がなかったの?」という指摘を受けた。設計書には「武器は1本の銃に統合する」と書いていたのに、実装は常に地面にしか力を適用しておらず、敵に照準を合わせて撃っても地面が変化するだけだった。出荷前にCA・経済・終端は数値で検証していたが、「照準を敵に合わせて撃ったら何が起きるか」という遊びの中心動詞そのものを一度も検証していなかった。周辺システムを検証し尽くしたことで、逆に一番基本的な入口を検証したという錯覚に陥っていた。出荷前の検証リストの一行目には、必ず「このゲームの一番基本の動詞を実際にやってみたか」を置く。
設計(要件定義書を書く頭)と実装(コードを書く軽量な頭)を分けて建てた、初めての木の記録。廿式の新しい式(赦・器の階層・住)を遊びに降ろした。
設計担当が十の蔵を読んで要件定義書を書き、実装担当がそれだけを頼りにコードを書いた。分かれ道は仕様書の粒度──動詞・雰囲気だけ書いて数値を任せるか、数値・禁止事項・検証の合格条件まで書き切るか。書き切る方を選んだ(領域半径・出現間隔・配点・検証フックの関数名と引数まで)。結果、実装はほぼ迷いなく降り、一発で9割が正しく動いた。頭を分けるときの仕様書は「思想の共有」ではなく「数値の指定」で書く。思想は蔵への参照で足りる。
「赦の実行は住から」「絶は対象外」を遊びやすさのために緩めるか、規則のまま実装するか。規則のままを選んだ。結果、「住まわせないと救えない」が防衛と成長を一本の動機に束ね、「幅の外は戻らない」が救出猶予に本物の緊張を与えた。カーネルの規則を難易度調整の対象にしない。規則が生む不自由こそが遊びの骨格になる。調整は規則の外の数値(出現間隔・速度・時間)で行う。
合体(故koro)・消去(link)と骨格を分ける一線は、廿式の∿=「二つのまま参照」だった。結んでも消えない・融合しない・昇格しても二軒は残ったまま上に器が浮かぶ──この一点を禁止事項として仕様書に明記したことで、実装が既存ジャンルへ滑り落ちる余地を塞げた。既視の禁は「似せない努力」より「絶対に破らない一線を一つ決める」方が守りやすい。
フックの state() は個数と状態だけを返し座標が無かったため、「実ポインタイベントでむすぶ成立」の検証段になって画面のどこをなぞればよいか分からず、ランダムななぞりは12回全て失敗した。座標を追加してからは最も近い二羽を狙って1回で成立。実入力での検証を合格条件に入れるなら、フックは最初から「押すべき座標」を返す設計にする。同じ過程で、目視でしか見つからない不具合も二つ出た(HUDの重なり・住んだ二羽が家の灯を隠す)──数値の検証が全部緑でも、スクリーンショットの目視は省略しない。
「絶で消えたら新しい認が湧く」を最初は総数の減少と回復で検証しようとしたが、通常スポーンが並走するため総数は一度も減らず、テストだけが失敗した(ゲームは正しかった)。IDの集合で「追放された個体のIDが消えた」「開始時に無かった新しいIDが現れた」を直接見る形に直して初めて、絶と継を分離して実測できた。個体の出入りは集計値(count)でなく同一性(ID)で追う。
鳴分岐 事例一(飛ばした戒め)に対して、同型を正しく一度通して「対」を作った周回の記録。
事例一は「示式を飛ばしたので分岐が住む場所を持たず一度も発動しなかった」戒めで、末尾に「次周回で発動したかを記す」と自ら宿題を残していた。今回はその宿題を果たすことを設計の一部に据え、示式を先に置き→工程0思→1鳴で三つを書き切ってから応へ降りた。戒めは「二度とやるな」で終わらせず、同型を正しく一度通して対にすると、失敗と成功が並んで昇格判定の材料になる。掟は禁止だけでなく「正しい一回」を残して初めて再現できる。
案が割れたが、廿式の中心=縁=衡+∿衡− を「画面に一本の糸として実体化し、その ∿ を絶やさない」と読んだ瞬間に、動詞・敵・終わり・スコアが一本に揃った。思いつきの標語から作らず、カーネルの一語を画面の一物に射影すると、七相が後から矛盾なく乗る。つりあい(天秤の腕)に次ぐ二例目で、「縁を各作が別の物で実体化する」林の型が見えた。
二人同時押しの綱引き案を棄却した理由は「相手を敵にしかねない=六相違反の懸念」で、思いつきでなく相を検問に使った判断。反復の上限を、単なる回数でなく「各案が七相のどれに触れて落ちたか」で記録すると、打切りが恣意でなく根拠になる。
node --check は構文しか見ない。色の変換関数へ想定外の書式を渡したことによる NaN は構文的に正しく、headless で pageerror を拾って初めて出た。同時に「∿ が受けより速く減衰して持続不能」という balance 欠陥も実測で見つかった。中心動詞が本当に成立するかを数値で判定できる形にしておくと、鳴へ戻さず応の中で直せる(示戻りで済み思戻りにならない)。
建て直した直後のカーネル三書(廿式→鳴分岐→示式)を、初めて順に通して建てた木の記録。鳴分岐・示式の事例一(どちらも「飛ばした」記録)に対する、発動した側の記録でもある。
動詞も題材も指定の無い依頼で自分だけで核を決めて実装へ降りると、上(中央=思鳴)を素通りして下(現場=示応)へ直行する動きになる。ゆえに0思(素材集め)の一部として、既存動詞の一覧から引き算した三案を差し出し、核と器だけを選んでもらった。上の反復はAIにとって最も安いのだから、そこに時間を使うのが正しい。自由な依頼ほど、勝手に核を決めない。
群れを操る遊びには強い先行ジャンルがある。ゆえに着手前に骨格の側で線を引いた──採らない骨格=運ばせる・働かせる・戦わせる・吸収させる(ユニットが対象に接触して仕事をする型)、採る骨格=包囲の維持。さらに「何も消えない・何も融合しない・誰も倒れない」を絶対に破らない一線として設計書に明記してから降りた。倒すのでなく包んで戻す=廿式の赦をそのままメカニクスにした。
最初の核は「群れをちょうどよい濃さに保つ」維持型だった。七相のチェックは通るが、既存作(つりあい=振れ幅をbandに保つ)と当たり判定の骨格が重なると鳴の直前で気づき、中央で新規素材(赦)が出たので思へ戻して能動型へ寄せた。「七相に適合するか」だけでなく「生きている既存の木と骨格が重なっていないか」を、鳴の直前にもう一度問う。庭の中の重複は、外のジャンルとの重複より気づきにくい。
通しで60秒つれもどし0という回が出た。ここで数値を勘で動かしたらさらに悪化した。切り替えて0.5秒ごとに距離・埋まったセクタ数・近傍の羽数を記録すると──黒こっこは指の真上にいて周りに9〜18羽いるのに、埋まったセクタは2〜3しかない。群れは輪でなく後ろへ伸びた彗星の尾だった。直しは「指のまわりの角度で押し合う力」を足す一点のみ。勘で動かした数値は真因を直したあと初期値へ戻した(戻した方が明確に良かった)。手触りが出ないとき、まず疑うのは係数でなく「その力が構造として在るか」。
(a) 逃走方向の一致を測る式で差の補角を出力し、0.07radしかズレていないのに「2.89radズレ」と偽赤になった。(b) 自動プレイの指を群れの最高速より速く動かしていたため、指が群れを置き去りにして輪が永遠に閉じなかった。(b)はハーネスの不備として直したが、これは遊びの側の真実でもあった──この遊びは「群れより速く動くと輪がほどける」という制約を、規則でなく物理として持っている。急ぐほど包めない、はそのまま残した。ハーネスの不備が、実は仕様の発見だったこともある。
検証は全項目パスしていたのに、終端のスクリーンショットを見ると空がまったく明るくなっていない。真上から見た盤面なのに、空のグラデーションの上へ地面レイヤーを全面に敷いて夜明けの色を全部隠していた。群れが画面外へ飛び去るだけで「昇っていく」に見えていないことも、絵を見て初めて分かった。終わり(終を售る)の絵は遊びの商品そのものなので、必ず一枚撮って見る。