ハウツー/到達判定について

Last-modified: 2024-03-08 (金) 03:17:11

このページは制作したマップを到達率の計算に含める上で必要となる情報をまとめています。

基本的な説明はコモンイベント[0037:【呼】MAP訪問判定]にまとめてあります、合わせてご覧ください。
もし古い情報があればページ編集または報告をお願いします。

 
 
 

基礎知識

到達判定とは

基本的には「該当マップIDへ入った事がある」という記録です。

かつては変数を用いて記録していました。
しかし、マップ数の増大に伴って変数領域の確保が難しくなり、
特例的に特殊技能をマップIDの記録専用として扱い、主人公ID:0002の特殊技能欄で管理しています。

 

到達率とは

通常のプレイで来訪可能な範囲の到達判定を母数とし、
その内の何パーセントに到達できているかを計算するものです。
※マップ制作者の意向によっては来訪可能であってもこの計算から外されているマップもあります。

この計算を行うには予め「通常プレイで来訪可能である」という情報が欲しいので、
各ツクラーが適宜、専用のコモンイベントを編集して対応させていく必要があります。

 

到達判定・到達率の計算の流れ

到達判定の大まかな流れは以下の通りです。

  1. CEV[0033:【並】足音]はマップIDの変化を検知すると、CEV[0037:【呼】MAP訪問判定]を呼び出す
  2. CEV[0037:【呼】MAP訪問判定]は必要に応じて主人公[0002]にマップIDと同じIDの特殊技能を習得させる
  3. CEV[0037:【呼】MAP訪問判定]は必要に応じてCEV[0080:【分割】MAP訪問判定1]等の中から、マップIDに対応したコモンイベントを呼び出す
  4. CEV[0080:【分割】MAP訪問判定1]等は必要に応じて特殊技能を用いない旧来の到達判定を行う
コモンイベントを擬人化させた場合のイメージ
コモンイベント概要
【並】足音「マップIDが変化したから変数に記録します」
「続けて【呼】MAP訪問判定さんの出番です」
【呼】MAP訪問判定「主人公2番くん、この変数と同じ番号の特殊技能を習得してください」
「これを到達済みの記録とします」
【呼】MAP訪問判定「このマップIDに対応するのは【分割】MAP訪問判定1くん、出番ですよ」
【分割】MAP訪問判定1「新しい仕様なので何もしません」
「古い仕様が残っていました、こちらでも到達済みを記録します」

到達率の計算の大まかな流れは以下の通りです。

  1. CEV[0036:【呼】MAP到達率計算]がマップ到達率の分子分母となる変数[3511-3512]を初期化する
  2. CEV[0036:【呼】MAP到達率計算]がCEV[0080:【分割】MAP訪問判定1]などを順番に全て呼び出す
  3. CEV[0080:【分割】MAP訪問判定1]などが変数[3511-3512]の値を到達判定に応じて書き換えていく
  4. CEV[0036:【呼】MAP到達率計算]は書き換わった変数[3511-3512]を元にマップ到達率を計算し、変数[3513:マップ踏破率]に結果を記録する
コモンイベントを擬人化させた場合のイメージ
コモンイベント概要
【呼】MAP到達率計算「到達マップ数くんと通常到達可能マップ数くんの数値を0にしました」
【呼】MAP到達率計算「【分割】MAP訪問判定1くんの出番です」
【分割】MAP訪問判定1「通常到達可能マップ数に1つ足して、
 到達済みなので到達マップ数にも1つ足す…」
「通常到達可能マップ数に1つ足して、
 到達していないから次の処理へ…」
【呼】MAP到達率計算「【分割】MAP訪問判定2くんの出番です、同じような処理を続けてください」
~中略~
【呼】MAP到達率計算「通常到達可能マップ数の数値は2000、
 到達マップ数の数値は1000になりました」
「計算した結果、マップ踏破率は50です」
 

到達判定が自動的に行われないケース

上記の通り到達判定の処理はどのマップIDであっても自動で行われます。
ただし、次のようなケースでは到達判定が記録されません。

  • CEV[0033:【並】足音]の動作が止められており、CEV[0037:【呼】MAP訪問判定]が呼び出されない
    • イベント中動作禁止などの要因で、スイッチ[0033:座標取得足音開始]がOFFになっている
  • CEV[0033:【並】足音]が正しく動作できず、CEV[0037:【呼】MAP訪問判定]を呼び出せない
    • 変数[0026:マップID]と変数[0028:マップID2]の値が他のイベントによって変更されている など
  • 到達判定の処理をスキップするように指示されている
    • スイッチ[1990:マップ到達判定しないで]がONになっている
 

マップイベントで到達判定を記録したい場合

(何らかの下準備をしてからCEV[0037:【呼】MAP訪問判定]を呼び出して記録できる方が簡単だと思うので何かしら仕組みを用意しておけたらと思う)

 

コモンイベント[【分割】MAP訪問判定]の編集方法

到達率の計算に含めたいとき

下準備として、データベースの「特殊技能」タブを開いてください。
ここには各マップIDとそれに対応したマップ名が記載されています。

制作したマップのIDを改めて確認して、同じIDの特殊技能に名前を付けておいてください。

マップIDの確認手順

エディターの左下にあるマップツリーから、自分のマップを選択してください。
右クリックして"マップの設定"を開き、出てきたウィンドウの上部を見てみましょう。
「マップの設定 - ID:0002」のようにIDが書かれているはずです。

ゆめ2っきでは、他制作者が把握しやすいようにマップ名にIDを含めていることが大半です。
ただし、マップ名を変えてもマップIDは変化しません。注意してください。

ゲームの動作上は名前が付いていなくとも問題ありませんが、
これから行う作業ではマップIDとマップ名が分かると便利です。


到達率の計算に関する編集を行う前に、到達判定が記録されるかどうかを確認しましょう。

  1. デバッグルームにあるMAP RATEイベントの"到達済MAP確認"を選択する
  2. 制作したマップが記録されていないことを確認する
  3. 制作したマップへ入り、帰還する
  4. デバッグルームにあるMAP RATEイベントの"到達済MAP確認"を選択する
  5. 制作したマップが到達済みとして記録されていることを確認する

確認できなかった場合、上記の"到達判定が自動的に行われないケース"に該当しているかもしれません。


必要に応じて、到達率の計算に含めるための編集を行います。

CEV[0080:【分割】MAP訪問判定1]等を開くと、
冒頭に注釈でどのマップIDがそのコモンイベントに対応するかが記載されています。
目的のCEV[【分割】MAP訪問判定]を探しましょう。

CEV[【分割】MAP訪問判定]の内部はマップID順に並んでいます。
同じようにマップID順になるよう編集しておくと、後から見つけやすくなります。

編集すべきコモンイベントを見つけたら、以下のような処理を追加します。
この処理はCEV[0037:【呼】MAP訪問判定]にコピー用のサンプルが設置されているので、そこからコピーすると良いでしょう。

◆注釈:★------------------------------------------
:  :| <マップ名>
:  :★------------------------------------------
◆変数の操作:[3512:通常到達可能マップ数]加算, 1
◆条件分岐:マップ到達がID: <該当のマップID> を使用できる
 ◆変数の操作:[3511:到達マップ数]加算, 1
 ◆
:それ以外の場合
 ◆条件分岐:スイッチ[1429:未到達MAPチェック]がON
  ◆文章:¥>¥C[¥V[1]] <該当のマップID> (<ハンドルネーム>)
  :  :¥>¥N[1]
  ◆
 :分岐終了
 ◆
:分岐終了
◆

上記の内、< >で書かれている箇所を編集していきます。

変数[3512:通常到達可能マップ数]は到達率の分母として、
変数[3511:到達マップ数]は到達率の分子として扱われます。
前者は無条件で 加算, 1 され、後者は到達判定が記録されていれば 加算, 1 されます。
そのため、全マップを踏破すれば2つの変数は同じ値になるはずです。

マップ名を記載した注釈は必須ではありませんが、
後から探す際に見つけやすくなるのでオススメします。

文章の表示はデバッグルームのMAP RATEイベント内にある"未到達MAPチェック"で使用します。


到達率の計算が正しく動作するか、次のような手順で確かめてみましょう。

  1. 制作したマップの直前までは到達しているが、制作したマップ自体には到達していないセーブデータを用意する
  2. デバッグルームにあるMAP RATEイベントの"MAP到達率確認/到達フラグ操作"を選択する
    ここで表示される"現到達MAP数"の数値をメモしておく
  3. 制作したマップへ入り、帰還する
  4. 再びデバッグルームにあるMAP RATEイベントの"MAP到達率確認/到達フラグ操作"を選択する
    "現到達MAP数"の数値が1つ増えていることを確認する

更に、可能であれば加えてMAP到達率が100%になるか確認します。
もし確認時に何らかの不具合を見つけたらデバッグします。

 

マップを削除するとき

到達率の計算から外したい場合、"到達率の計算に含めたい時"で追加した処理を削除すればOKです。
誤って無関係な処理を削除するとバグの原因となってしまうので、慎重に行うと良いでしょう。


マップを削除したとしても、到達判定の記録はセーブデータに残り続けます。
CEV[0062:セーブバージョンチェックエラー]に初期化処理を追加して到達判定を初期化しておくと良いでしょう。

一例としては以下のような処理が挙げられます。

◆条件分岐:変数[0012:セーブデータ Ver.]が<対象としたいバージョン数値>以下
 ◆注釈:│ ▽SkillsMAP0000
 ◆特殊技能の増減:マップ到達が<対象となるマップIDと同IDの特殊技能>を忘れる
 ◆
:分岐終了

なお、CEV[0062:セーブバージョンチェックエラー]はパッチ適用時には実行されないことに注意してください。
パッチとしてアップロードする予定であれば、次バージョンで初期化されるよう設定するとよいでしょう。

 

到達判定をマップ内イベントの条件として利用したいとき

以下のような形で、到達判定に応じた分岐を行うことができます。

◆注釈:│ ▽SkillsMAP0000到達
◆条件分岐:マップ到達がID: <該当のマップID> を使用できる
 ◆ <到達済みの場合>
:それ以外の場合
 ◆ <未到達の場合>
:分岐終了

ここで注釈が書かれているのは、RPGツクール2003付属の検索ツールやRPGデバッガー200Xで検索できるようにするためです。これらのツールでは特殊技能を条件とした分岐を検索できないため、その代替として注釈を残しています。
(割り当て詳細/各種用途#commentdatailも合わせてご参照ください)

特殊技能はイベントの出現条件としては指定できませんが、
自動的に始まるイベントなどで上記の処理を使い、便利スイッチなどを操作することで代替できます。

 

特殊技能を用いている理由・補足

かつては変数領域に到達判定を記録していましたが、
マップ数の増大に伴って特殊技能を使う形へと変化していきました。

この記録方法であれば理屈上、特殊技能×主人公 の数だけ何かを記録できるようになります。
しかしこれにはいくつか困った所もあります。

  • 特殊技能に付けられる名前はID1つにつき1種類のみである
  • RPGデバッガー200Xや、RPGツクール2003に付属している検索ツールが特殊技能に対応していない

特に前者はフラグ管理の面でかなりの不便を強いられる難点です。
このため、共同制作であり不特定多数がシステムに触れるゆめ2っきでは
管理面の観点から到達判定の記録にのみ特殊技能を用いる、という形になっています。

余談ですが、特殊技能を用いるようになる前のセーブデータを引き継いだ際には
到達判定を記録していた変数の値を読み取り、到達の有無を特殊技能へコピーする処理が実行されます。
(これにより使われなくなった変数の一部は新たな目的で再利用されています)