パラメータ仕様
概要
Vibeverse プロトコルで送受信するパラメータと、Rift Survivors 内部のキャラクター属性とのマッピングを定義する。
重要: パラメータの任意性
?portal=true 以外のすべてのパラメータはオプショナルである。 パラメータが存在しない場合は、必ずデフォルト値を使用すること。パラメータの存在前提でロジックを組んではならない。
"All parameters except
portalare optional and may or may not be present — do not rely on their presence." — Vibeverse 公式仕様
受信パラメータマッピング(Inbound)
パラメータ → ゲーム属性 変換表
| Vibeverseパラメータ | 型 | デフォルト値 | ゲーム内属性 | 変換ルール |
|---|---|---|---|---|
portal | string | — (必須) | — | "true" のみポータル経由と判定 |
username | string | "Drifter" | キャラクター名 | そのまま使用(最大20文字で切り詰め) |
color | string | "#00ffff" | キャラクターカラー | CSSカラーコードとしてパース、無効値はデフォルト |
speed | number | 5 | 移動速度倍率 | clamp(1, 10) で制限 |
hp | number | 100 | 最大HP | clamp(1, 999) で制限 |
avatar_url | string | null | アバター画像URL | HTTPS のみ許可、無効URLはデフォルトアバター |
ref | string | null | 戻りポータル先URL | HTTP/HTTPS のみ許可、存在時に戻りポータル生成 |
ゲーム属性への詳細マッピング
速度変換の詳細
Vibeverse の speed パラメータ(1〜10)を、ゲーム内の移動速度に変換する:
| speed 値 | 移動速度倍率 | 体感 |
|---|---|---|
| 1 | 0.2x | 非常に遅い |
| 3 | 0.6x | やや遅い |
| 5 | 1.0x(基準) | 通常速度 |
| 7 | 1.4x | やや速い |
| 10 | 2.0x | 非常に速い |
計算式: moveSpeedMultiplier = speed / 5
HPマッピングの詳細
Vibeverse の hp パラメータを、ゲーム内の最大HPに直接マッピングする:
| hp 値 | ゲーム内最大HP | 備考 |
|---|---|---|
| 1〜50 | そのまま | 低HP(脆い旅人) |
| 51〜100 | そのまま | 標準 |
| 101〜999 | そのまま | 高HP(タフな旅人) |
カラーの適用範囲
color パラメータは以下のビジュアル要素に適用される:
| 適用先 | 適用方法 |
|---|---|
| キャラクターモデルのアクセント | THREE.MeshStandardMaterial.color |
| 攻撃エフェクトの色 | パーティクルのカラー |
| カットイン演出の背景色 | グラデーションのベースカラー |
| 名前プレートの装飾色 | ボーダー・グロウ色 |
| ポータル経由マーク(✦)の色 | テキストカラー |
送信パラメータ(Outbound)
Vibeverseポータル退場時に送信するパラメータ
| パラメータ | 値の取得元 | 説明 |
|---|---|---|
username | 現在のキャラクター名 | ポータル経由: 受信値、正規: 登録名 |
color | 現在のキャラクターカラー | HEXカラーコード |
speed | 現在の速度ステータス | ゲーム内速度倍率 × 5 に逆変換 |
ref | 本ゲームのURL | デプロイ先のURL |
送信URLの構築例
https://vibej.am/portal/2026?username=Drifter&color=%2300ffff&speed=5&ref=https%3A%2F%2Four-game.pages.devパラメータのエンコード
URL パラメータは encodeURIComponent() で適切にエンコードすること。特に color の # は %23 にエンコードされる。
戻りポータル送信パラメータ
戻りポータル利用時は、ref 先のURLに以下のパラメータを付与してリダイレクトする:
| パラメータ | 値 | 説明 |
|---|---|---|
portal | true | ポータル経由であることを示す |
username | 現在のキャラクター名 | Rift Survivors での名前 |
color | 現在のカラー | Rift Survivors でのカラー |
speed | 現在の速度 | ゲーム内速度の逆変換値 |
バリデーションルール
入力値の検証と安全なデフォルト
セキュリティ考慮
| リスク | 対策 |
|---|---|
| XSS(username に悪意のあるスクリプト) | HTML エスケープ + 文字数制限 |
| Open Redirect(ref に悪意のあるURL) | HTTP/HTTPS のみ許可、確認ダイアログ表示 |
| 不正な avatar_url | HTTPS のみ許可、CORS チェック、ロード失敗時はデフォルト |
| 巨大な値(hp=999999999) | clamp() で上限制限 |
| パラメータ改ざん | クライアントサイドゲームのため許容(不正防止は範囲外) |
TypeScript 型定義
typescript
/** Vibeverse ポータルパラメータ */
interface VibeVerseParams {
portal: true;
username: string; // デフォルト: "Drifter"
color: string; // デフォルト: "#00ffff"
speed: number; // デフォルト: 5, range: 1-10
hp: number; // デフォルト: 100, range: 1-999
avatarUrl: string | null;
ref: string | null;
}
/** ゲーム内キャラクターデータ(ポータル経由) */
interface PortalCharacter {
name: string;
color: string;
moveSpeedMultiplier: number; // speed / 5
maxHp: number;
avatarTextureUrl: string | null;
returnPortalUrl: string | null;
isPortalVisitor: true; // ✦ マーク表示用フラグ
}