#28 Battlefield Portal のルールエディターでカスタムゲームモードを作る https://gyazo.com/35cab54d6bf580c67a2e6b26673d1007
基本情報
エクスペリエンスコード
aagzkg
プロジェクトURL
BF PortalのルールエディターでHyper Scapeの最後のクラウン争奪戦のようなゲームモードを作ってみました。 ルールエディター以外のポータルの機能については省略します。
ルールエディター
BF Portalではマップや兵士の装備などをカスタマイズできるだけでなくルールエディターによって特殊なルールをプログラムできます。
例)五回ジャンプで無反動砲リロード
ルールエディターではScratchのようなビジュアルプログラミングでルールを設定できます。 基本的な使い方
左側のタブからブロックをドラッグ&ドロップで配置していきます。
ブロックを右クリック > Helpからドキュメントを表示できます。
https://gyazo.com/bbb0b1039926f5f48f145b776114f076
RuleブロックをMODブロックにはめることでイベントに応じた処理を実装できます。
https://gyazo.com/77a8e60de40dc0d4c78e9a1c607173a1
実装するルール
クラウン争奪戦で実装したいルールはだいたいこんな感じです。
ベースはFFA
1人のプレイヤーがクラウンを所持
クラウンを持ったプレイヤーをキルするとクラウンを取得する
クラウンを持った状態で一定時間生存で勝利
コード解説
プロジェクトは以下のURLからコピー出来ます。
ラウンド開始時の初期化
nullを判定できるかわからなかったのでIsKingAliveでクラウンの所持状態を保持させています。
スコアは基本的に加算方式にします。
スコアボードやデフォルトのアナウンスが加算方式で想定されているため
表示時に目標スコアから減算してカウントダウン表示させます。
https://gyazo.com/d1f73228d85f7be9c411a035f42b6837
クラウン所持プレイヤーの更新
PlayerOnDiedでSetKingもしくはRestKingを呼び出します。
ラウンドの経過時間でクラウンの目標所持時間を短く(緩く)しています。
SetGameModeTargetScore(GetVariable(DefaultTargetScore) * (残りラウンド時間 / ラウンド制限時間))
https://gyazo.com/b1808b64396f596609e4ab8dee5556ae
クラウン所持プレイヤーが切断した場合
OnPlayerLeaveGameは抜けたプレイヤーをEventPlayer等で識別できない
OnPlayerLeaveGameが発火した時点ではプレイヤーはAlive判定
GetPlayersからは消えているので全探索で特定する
https://gyazo.com/28b8e8d57fb93b00e6f8f640e27d8c2b
表示用のUI
クラウン所持プレイヤー名と勝利までのカウントダウンを表示させます。
DisplayCustomMessageはPlayerを指定する必要がありました。
ドキュメントにはOptionalって書いてある
https://gyazo.com/63e0c040cd6af31af9364b10217665a0
テスト
エクスペリエンスをホストして動作確認をする時は、
Escから開くメニューから プレイ > 管理者 > サーバー情報 > エラーログ
からエラーメッセージを確認することができます。
https://gyazo.com/1acd746ce0c46c1a4516a15c64fe5269
あとはカスタムメッセージを使うと便利でした。
けしごむ.iconプレイ動画がないと結局どうなるのかがわからないですね。
欲しいAPIはほぼ用意されてあると思います
好きなゲームのBFで手軽にMODを作れるみたいで面白かったです。
参考