リスポーンロジックまとめ
マルチでのレースやレギュ戦では、リスポーンロジックが必要になることが多い。しかし、リスポーンロジックの作り方が分からない人はかなりいるらしい。ここではリスポーンロジックを解説していく。なお、リスポーン以外にも転用可能。
リスポーンに割り当てるキー
現在の日本コミュニティでは、" - "(マイナス) もしくは、" 左Ctrl "+" R "(同時押し) に割り当てることが多い。恐らくこれからも変わらないので、リスポーンロジックを搭載する際はどちらかにすることを推奨する。また、"R" 単体で割り当てるマップも多い(例:P1GP)。押しやすい位置であり、RespawnのRであるため日本海外問わず多いが、機体操縦にもよく割り当てるキーであるため非推奨。"Enter"も多いが、マルチでチャットをする際、送信するたびにリスポーンすることになるのでこれも非推奨。かつての日本coでは"ESC"が主流だったらしいが、今は"ESC"にメニューが割り当てられたため廃れた。
ロジック
各ロジックの説明,データ,擬似コードを置いておく。擬似コードは日本語。プログラムっぽく書くと分からん人が続出しそう。
全てローカル変数で管理しているため、全選択してコピーをすれば複数置くことが可能。一個ずつコピーしたり、一個だけ消したりすると、リンクが切れてしまい動作しなくなるので注意。
単体キーでリスポーン
即時リスポーン
最も単純なロジック。秒で作れるので覚えとこう。即時とは言っても、タイマーで0.1秒ほど遅延を入れると良い。バグや負荷が減る気がする(要検証)
マップ
code:単体キー即時リスポーン
--バウンディングボックス
条件 "-"キーを押す
待機 0.1秒
リスポーン
タイマー有
タイマー有りの場合、ロジックを別オブジェクトに分けると良いだろう。一つのオブジェクトにロジックを大量に書き込むと整備性が下がる。また、ロジックを分けることで全損時などにタイマーの中断が可能になる。
マップ
全損ロジック付き
code:単体キータイマー有リスポーン
--バウンディングボックス
条件 "-"キーを押す
RespawnLogicの変数 respawn_key + 1
--RespawnLogic
条件 ローカル変数 respawn_key = 1
待機 20秒 --リスポーン時間
Respawnの変数 respawn = 1
変数 respawn_key = 0
--Respawn
条件 ローカル変数 respawn = 1
--ここにリスポーン処理を書く
変数 respawn = 0
以下のロジックを追加すると全損時にタイマーリセットとリスポーンが出来る。
code:全損ロジック
--バウンディングボックス
条件 マシン損傷 15%
DeathLogicの変数 death = 1
--DeathLogic
条件 ローカル変数 death = 1
無効化 RespawnLogic
待機 1秒
Respawnの変数 respawn = 1
有効化 RespawnLogic
リセット RespawnLogic --これが無いと変数がリセットされない
変数 death = 0
2つのキーでリスポーン
reiuzium式
互いに素である2と3を使った方式。別に1と10000でも同じことが出来るが、0.2秒間で10000回Rキーを連打する人がいるかもしれないので、2と3が安定。
仕組みはRキーで変数+2、Ctrlキーで変数+3、変数が5になったらリスポ、こうすると片方だけ連打しても反応しなくなる。
マップ
こちらのほうがボックスのロジックが少なく私は好き
全損ロジック付き
code:2キーリスポーンrei
--バウンディングボックス
条件 "R"キーを押す
RespawnLogicの変数 respawn_key + 2
待機 0.2秒
RespawnLogicの変数 respawn_key = 0
条件 "左Ctrl"キーを押す
RespawnLogicの変数 respawn_key + 3
待機 0.2秒
RespawnLogicの変数 respawn_key = 0
--RespawnnLogic
条件 ローカル変数 respawn_key = 5
変数 respawn_flag + 1
条件 ローカル変数 respawn_flag = 1
待機 20秒 --リスポーン時間
Respawnの変数 respawn = 1
変数 respawn_flag = 0
--Respawn
条件 ローカル変数 respawn = 1
--ここにリスポーン処理を書く
変数 respawn = 0
sukepin式
2段階変数を置く方式。JTマップで広く普及している。rei式でもsukepin式でも何も変わらないので好きな方を使うと良いが、rei式の方が少し短いのでちょっと楽。宗派的にsukepin式が好きな人もいる。
説明は省略。擬似コードみるかマップロジック直接見たほうがわかるだろう。
マップ
こちらのほうがボックスのロジックが少なく私は好き(長くて面倒だった)
全損ロジック付き
code:2キーリスポーンsuke
--バウンディングボックス
条件 "R"キーを押す
RespawnLogicの変数 r_key + 1
待機 0.2秒
RespawnLogicの変数 r_key = 0
条件 "左Ctrl"キーを押す
RespawnLogicの変数 ctrl_key + 1
待機 0.2秒
RespawnLogicの変数 ctrl_key = 0
--RespawnnLogic
条件 ローカル変数 r_key = 1
RespawnLogicの変数 respawn_key + 1
待機 0.2秒
RespawnLogicの変数 respawn_key = 0
条件 ローカル変数 ctrl_key = 1
RespawnLogicの変数 respawn_key + 1
待機 0.2秒
RespawnLogicの変数 respawn_key = 0
条件 ローカル変数 respawn_key = 2
変数 respawn_flag + 1
条件 ローカル変数 respawn_flag = 1
待機 20秒 --リスポーン時間
Respawnの変数 respawn = 1
変数 respawn_flag = 0
--Respawn
条件 ローカル変数 respawn = 1
--ここにリスポーン処理を書く
変数 respawn = 0
3つ以上のキーでリスポーン
絶対に必要ないので誰も作っていない。ただし、もし作る場合sukepin式で作ると良いだろう。3つ以上の数字で互いに素の数字でrei式でも作れるが、ロジック内に3,5,7,15なんて数字が唐突に出てきたらあまり見栄えがよろしくない。
おまけ
負荷の重いレギュ戦や鯖主PCの性能が不足するとき、再生速度をかなり下げることがある。そのとき、リスポーン時間や制限時間が長くなりすぎて不快に感じることがある。
ロジックで待機0.01秒と繰り返すを使うと、なぜかシミュ速度にほぼ依存しないロジックを作ることが出来る。普段は不便極まりない仕様ではあるものの、これを上手く使えばリアル時間準拠の試合時間制限などを作れるだろう。まあ、残り時間表示が難しく、そもそもハイスペックマシンの鯖主が増えシミュ速度を大幅に下げる機会が減ったので構想だけで実用化していない。ここにアイデアを供養しとく。
1秒タイマー 再生速度依存と非依存
このページwiki書いたほうがいいんかなあと思いつつscrapboxに書いた。
転載したほうが良ければ勝手にwikiに転載してok
EEXさん転載してもらってOKですよyamabach.icon
コメ
解説たすかる