rpgjs-studio について
rpgjs-studio は、RPGJS Studio インスタンスのコンテンツ管理に使うスキルです。ゲームデータ、マップ、イベント、メディアの API 操作に加え、生成とクレジット確認の手順を案内します。
主な機能
- 01RPGJS Studio REST API のガイド
- 02ゲームデータベースとイベント操作
- 03マップ生成ワークフロー
- 04メディア生成と課金の案内
- 05ローカルプロジェクト情報の管理
活用シーン
- 01ゲームレコードの作成や更新
- 02進捗を確認しながらのマップ生成
- 03クレジット確認後のメディア生成
- 04イベント内容の確認や編集
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rsamaium/ rpg-js --skill rpgjs-studioインストール後、Claude Code で/rpgjs-studioを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/blocks.mddatabase.mdevent-examples.mdevents.mdmaps.mdmedia.mdmmorpg.mdproject-env.mdsettings.md詳細
RPGJS Studio API スキル
このスキルを使用して、RPGJS Studio インスタンスに対するコンテンツ管理タスクを実行します。
公開ゲームデータベースの読み取りでは、プロジェクトごとにアクターと敵の外見を一括で解決し、メディアリンクと明示的なオーバーライドを保持します。レスポンスの動作については、references/database.md を参照してください。
画像とシネマティックの生成
新しいキャラクターには、type: "spritesheet" と metadata.generationMode: "idle" を使用して、5 クレジットで 2×2 グリッドに配置された 4 つの静止ポーズ(下、左、右、上)を含む、透過背景の 1024×768 画像を作成します。Studio は /media/apps/character-editor/:id を開きます。そこで spritesheet.ai を通じて、アイドルシートを参照画像として使用し、ベースキャラクターに関連付けられた個別のメディアとして名前付きアニメーションを作成します。既存のスプライトシートアニメーションのリクエストは引き続き 15 クレジットです。references/media.md を参照してください。
Studio エディターで削除する場合は、references/media.md に記載されている、プロジェクトスコープのキャラクターアニメーションエンドポイントを使用してください。アニメーションの参照と保存済み画像をまとめて削除します。
Base64 の参照では MIME パラメーターを使用できます。text/xml を含め、MIME ヘッダーがない場合や誤っている場合でも、認識された PNG/JPEG/GIF/WebP のシグネチャが優先されます。無効な参照の場合は HTTP 400 を返し、起動時の引き落とし分を返金します。
メディア生成では、キューに追加する前に、実行時に従量課金制の API キークレジットを引き落とします。見積もりでは引き落としません。起動時の失敗は返金され、実行の最終的な失敗には永続化された返金手順が適用されます。queued レスポンスは受け付けを示すだけです。返されたインスタンスをポーリングしてください。課金と参照の保存動作については、references/media.md を参照してください。
イベントで動画を再生するには、show_cinematic を { "video": "media-id", "allowSkip": false, "bgm": "pause", "preload": true } とともに使用します。必須なのは video のみです。スキップと事前読み込みはデフォルトで true です。bgm のデフォルトは "duck"(音楽の音量を 15% にする)です。"pause" を指定すると、その後に音楽を再開します。隣接する動画ブロックは 1 つのオーバーレイを共有します。詳細は references/media.md を参照してください。マップと動画の関連付けは不要です。
マップの直接生成リリース
ユーザーが指定した言語で、希望するマップのビジュアルスタイルを objective に記述します。ジェネレーターはそのスタイルに従い、objective に指定がない場合に限り、高解像度のピクセルアートをデフォルトとして使用します。地形と壁の素材は、コンセプトアートの方向性を維持します。references/maps.md を参照してください。API ペイロードに別途 style フィールドを追加しないでください。
アシスタントを使わずに生成する場合は、references/maps.md の永続的なワークフローと直接進捗のセクションを読んでください。既存の prepare/execute エンドポイント、明示的なクレジット確認、プロジェクトスコープのステータス、中間プレビューを使用します。保存済みの結果を提示する前に、finalized: true と mapId があることを必ず確認してください。ワークフローのステータスだけから完了を推測しないでください。安全なスポーン地点は上流の RSamaium/RPG-JS#367 で追跡されています。ローカルで衝突回避の暫定対応を実装しないでください。
入力
- 現在の作業ディレクトリに
RPGSTUDIO.mdファイルがあるか確認します。 RPGSTUDIO.mdがある場合は、ローカルプロジェクトのコンテキストとして扱い、最初に読みます。- 以下のような永続的な値を復元するために使用します。
BASE_URL- API の使用に関する、その他のプロジェクト固有の指示
projectIdを復元、要求、または保存しないでください。API キーは RPGJS Studio プロジェクトにスコープされているため、ユーザーが要求したリソースを直接操作します。RPGSTUDIO.mdがない場合は、通常どおり続行します。- ユーザーから指定があれば、その値を
BASE_URLとして使用します。 - ユーザーが別のホストを指定していない場合は、
BASE_URLをhttps://rpgjs.studioに設定します。 - API キーは環境変数
RPGSTUDIO_API_KEYから読み取ります。
必須の起動ワークフロー
- API を呼び出す前に、
RPGSTUDIO_API_KEYが存在するか確認します。 RPGSTUDIO_API_KEYを確認する際は、ターミナルに値を表示したり、応答にその値を含めたりしてはいけません。- 変数が存在しないか空の場合は処理を中止し、まず
${BASE_URL}/api-keysで API キーを作成してから、RPGSTUDIO_API_KEYをエクスポートするようユーザーに伝えます。 - 次のヘッダーを使用して認証済みリクエストを構築します。
-H "x-api-key:$RPGSTUDIO_API_KEY"
-H "Content-Type: application/json"
- HTTP 呼び出しには
curlを優先します。明確な理由がある場合に限り、別の HTTP クライアントを使用します。 - 認証エラーが発生した場合は、直ちに処理を中止します。API が無効なキーを示す応答、
401、または403を返した場合は、キーを確認するかサポートに問い合わせるようユーザーに伝えます。 - ユーザーのタスクに一致する参照ファイルだけを読み込みます。
references/database.mdreferences/maps.mdreferences/events.mdreferences/event-examples.md
references/blocks.mdreferences/media.mdreferences/settings.mdreferences/project-env.mdreferences/mmorpg.md
ローカルメモリファイル
現在のプロジェクト用の軽量なローカルメモリファイルとして、RPGSTUDIO.md を使用します。
- ファイルが存在する場合は、最初に読み込みます。
- すでに保存されている値を再利用し、同じことを再度尋ねないようにします。
- タスク完了後、実行中に判明した、機密情報ではない安定したコンテキストを使って、ファイルを更新または作成します。
一般的な内容:
- 最後に使用した
BASE_URL - 今後の呼び出しに役立つ、プロジェクト固有の規約やメモ
プロジェクトの選択に RPGSTUDIO.md を使用してはいけません。現在の RPGSTUDIO_API_KEY が対象プロジェクトをすでに特定しているため、ユーザーのリクエストに直接取りかかります。
このファイルに秘密情報を保存してはいけません。
RPGSTUDIO_API_KEYを保存してはいけません。RPGSTUDIO_API_KEYを表示してはいけません。- 秘密情報の生の値をログ、ターミナル出力、または Markdown にコピーしてはいけません。
リクエストのパターン
ベースコマンドを一度定義し、繰り返し使用します。
BASE_URL="${BASE_URL:-https://rpgjs.studio}"
curl -sS \
-H "x-api-key:$RPGSTUDIO_API_KEY" \
-H "Content-Type: application/json"
書き込み操作では、次を優先します。
curl -sS -X POST "$BASE_URL/..." \
-H "x-api-key:$RPGSTUDIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{...}'
実行ルール
- まずリソースのドメインを特定し、該当する参照ファイルを読み込みます。
- REST のセマンティクス(
GET、POST、PUT、DELETE)を使用します。 - 作成または更新の前に、外部キーを解決します。
/api/media?query=<search>でメディアを検索します。/api/database/:type?query=<search>でデータベースレコードを検索します。- 一致する依存レコードが見つかった場合は、返された
_idを再利用します。 - 見つからない場合は、先に作成してから、返された
_idを使用して続行します。
- プロジェクトを選択するためだけに、プロジェクト一覧エンドポイントを呼び出してはいけません。API キーによってプロジェクトのコンテキストが決まります。
- ゲームオブジェクトの作成をユーザーが依頼した場合は、まず有効な最小限のペイロードを送信し、タスクでさらにフィールドが必要な場合に限り内容を追加します。
- 推測した ID ではなく、API が返した ID を再利用します。
- 読み取り、更新、または削除のタスクでユーザーからデータベースの
_idが指定された場合は、ペイロードを決めたり内容を報告したりする前に、まずGET /api/database/:type/:idを呼び出して既存のレコードを確認します。 - エンドポイントの形式が不明な場合は、近い
GETエンドポイントの応答を先に確認し、実際のペイロードに合わせて対応します。 - 認証エラー後に処理を続行してはいけません。
- 不足している依存データの用意に AI メディア生成が必要な場合は、必ず最初に統合メディア生成エンドポイントを
action: "estimate"で呼び出します。 - 見積もり後、必要なクレジット数をユーザーに伝え、
action: "execute"を呼び出す前に確認を求めます。 - この見積もりと確認の手順を踏まずに、AI メディア生成を開始してはいけません。
POST /api/maps/generateでは、AI マップ生成のワークフローとエンドポイント固有の失敗時の動作について、references/maps.mdに従います。- 最終応答では、作成、更新、または削除したレコードを正確に要約します。
- タスクを通じて
BASE_URLやローカルの規約など、安定したプロジェクトのコンテキストが判明した場合は、今後の実行に備えて、その機密情報ではないコンテキストをRPGSTUDIO.mdに保存します。
Common checks
databasetask: read references/database.mdmaptask: read references/maps.mdeventtask: read references/events.mdevent exampletask: read references/event-examples.mdevent workflow blocktask: read references/blocks.mdmediatask: read references/media.mdsettingstask: read references/settings.mdproject envtask: read references/project-env.mdMMORPG publicationtask: read references/mmorpg.md
Current schema notes
- 認証済みの Studio セッションでは、
POST /api/mmorpg/publishを使って現在のプロジェクトを公開できます。公開では、更新を送信する前にすべてのマップを準備します。失敗時には、安定したcode、stage、および任意のresourceIdが返されます。レスポンスの仕様については、references/mmorpg.mdを参照してください。GET /api/mmorpg/publicationは、このプロジェクトの MMORPG が正常に公開されたかどうかを報告し、プレイ可能な URL を返します。 準備処理では、その公開中に限りソースの読み取りをキャッシュします。RPG-JS #374 に向けたバージョン管理された R2 公開とアクティブなルームのみに対する反映は、フレームワークの作業ツリーで実装済みであり、MMORPG_PUBLICATIONSを通じて Studio のローカル設定に統合されています。リリースと本番環境への統合は保留中です。統合する前に、references/mmorpg.mdのフレームワーク API のセクションをお読みください。 - 動作が会話ひとつだけのキャラクターイベントでは、
onActionトリガーのtriggers[].typeData.dialogueに会話を直接保存できます。ブロックコレクションは必要ありません。先にgraphic(spritesheet)とfacesetのメディアを両方解決してください。いずれかのタイプに適切な結果がない場合は、確認を求めたうえでの生成を提案してください。faceset の生成を明示的に拒否された場合は、faceset を省略できます。ユーザーがすべてのアセット生成を明示的に禁止した場合は、検索で見つかった整合性のある外観 ID を使って機能するイベントを作成し、存在しないgraphicまたはfacesetは省略してください。 - データベースアイテムを販売するキャラクターには、正規のショップワークフローを使用してください。
priceが正の実際のアイテムを解決または作成してから、その_idを参照するcall_shopブロックをひとつ作成します。RPGJS のショップは、アイテムを付与する前に価格を請求します。手動で選択肢/ゴールド/アイテムの分岐を作成したり、仮のリソース識別子を使ったりしないでください。 - マップ生成の
followUpPlan.events[]では、ピクセル単位の任意のposition: { x, y }を指定できます。位置はwidth * 48×height * 48の範囲内でなければなりません。Studio は簡潔なイベントマップコンテキストを使って検証し、値がないか無効な場合はマップの開始位置にフォールバックします。 - 新しいアシスタントによるマップ生成には、保存される説明、任意のソース
assistantConversationId、および{ id, title, description, prompt }を含むfollowUpPlan.musicの提案が含まれます。過去の API クライアントでは、会話 ID と音楽の提案を省略できます。 show_textブロックではinputEnabled: trueを設定できます。その場合は、送信された文字列または数値を格納するデータベース変数の_idであるinputVariableIdも指定する必要があります。入力がキャンセルされるとnullが格納されます。型付き入力のオプションについては、references/blocks.mdを参照してください。- マップ、イベント、ブロックコレクション、データベースレコードでは、既存の一覧エンドポイントに
queryを指定することで、多言語のセマンティック検索を利用できます。任意のminScoreパラメーターは0..1を受け付け、デフォルトは0.40です。エンドポイント固有のフィルターとレスポンス形式については、該当するリソースのリファレンスを参照してください。 - プロジェクトの環境変数は、認証が必要なプロジェクトルートで管理します。
GET /api/projects/:projectId/env、PUT /api/projects/:projectId/env/:name、およびDELETE /api/projects/:projectId/env/:name。プレーン値はレスポンスに返されますが、シークレット値についてはisSetのみが公開されます。シークレット値をログに記録したり、出力したりしてはいけません。 - プレイ可能なキャラクターは、
/api/database/actors配下のデータベース Actor です。公開ランタイムデータベースには Actor が含まれ、公開プロジェクトではmainActorIdが公開されます。これにより、新しいゲームでプロジェクトのヒーローを事前選択できます。 - プレイ可能なアイデンティティは、
/api/database/classes配下のデータベース Class です。新しい Actor には有効なclassIdが必要です。これを持たない既存のレガシー Actor は、引き続き読み取り可能です。Class はname、description、icon、およびレベルで習得できるskillsを所有し、Actor は外見、ステータス、インベントリ、装備を所有します。いずれかの Actor に割り当てられている Class は、それらの Actor を再割り当てするまで削除できません。 - キャラクターのスプライトシートのメタデータには
illustrationを含めることができます。これは、透過背景の 4:5 JRPG キャラクターイラストのメディア_idであり、そのスプライトシートを使用するすべての Actor に継承されます。AI 生成タイプillustrationのコストは 5 クレジットです。 - データベースの作成および更新時の検証では、非 nullable フォームフィールドの
nullは未指定値として扱われます。JSON Schema でdefaultが宣言されている場合は、代わりにそのデフォルト値が適用されます。明示的な0と明示的に nullable なフィールドは保持されます。{ "hitbox": { "width": null, "height": null } }のように、未指定値だけを含む任意のオブジェクトグループも省略されます。検証エラー400では、最初の無効なフィールドがmessage内のドット区切りパスで示されます。例:{ "message": "parameters.pdef.start: Required" }。 menus.characterSelectは、新規ゲームの Actor セレクターを設定します。settings.allActors: trueですべての Actor を対象にするか、settings.actorIdsに Studio Actor の_idを順序付きリストで指定できます。選択内容はプレイヤー/セーブごとに保持され、mainActorIdは変更されません。- イベントワークフローでは
call_character_selectを使って同じセレクターを開き、change_classを使ってアクティブなプレイヤーに Class を割り当てられます。セレクターでは、すべての Actor または順序付きの一意なサブセットを表示でき、任意でキャンセルを許可できます。Actor の選択を適用しても、獲得済みの進行状況は保持されます。正確なペイロードについては、references/blocks.mdを参照してください。 - マップでは、
version: 1、mode: "control-texture"、ピクセル単位のwidth/height、tileSize、palette、およびcontrolTextureのメタデータを含むシェーダー地形terrainLayerオブジェクトを公開できます。コントロールテクスチャは RGBA8 です。地形パレットのインデックスはR + G * 256でエンコードされ、任意のライトにはBを使い、128が中立値です。Aはピクセルブラシのストロークに対する地形マスクのカバー範囲を格納します。ソフトエッジは、描画時にトランジション/ブレンドのメタデータから計算されます。従来のタイルグリッドはtileSize x tileSizeブロックに正規化されますが、ブラシ編集ではコントロールテクスチャ内の個々のワールドピクセルを更新できます。 - Studio の地形描画を再現する必要があるゲームやエディターとの統合では、
@rpgjs/render-map2dを使用してください。ホスト側で地形画像とコントロール画像をデコードし、normalizeTerrainMap()とprepareTerrainMap()を呼び出してから、renderTerrainRegion()でワールドに位置合わせした領域を描画します。Angular、Pixi、または CanvasEngine のアダプターで、道路、カーペット、ナインスライス、水、またはモルフォロジーのピクセルを再実装しないでください。 POST /api/map-generationsは、マップの作成と編集に使う、プロジェクトスコープの確認済み Cloudflare Workflow です。任意の地形/エレメントセット参照を受け付け、不足しているアセットを生成し、セマンティックな地形パターンを抽出して地形/モルフォロジーを構築し、分離されたエレメント位置を保持したうえで、最終マップを保存します。prepare、明示的な確認、execute の順に実行し、返されたインスタンスがcompleteになるまでポーリングしてください。レスポンスには最終的なmapIdが含まれます。失敗して終了したレスポンスでは、返金/再試行のフラグが公開されます。また、POST /api/map-generations/:instanceId/retryは、前回の試行が返金された場合にのみ新しいインスタンスを開始します。対象を絞った編集では正規化されたポリゴンを使用し、省略された場合は現在のアセットを継承します。詳細はreferences/maps.mdを参照してください。- マップでは、
version: 1、mode: "terrain-morphology"、ピクセル単位のwidth/height、tileSize、およびfeatures[]を含む地形モルフォロジーレイヤーterrainMorphologyLayerオブジェクトを公開できます。各フィーチャーは{ kind: "hole", params, strokes }または{ kind: "wall", params, strokes }のいずれかです。ストロークにはワールドピクセル単位のpoints[]とradiusが格納されます。穴のパラメーターでは、depth、roundness、roughness、任意の正面textureId、任意の底面塗りつぶしfillTextureId、0..100に制限されるfillHeight、および穴ごとに任意指定できるwaveIntensity、waveDirection、waveSpeedがサポートされます。波のフィールドを省略するとマップのwaterAnimation値が継承されますが、waveIntensity: 0の場合、塗りつぶしは静止したままです。textureIdは底面塗りつぶしの代替として使われません。壁のパラメーターでは、height、roundness、roughness、任意の正面textureId、surfaceTextureId、trimTextureId、baseTextureId、およびrenderMode: "procedural" | "collision-only"がサポートされます。collision-only で生成された壁は移動を阻止しますが、見た目の描画はwallSurfaceLayerに委ねます。wallStyle: "rock"は、岩の縁と床面の接触影を備えた層状の岩肌を描画します。Studio で掘った洞窟では、マップ全体を覆い、消去操作で掘り抜かれた壁にこの設定が使われます。Studio は岩壁にrockTexture: "masonry" | "natural"も保存します(手続き型の壁面テクスチャ。デフォルトはmasonry:切り石の層。natural:風化した不規則な岩肌)。textureIdがない場合、ゲームはエディターと同様に壁マスクからこれらの岩肌をピクセルごとに描画します。上部は明るく、足元は暗くなり、開口部の下側は最大でも 55% まで描画され、壁の基部に接触影が付きます。エディターの壁の滑らかさコントロールはroughness = 1 - smoothnessに対応します。レンダラーは、描画前に穴/壁マスクを符号付き地形レベルとして統合し、モルフォロジーのストロークを通行を妨げるセルとして地形コリジョンに統合します。Studio エディターでは壁と穴を描画時に相互に打ち消します。穴の上に壁を描くと、その部分の穴は消えて歩行可能な地面に戻り、壁の中に穴を描くと、その部分の壁は消えます。そのため、保存されるマップには通常の描画操作と消去操作だけが含まれます。 - 生成されたマップでは、
version: 1、mode: "wall-surface"、マップピクセル単位の寸法、materials[]、および外部 RGBA8controlTextureを含むwallSurfaceLayerを公開できます。Rは 0 始まりのマテリアルインデックス、Gは0=void、1=top、2=face、3=trim、Bは予約済み、Aはカバー範囲です。各マテリアルは、専用の上面、壁面、縁取りのテクスチャ ID と、任意の基部 ID を参照します。Studio はこれらのマスクをピクセル単位で正確に描画し、壁のコリジョンのモルフォロジーとともに編集/取り消しを行います。PUT /api/maps/:mapIdは、wallSurfaceLayerと base64 のwallSurfaceControlTextureから編集内容を保存します。API は PNG をマップドキュメントの外部に保存します。 - マップでは、マップレベルの液体アニメーションのデフォルト値として
waterAnimation: { enabled, speed, intensity, direction }を公開できます。directionはスクリーン座標系で時計回りの角度を表し(0は右、90は下)、デフォルトは90です。塗りつぶされた穴は、パラメーターで上書きされない限りこれらのデフォルト値を継承します。波のハイライトは固定の青い色合いではなく、各塗りつぶしのローカルな色またはテクスチャから生成されます。 PUT /api/maps/:mapIdは、セクション単位の部分更新をサポートします。省略されたマップフィールドは保持されるため、変更したセクションだけを送信してください。開始位置にはstartX/startY、配置にはevents、生成された壁のジオメトリにはterrainMorphologyLayerと任意のwallSurfaceLayer/wallSurfaceControlTexture、地形には地形フィールド、オブジェクトにはエレメントレイヤー配列、メディアの選択にはタイルセットのパラメーターを送信します。- マップでは、トップレベルのライティング設定として
lighting: { sun: { enabled: boolean, intensity: number } }を公開できます。太陽光の強度は0..1に制限されます。有効にすると、ランタイム/エディターとの統合で、壁、キャラクター、エレメントに自動的な影を表示できます。 - マップでは
mapLoadBlockCollectionId: string | nullを公開できます。設定すると、GET /api/game/maps/:mapIdはそのコレクションをmapLoadBlocksにハイドレートします。RPGJS Studio ランタイムは、プレイヤーがマップに入ったときに、サーバーのmap.onJoin(player, map)フックからこれらのブロックを実行します。このワークフローではプレイヤーとマップのコンテキストを利用できますが、現在のイベントのコンテキストはありません。 - イベントワークフローのビルダーでは、実行プロファイルを使用できます。
eventBuilderProfiles.mapLoadは、プレイヤー対応のマップコンテキストに必要なrequiredCapabilitiesを満たすブロックを公開し、互換性のあるスキーマから現在のイベントフィールドの選択肢を除外します。 - 地形メディアのメタデータでは、
sourceTexture、直接指定するrowsとcolumns、textureGrid: { columns, rows, tileSize? }、terrainTextures[]、およびtransitions[]を公開します。各terrainTextures[]エントリーは{ id, index, label, collision?, renderTileSize?, renderingStyle?: "pixel-art" | "hd-2d", defaultRenderMode? }です。indexはアトラスセルの正式な参照元です。collisionは、描画されたマップセルを通行不可としてマークします。renderTileSizeは、マップエディターのワールドピクセル単位で繰り返しテクスチャのサイズを制御します。省略された場合、従来の320パターンサイズがデフォルトになります。renderingStyle: "hd-2d"を指定すると、マップエディターで滑らかな拡大縮小が有効になり、メタデータを省略すると従来のピクセルアート描画が維持されます。defaultRenderModeはhard、fade、nine-slice、water、customをサポートします。hardはくっきりとしたエッジで、fadeはwidthを使用します。UI のgrass edgeプリセットはwidth: 12、curve: "sharp"のfadeとして保存され、草の縁として描画されます。nine-sliceはソースセルピクセル単位のcenter: { x, y, width, height }を保存し、その中央を繰り返しながら、描画済みの輪郭に沿って周囲の境界帯を投影し、フェードのにじみを常に防ぎます。waterは汎用の液体モードとして保存され、アトラスのテクスチャを維持しながら、アトラスセルの色からクリップされた色合い、岸辺の深さ、静的な波紋、エッジのきらめきを生成するため、溶岩/沼地/酸/油に固定の青い輪郭が付きません。不明なcustomモードは、shaderKeyが液体に類するものでない限り、エッジのハイライトにフォールバックします。transitions[]には地形 ID 間の例外ルール{ from, to, mode, priority? }が保存されます。これは生成された Wang トランジション行列ではありません。Studio での地形生成では、UI 上のデフォルトとして4x4のソーステクスチャアトラスが使われ、生成されたアトラスがそのまま保存されます。画像処理コンテナーを使った Wang/オートタイル出力の生成は行われなくなりました。生成リクエストではmetadata.sourceTextureColumnsとmetadata.sourceTextureRowsを設定できます。Studio はさらにterrainAtlasColumns、terrainAtlasRows、terrainStyleId、terrainStylePromptも送信するため、サーバープロンプトでシェーダー向けの継ぎ目のないマテリアルアトラスを構築できます。エレメントセット(tileset)の生成ではmetadata.terrainReferenceImageとmetadata.terrainReferenceMediaIdを渡し、既存の地形画像をスタイル互換性のガイドとして使用できます。画像データは実行時のみ使用し、保存してはいけません。 - プレイ可能なキャラクターの設定は、
/api/database/actors配下のデータベース Actor です。プロジェクトでは、選択された Actor の_idをmainActorIdに保存します。メインヒーローの取得または変更には、GET /api/database/actors/mainとPUT /api/database/actors/:id/mainを使用してください。Actor は外見、ヒットボックス、進行状況、インベントリ、アニメーション、スキルを所有します。 - Actor の
hitbox: { width, height }は、正の RPGJS ピクセル単位の寸法を使用します。省略された場合のデフォルトは32 x 32です。公開ゲームプロジェクトとオフラインエクスポートでは、mainActorIdをランタイム互換のhero、animations、skillsフィールドに解決します。 - データベースの Actor と敵は、
animationsで戦闘アニメーションのスプライトシートメディア ID をサポートします。対象はattack、hurt、die、castSpellです。 cast、Cast Spell、castspell、castSpell、castSkillという名前のリンクされたキャラクターアニメーションは、正規のanimations.castSpellフィールドに解決されます。Actor/敵に明示的な上書きが設定されている場合は、そちらが優先されます。- Actor と敵は、選択されたキャラクタースプライトにリンクされた faceset と名前付き戦闘アニメーションを自動的に継承します。これらのデフォルトを上書きする場合にのみ、
facesetまたは個々のanimationsメディア ID を設定してください。references/database.mdを参照してください。 - RPGJS のスターターランタイムでは、アクションバトル時にこれらのスプライトシートが使われます。攻撃アクション、ダメージ/被弾フィードバック、遅延付きの死亡時削除、スキル/詠唱の使用時に、設定されたスプライトシートへ一時的に切り替わります。
- データベースの敵は、
behaviorの下でアクションバトル AI オプションをサポートします。対象はenemyType、attackCooldown、visionRange、attackRange、dodgeChance、dodgeCooldown、fleeThreshold、attackPatterns、patrolWaypoints、groupBehaviorです。 - データベースの敵には、軽量なプレビューエンドポイントがあります。既知の敵 ID に対して
_id、name、graphicだけが必要な場合は、敵レコード全体を一覧表示または読み取る代わりにGET /api/database/enemies/preview?ids=<id1,id2>を使用してください。1 リクエストあたり、異なる ID を最大 100 件まで指定できます。 GET /api/eventsは、デフォルトで従来のイベント配列を返します。ページネーションされたレスポンスを使うにはpageまたはlimitを追加します。GET /api/events?page=1&limit=24は{ data, meta }を返します。ページネーションされたイベント一覧のデフォルトはsortBy=createdAt&sortDirection=descで、sortBy=createdAt|updatedAt|name、sortDirection=asc|desc、eventType=all|character|enemy|free、assignment=all|assigned|unassignedをサポートします。- データベースの Actor と敵は、
skillsの下でレベルに応じたスキル習得をサポートします。形式は{ skillId, level }です。 - データベースのスキルでは、
icon、animation、soundにメディア ID を設定できます。 - プロジェクト設定では、すべてのネイティブメニューで共有される、グローバルな
audio.uiのセマンティックキュー(navigate、confirm、cancel、open、close、error)をサポートします。一般的なアクションバトルのデフォルト値はcombatAudio(battleMusic、attack、skill、hit、hurt、die)に格納されます。どちらのグループも、Project Audio タブで編集できます。 - タイトル画面の BGM と画像は、
menus.titleScreen.settings.backgroundMusicとbackgroundImageで設定します。マップで戦闘音声を上書きすることはありません。データベースの敵は、audio.combatで戦闘 BGM と発生時/反応時の効果音を上書きできます。データベースのスキルでは、詠唱にsound、衝撃にimpactSoundを使います。すべてのサウンド値は Studio のメディア ID です。 - メディア生成タイプ
imageを使って、タイトル画面またはゲーム内のシーン全体を描いたアートを生成できます。生成されるのは、不透明で中央をクロップした 16:9 横長のメディアレコードです。透過背景の 4:5 キャラクターポートレートであるillustrationとは異なります。生成されたメディアの_idをmenus.titleScreen.settings.backgroundImageに使用してください。 - ゲーム/ランタイムのコードでは、
GET /api/game/media/:mediaIdを使って、ゲーム内で使用可能なメディアデータを読み取れます。詳細はreferences/media.mdを参照してください。 - メディアタイプを変更する場合は、メタデータのみを変更する管理者用エンドポイントではなく、
PUT /api/media/update/:mediaIdを使用してください。これにより、metadata.typeとルートのtypeフィールドが同期されます。 GET /api/game/maps/:mapIdのゲームマップレスポンスは、可能な場合、イベントのparams.graphic、params.faceset、triggers[].graphic、triggers[].facesetをメディアオブジェクトとしてハイドレートし、アクティブページのヒットボックスをevent.hitbox: { width, height }として公開します。ランタイムのレスポンス形式については、references/maps.mdを参照してください。- イベントワークフローのブロックでは、
call_common_eventとspawn_common_eventを使って、再利用可能なゲームイベントを呼び出したり、生成したりできます。どちらもcommonEventIdを使用します。spawn_common_eventは、位置をplayer、current_event、variable、fixedのいずれかから解決できます。 - イベントページのトリガーには、ページペイロードで
trigger: "player_touch"とtrigger: "event_touch"を使用します。ランタイムのトリガーペイロードでは、どちらもtype: "onTouch"として保存され、typeData.touchTarget: "player" | "event"で区別されます。互換性のため、touchTargetがない場合はプレイヤータッチとして扱われます。イベント/イベントの接触ワークフローでは、変数およびスイッチのブロックがマップ変数を使用します。影響を受けるプレイヤーを明示的に指定する機能が追加されるまでは、プレイヤー専用のブロックに対して、マップ上にいる最初のプレイヤーが一時的なフォールバックとして使用されます。 - イベントページの
hitboxは、RPGJS ピクセル単位の{ width, height }をサポートします。ヒットボックスがない場合のランタイムのデフォルトは32 x 32です。メディア/グラフィックのスケール変更は表示されるスプライトのサイズだけに影響し、ヒットボックスの幅/高さを変えてはいけません。 - イベントページの
optionsは、directionFix、through、alwaysOnTop、alwaysOnBottomをサポートします。描画レイヤーのフラグは同時にひとつだけ使用してください。alwaysOnTopは近くのキャラクターより上にイベントを描画し、alwaysOnBottomは近くのキャラクターより下に描画します。 - イベントワークフローのブロックでは
set_hitboxを使って、$player、$this、またはマップイベント ID に対してtarget.setHitbox(width, height)を呼び出せます。widthとheightは正の RPGJS ピクセル単位の寸法であり、対象のグラフィックのスケールでは拡大縮小されません。 - イベントワークフローのブロックでは
camera_followを使ってplayer.cameraFollow(target, { smoothMove })を呼び出せます。対象は$player、$this、またはマップイベント ID を指定したeventIdから解決されます。smoothMoveのデフォルトはtrueです。任意のtimeとeaseを指定すると、RPGJS がサポートする高度なスムーズ遷移オブジェクトが作成されます。easeフィールドは、linear、easeInQuad、easeOutQuad、easeInOutQuadなど、一般的なイージング名のドロップダウン式列挙値です。 - イベントワークフローで変数を書き込む場合は、公開されている
set_variableブロックを使用してください。change_variableはレガシーランタイムとの互換性のためだけに存在し、新しいペイロードの生成には使用してはいけません。set_variableがサポートするvalueSourceの値はconstant、variable、random、player_x、player_y、player_direction、map_id、gold、player_id、player_name、level、hp、spです。 敵との戦闘のテンポを調整するには、references/database.mdに記載されている、パターンごとのbehavior.attackProfilesのタイミング上書きを使用します。省略した値はエンジンのデフォルトを継承するため、そのままにしてください。