Isaac モッド作成ワークフロー
Binding of Isaac の API 名がもっともらしく聞こえるからといって、決してでっち上げてはいけません。 もっともらしい名前は根拠になりません。検索してください。もし見つからなければ、UNVERIFIED と報告してください。
タスクのルーティング
- 編集前にユーザーのモッドを調査する:
metadata.xml、main.lua、コンテンツ XML、インクルード、依存関係のコピー、ターゲット/バージョンメモ。 - ターゲットビルドと、REPENTOGON/ライブラリが利用可能かどうかを特定する。指定がない場合は、リポジトリのピンを調査のベースラインとしてのみ使用する。ユーザーのインストール済みランタイムがそのピンと一致する、または将来互換性があると主張してはならない。
- リクエストをスコープ、所有権、ライフタイム、協力プレイ、リソース、依存関係、互換性、パフォーマンス、テスト要件に変換する。ボス/キャラクター/ステージまたは大規模システムの場合は、まず簡単な仕様を書く。ビジュアルが変更される場合は、必要なアセットを棚卸しし、グラフィックス制作ルール を読む。アートは必要なときだけ作成し、最終的な PNG/ANM2 作業の前にシート/アニメーション契約を定義する。
- indexes/tasks.json、エイリアス、次に正確な シンボル を検索する。knowledge/INDEX.md と、関連ドメインについてのみ生成されたソースリンク付きレコードを読む。
- REPENTOGON が有効な場合は、バニラと REPENTOGON の両方のレコードを検索する。そのターゲットに対しては、明示的な変更レコードが優先される。
- コールバックのセマンティクス、バージョンの精度、競合/問題、実現可能性、ローカル協力プレイ、状態のライフタイム、XML/リソース、パフォーマンス、互換性を確認する。
- 依存関係ラベル付きのパターンを選択する。スキャフォールドとゴールデンな静的リファレンスを区別する。
runtime_tested: falseはゲームプレイ検証済みを意味しない。 - 最小限のアーキテクチャ互換の変更を実装する。既存のモジュール、ID、コールバック、ヘルパー、スタイルを再利用する。プロジェクトを理解する前に、
main.luaを置き換えて作成しない。 python scripts/validate_kb.py --project <mod-folder> --ecosystem <vanilla|repentogon>と、prompts/配下の関連する監査を実行する。- 依存関係、使用した正確な証拠、検証の制限、対象となるゲーム内テストを報告する。
精度が必要な場合の検索方法:
- 正確な API/列挙型/XML については indexes/symbols.json を検索する。
- 引数、フィルター、戻り値、REPENTOGON の変更については indexes/callbacks.json を検索する。
- 自然言語の用語については indexes/aliases.json を検索する。
- 症状ベースのルーティングには indexes/errors.json を使用する。
- 異常な作業の前には knowledge/feasibility.md を使用する。
- 正確なセマンティクスについては、無視されている
.cache/upstreams/<source>/チェックアウト内のレコードのsource_pathを読み、その HEAD をレジストリピンと照合する。ずれがある場合は、git show <pin>:<path>でピンされたファイルを読み、新しいチェックアウトをピンされた証拠として扱ってはならない。ファイルが存在しない場合は、キュレーションされた安全な更新ワークフローを実行し、新しいピンを受け入れる前にソースのずれを確認する。
現在のネイティブな REPENTOGON およびメンテナンスされているライブラリのオプションを比較するまでは、ステージ、カスタム体力、ミニマップ、設定、実績、または完了システムを再実装してはならない。IsaacScript/TypeScript またはライブラリを通常の Lua に混在させてはならない。ただし、プロジェクトですでに使用している場合、またはユーザーが受け入れた場合はこの限りではない。
譲れないチェック
- コールバックの引数、フィルター、戻り値の型、キャンセル/置換の動作、および REPENTOGON がバニラのコールバックを変更するかどうかを確認する。
- 正規化されたレコードでクラスメンバーのスペルとバージョンバッジを確認する。
- 現在のレコードまたは抽出されたローカルリソースから、エンティティのタイプ/バリアント/サブタイプと XML 属性を確認する。数値 ID やリソースパスを推測してはならない。
- プレイヤーステータスとファミリア数にはキャッシュコールバックを使用する。文書化されている場合は明示的なコールバックフィルターを使用する。測定され、狭くフィルターされていない限り、フレーム/レンダリングコールバックでの部屋全体のスキャンを避ける。
- プレイヤーの所有権とローカル協力プレイを明示的にする。プレイヤーインデックスが 0 であると想定してはならない。
- セーブデータは JSON セーフにする。ランの開始後にのみロードし、文書化されたライフサイクルポイントで保存する。古いまたは部分的セーブをデコードするときはデフォルトを保持する。
- インストール済みのゲームアセットをコピーまたは変更してはならない。派生パスメモは許可される。
- グラフィックスはゲームアセットとして扱う: 実際の PNG クロップ、ANM2、Lua/XML、アニメーションイベントに一致させる。プレースホルダーは開発中に限り、最終版ではない。ゲーム内のビジュアルテストが観察されない場合は、
visual_runtime_tested: falseを記録する。
タスクに必要なものだけを読む
- API/コールバックの質問: 生成されたカタログと knowledge/callbacks/critical-callbacks.md。
- XML/リソース/アニメーション/ルーム作業:
knowledge/内の該当するガイドとschemas/内のベンダースキーマ。 - 新しいスプライト、コスチューム、リテクスチャ、またはアニメーション作業: グラフィックス制作、契約テンプレート、ビジュアル QA。
scripts/gfx_audit.py <mod-folder>を実行する。最終アセット/準備完了ゲートには--releaseを使用する。 - 実装: patterns/INDEX.md と該当するパターンファミリー。
- デバッグ: knowledge/debugging/decision-tree.md。
- ライブラリ: knowledge/libraries/index.md; ライブラリを呼び出す前に、そのライブラリの現在の公開ドキュメント/コードを読む。
信頼できるリファレンスに要求された API が含まれていない場合は、インデックス化されたリビジョンでは未確認または存在しないと報告する。代替をでっち上げてはならない。