WOLF RPGエディター(ウディタ)/初心者・変数【サイトトップへ戻る】
■「変数」って何?
(更新:2024/05/04)


「変数」について解説します。


ショートカット
■「変数」とは?
■変数の使用例
■変数の種類
■変数の値を文章で表示する
■変数呼び出し値
■変数の値をリアルタイムで確認する
■古いセーブデータに関して
■補足


  
■「変数」とは?

変数は数値文字列保存する時に使います。

数値タイプ 何らかの数値を保存する時に使います。
±20億(-2,000,000,000〜2,000,000,000)」の範囲の数値を保存する事ができます。
※コモンイベントの場合は「2,147,483,648」を超えると、
 「-2,147,483,647」になってしまう仕様があるため、注意が必要です。
「1.5」などの小数の保存はできません。
パーセントの計算を行う場合は通常は「現在値÷最大値×100」ですが、
ウディタでは「現在値×100÷最大値」と100倍にしてから最大値で割るようにして、
小数にならないように計算する必要があります。
文字列タイプ 何らかの文字列を保存する時に使います。
文字数の制限はありませんが、数十万文字などの大量の文字を保存させると、
文字列変数を処理する度に処理落ちが発生しやすくなります。



変数の主な使用例です。

◆数値や文字列を保存

ゲーム内で使用する様々な情報を保存します。

主人公に関する情報を保存。
数値タイプでは、HPや攻撃力などの能力値、レベルアップ時の能力値の変化量、装備品の種類、現在の経験値など。
文字列タイプでは、主人公の名前や肩書き、顔グラフィックのファイルアドレスなどを保存。
パーティの人数やパーティに誰がいるのか、アイテムや装備品の所持数、所持金などの情報を保存。
敵キャラの名前や能力値、行動内容、倒した時に獲得する経験値やお金などの情報を保存。
押されたキーの内容(キーコード)、マウスポインタの位置やクリックしたかどうかなどの情報を保存。
宝箱を開けてアイテムを取得したかどうか、ボスキャラを倒したかどうかなどの情報。
主人公やマップイベントの現在位置や向いている方向などを保存。
表示する文字のサイズやプレイ時間、BGMの音量やゲーム画面のサイズなどを保存。
◆計算

足し算、引き算、掛け算、割り算などを使って、パーセントの計算やダメージの計算、
主人公とマップイベントとの距離計算など、様々な計算処理で変数を使います。
◆条件分岐

変数の値によって処理内容を変えたい時に使います。

例えば…
■条件分岐(変数): 【1】 可変DB(7,0,0)[薬草 所持個数 ] が 0 と同じ
-◇分岐: 【1】 [ 可変DB(7,0,0)[薬草 所持個数 ] が 0 と同じ ]の場合↓
|■文章:薬草を持って行きなさい。
|■イベントの挿入[名]: ["○アイテム増減"] <コモンEv 0> / 0:薬草 / 1 / 1:あり[単位:〜個]
|■
◇分岐終了◇
■文章:気を付けて旅を続けなさい。
の場合は、薬草の所持数が「0」の時には、条件分岐内の「薬草が貰えるイベント」を実行し、
薬草を持っている場合は条件分岐を通過して「気を付けて旅を続けなさい。」だけを実行します。

このように変数の値によって処理内容を変える時に使います。
◆イベントの実行

指定した変数の値になった時に、マップ上にマップイベントを表示したり、
自動実行のイベントを起動させたりする時に使います。


▲トップへ戻る▲


  
■変数の使用例

以下はマップイベントに話しかけると「こんにちわ!」と「元気ですか!」が交互に表示される設定です。

変数の値が「0」の時には「こんにちわ!」を表示し、変数の値を「1」にします。
変数の値が「1」の時には「元気ですか!」を表示し、変数の値を「0」にします。

【イベントコード表示】

■マップイベント

グラフィック:キャラの画像
起動条件:決定キーで実行/変数条件なし

■条件分岐(変数): 【1】 このEvのSelf0 が 0 と同じ 【2】 このEvのSelf0 が 1 と同じ
-◇分岐: 【1】 [ このEvのSelf0 が 0 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 1 + 0
|■文章:こんにちわ!
|■
-◇分岐: 【2】 [ このEvのSelf0 が 1 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 0 + 0
|■文章:元気ですか!
|■
◇分岐終了◇



さらにシステム変数[80:現在の[時]]を利用して、現在の時間に合わせて挨拶の内容を変える設定を行う事もできます。

システム変数[80] 設定文章
18〜23 こんばんわ!
11〜17 こんにちわ!
5〜10 おはよう!
0〜4 こんばんわ!

【イベントコード表示】

■マップイベント

グラフィック:キャラの画像
起動条件:決定キーで実行/変数条件なし

■条件分岐(変数): 【1】 このEvのSelf0 が 0 と同じ
         【2】 このEvのSelf0 が 1 と同じ
-◇分岐: 【1】 [ このEvのSelf0 が 0 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 1 + 0
||■条件分岐(変数): 【1】 Sys80:現在の[時] が 18 以上
          【2】 Sys80:現在の[時] が 11 以上
          【3】 Sys80:現在の[時] が 5 以上(上記以外:ON)
|-◇分岐: 【1】 [ Sys80:現在の[時] が 18 以上 ]の場合↓<18〜23時台
||■文章:こんばんわ!
||■
|-◇分岐: 【2】 [ Sys80:現在の[時] が 11 以上 ]の場合↓<11〜16時台
||■文章:こんにちわ!
||■
|-◇分岐: 【3】 [ Sys80:現在の[時] が 5 以上 ]の場合↓<5〜10時台
||■文章:おはよう!
||■
|-◇上記以外<0〜4時台
||■文章:こんばんわ!
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ このEvのSelf0 が 1 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 0 + 0
|■文章:元気ですか!
|■
◇分岐終了◇

さらに変数を追加すれば、例えば話しかけた方向によって文章を変えたり、
パーティにいる人数によって文章を変えたりする事ができます。


▲トップへ戻る▲


  
■変数の種類

変数には様々な種類があり、使用用途に合わせて変数を使い分けます。

セルフ変数 マップイベントやコモンイベントに用意されている変数です。
各マップイベントには数値系の変数が10個あり、
各コモンイベントには数値系の変数が95個と文字列系の変数が5個あります。
セルフ変数は主にそのセルフ変数を持つイベントの中で使います。
他のイベントと数値や文字列をやり取りする時には、
通常は通常変数文字列変数可変DBなどを使います。
マップイベントのセルフ変数は、マップごとに管理されているため、
マップ[0]にあるマップイベント[0]セルフ変数[0]と、
マップ[1]にあるマップイベント[0]セルフ変数[0]は異なる変数として処理され、
セーブデータもそれぞれ異なる変数として保存されます。
マップイベントのセルフ変数は、
主人公がいるマップのマップイベントしか操作する事ができません。
そのため、別のマップにあるマップイベントの出現条件を変えるような設定を行う場合は、
通常変数を使います。
通常変数
予備変数
ゲーム内の全てイベントで使用する事ができる数値系の変数です。
自動実行や並列実行のイベントを起動する時にも使います。
通常変数予備変数[1〜9]がありますが、通常変数予備変数同じ仕様であり、
どちらを使っても機能面で違いはありません。
ただイベントの設定画面では、通常変数の方が先に表示されるので、
使用頻度の高いもの(ゲーム全体で何回も使用する)は通常変数を使い、
使用頻度の低いもの(1回のみや一部のマップのみ)は予備変数を使うと良いでしょう。
予備変数[1〜9]に分かれているため…
予備変数[1]=自動実行や並列実行のイベントを起動する時に使用
予備変数[2]=謎解きイベントで使用

などと使用用途に合わせて使い分ける事ができます。
通常変数予備変数[1〜9]のデータ数を大量に増やすと、
イベントの設定画面で処理落ちが発生します。
そのため、通常変数予備変数[1〜9]のデータ数を合わせて、
合計「1000」程度のデータ数に抑えた方が良いでしょう。
文字列変数 ゲーム内の全てイベントで使用する事ができる文字列系の変数です。
1つの文字列変数に数十万文字などの大量の文字を設定すると、
文字列を操作する時に処理落ちが発生します。
この処理落ちは、コモンイベントのセルフ変数[5〜9]の文字列系変数や、
可変DBの文字列系変数でも発生します。
通常変数などと同様に大量にデータ数を増やすと、
文字列変数関連の設定画面で処理落ちが発生します。
システム変数
システム文字列
フォントサイズ、イベント実行中有無、現在の時間(プレイ時間)、音量設定、
ゲーム画面のサイズ取得など、ウディタの様々な情報を取得・設定する事ができる変数です。
正しく使用しないとゲームが正常に動かなくなる可能性があります。
システムDB マップの設定やBGMの設定、文字色の設定やウィンドウ画像のアドレス設定など、
ウディタの実行に必要な設定を行うデータベースです。
新しいタイプの追加など、ゲーム制作者がオリジナルの設定を追加したい時には、
このシステムDBではなく、ユーザーDB可変DBを使ってください。
※ウディタのバージョンアップによって、
 新たなタイプや項目が追加される可能性があるため、
 このシステムDBにオリジナルの設定を行うのはあまりお勧めできません。
元からあった設定を削除するとエラーが発生する可能性があるため、
システムDBに最初からある設定は「追加・変更はOKで削除はNG!」となっています。
なお、ユーザーDB可変DBでも、
最初からある設定項目を削除するとエラーが発生する事があります。
※コモンイベントを全て削除してオリジナルのコモンイベントで処理している場合は、
 ユーザーDB可変DBを全て削除して、自由に設定する事ができますが、
 このシステムDBは基本的にタイプや項目の設定をそのままにしておく必要があります。
データベースの値を取得したり、値を操作したりする処理は、
セルフ変数通常変数(予備変数)などに比べて、処理落ちが発生しやすくなります。
そのため、1フレームの間に数万回ものデータベースの情報をやり取りするような設定は、
あまりお勧めできません。
なお、この処理落ちはユーザーDB可変DBを操作する場合でも発生します。
ユーザーDB 読み取り専用のデータベースです。
技能やアイテムの設定、敵キャラの能力値や敵グループの設定など、
ゲーム開始時からエンディングまでに情報が変わらないものを設定します。
ユーザーDBの値を変えてもセーブデータには保存されず、
ロード時には初期状態のユーザーDBに戻ります。
最初からある項目の名前を変更するとエラーが発生する事があります。
これはユーザーDBの情報を呼び出す時に、項目の名前で呼び出している事が原因です。
そのため、最初から設定されている項目の名前は変更しないでください。
なお、可変DBでも同様のエラーが発生するので、
可変DBの項目の名前も変更しないでください。
可変DB 書き込み可能なデータベースです。
主人公のレベルやHP、攻撃力などの能力値、装備の状態、習得している技能、
パーティにいる主人公のIDやパーティの人数、所持金や所持アイテムの数量など、
ゲーム開始時からエンディングまでに情報が変わるものを設定します。
セーブ時には、可変DBの情報が全て保存されます。
可変DBを編集して更新したあとにセーブデータをロードした場合は、
編集した最新の可変DB反映されず、セーブした時の古い可変DBでゲームが再開します。
最新版が反映されない理由は、例えば主人公の初期レベルを「1」にしてゲームを開始し、
レベルアップしてレベル「2」になったあとにセーブした場合、
ロード時に最新の可変DBのデータを適用してしまうとレベル「1」に戻ってしまうため、
セーブデータをロードしても、最新版の可変DBが適用されない仕様になっています。
もしも古いセーブデータをロードした時に、
最新の可変DBのデータが適用されるようにする場合は、
ロード後に可変DBを編集するイベント設定が必要になります。

各変数に関しては、以下のページに詳しい説明があります。
【セルフ変数の詳しい説明を見る】
【通常変数・予備変数の詳しい説明を見る】
【文字列変数の詳しい説明を見る】
【システム変数・システム文字列の詳しい説明を見る】
【システムDB・ユーザーDB・可変DBの詳しい説明を見る】


▲トップへ戻る▲


  
■変数の値を文章で表示する

変数の値を表示する時に使う特殊文字を使用する事で、
文章ウィンドウやデバッグウィンドウ、ピクチャの表示などで変数の値を表示する事ができます。



例えば、現在の時刻を表示する場合は、
システム変数[80:現在の[時]]、[81:現在の[分]]、[82:現在の[秒]]を利用して以下のように設定します。

【イベントコード表示】

■文章:現在は「\sys[80]時\sys[81]分\sys[82]秒」だよ。

▼イベント実行時が「20時34分8秒」だった時




変数の中に変数を設定する…
\cdb[0:\v[0]:0]
と言った設定も可能です。

例えば、パーティの先頭にいるキャラ名を表示する場合は、
可変DBの情報を表示する特殊文字「\cdb[A:B:C]」を二重に設定して表示します。

【イベントコード表示】

■文章:\cdb[0:\cdb[6:0:1]:0]さん、こんにちわ!



▼補足

\cdb[6:0:1]可変DB[6:パーティー情報]にあるパーティの1人目の主人公の番号を呼び出す設定です。

\cdb[0:X:0]可変DB[0:主人公ステータス]の主人公の名前を呼び出す設定であり、
真ん中の「X」と表示した部分には、呼び出す主人公の番号を設定します。

そのため、\cdb[0:\cdb[6:0:1]:0]の設定を行うと…
\cdb[主人公ステータス:パーティの先頭の主人公の番号:キャラ名]
と言った感じの設定になり、パーティの先頭にいる主人公の名前が表示されます。

パーティの先頭が「ウルファール」の場合 パーティの先頭が「夕一」の場合



以下は変数の情報を表示する時の特殊文字の一覧です。
なお、表の左側で「変数番号」や「タイプ」などと書かれた部分は、半角数字で設定してください。

特殊文字 説明
\self[変数番号] 表示設定を実行したマップイベントのセルフ変数を表示します。
マップイベントから呼び出したコモンイベントの中で実行すると、
呼び出し元のセルフ変数が表示されます。
マップイベントから呼び出していないコモンイベントの中で実行した場合は…
1000000−設定した変数番号=表示される数値
の値が表示されます。
▼デバッグ文にセルフ変数[5]を表示する場合
■デバッグ文:\self[5]
\cself[変数番号] 表示設定を実行したコモンイベントのセルフ変数を表示します。
マップイベントで実行すると数値変数の場合は「0」。
文字列変数の場合は「<<ERROR>>」が表示されます。
▼デバッグ文にセルフ変数[12]を表示する場合
■デバッグ文:\cself[12]
\v[変数番号] システムDB[14:通常変数名]の値を表示します。
▼デバッグ文に変数[4]を表示する場合
■デバッグ文:\v[4]
\v予備番号[変数番号] システムDB[15:予備変数1]〜[23:予備変数9]の値を表示します。
▼デバッグ文に予備変数3の[8]を表示する場合
■デバッグ文:\v3[8]
\s[変数番号] システムDB[4:文字列変数名]の文字列を表示します。
▼デバッグ文に文字列変数[9]を表示する場合
■デバッグ文:\s[9]
\sys[変数番号] システムDB[6:システム変数名]の値を表示します。
▼デバッグ文にシステム変数[0]を表示する場合
■デバッグ文:\sys[0]
\sysS[変数番号] システムDB[5:システム文字列]の文字列を表示します。
最後に設定する「S」は大文字にしてください。
\syss[変数番号]」の設定では表示されません。
▼デバッグ文にシステム変数[10]を表示する場合
■デバッグ文:\sysS[10]
\sdb[タイプ:データ:項目] システムDBの情報を表示します。
▼デバッグ文にシステムDB[1:BGMリスト]のデータ[2]の
 項目[0:ファイル名]を表示する場合

■デバッグ文:\sdb[1:2:0]
\udb[タイプ:データ:項目] ユーザーDBの情報を表示します。
▼デバッグ文にユーザーDB[2:アイテム]のデータ[0]の
 項目[19:販売価格 [0=売れない]]を表示する場合

■デバッグ文:\udb[2:0:19]
\cdb[タイプ:データ:項目] 可変DBの情報を表示します。
▼デバッグ文に可変DB[6:パーティー情報]のデータ[0]の
 項目[1:メンバー1]を表示する場合

■デバッグ文:\cdb[6:0:1]


▲トップへ戻る▲


  
■変数呼び出し値

数値タイプの変数の値が百万以上になると、変数呼び出し値になります。

この変数呼び出し値を使うと、数値で設定する所を変数の値で設定できるようになります。

例えば「回数付きループ」のループ回数を「2000002」と設定すると、通常変数[2]の値がループ回数になります。



【イベントコード表示】

■回数付きループ [ V2[ループ回数] ]回
|■
◇ループここまで◇◇



「変数呼び出し値」の説明は、別ページに記載しています。
【変数呼び出し値の説明を見る】


▲トップへ戻る▲


  
■変数の値をリアルタイムで確認する

現在の変数の値をリアルタイムで確認する場合は、デバッグ文ピクチャを使います。



複数の変数を同時に表示する場合は、何の変数の値なのかが分かるようにした方が良いでしょう。

変数の値だけを表示する場合 変数の内容が分かるようにした場合
■デバッグ文:\cself[10]
■デバッグ文:\sys[71] \sys[72]
■デバッグ文:\sys[108]
■デバッグ文:<c10>\cself[10]
■デバッグ文:x\sys[71] y\sys[72]
■デバッグ文:処理数:\sys[108]



ピクチャで表示する場合は、以下のように設定します。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■ピクチャ表示:5000 [左上]文字列[\f[16]\E<c10>\cse] X:2 Y:2 / 0(0)フレーム /
       パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]

▼ピクチャの設定画面


▼表示イメージ




システム変数[108:[読]現フレームのコマンド処理数]を使ってコマンド処理数を調べる場合は、
最もコモンIDが大きいコモンイベントに設定してください。



【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が CSelf10 超
-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が CSelf10 超 ]の場合↓
|■変数操作: CSelf10 = Sys108:[読]現フレームのコマンド処理数 + 0
|■デバッグ文:最大コマンド処理数:\sys[108]
|■
◇分岐終了◇

この設定の場合、処理数が更新された時のみデバッグ文に表示されるため、
1フレームごとに処理数が書き込まれるような事が無く、簡単に処理数の最大値を調べる事ができます。


▲トップへ戻る▲


  
■古いセーブデータに関して

通常変数(予備変数)文字列変数システム変数可変DBセルフ変数などの情報は、セーブデータに保存されます。

そのため、セーブした後に変数の使用用途を変えてしまうと、
ロード時にイベントが正常に動かなかったり、場合によってはエラーが発生する事もあります。



例えば、ウディタのサンプルゲームのユーザーDB[2:アイテム]には…
0:薬草
1:癒しの水
2:魔力の水
とアイテムが並んでいます。

仮に「薬草=5個」「癒しの水=2」「魔力の水=1」を持っている状態でセーブし…
0:癒しの水
1:魔力の水
2:薬草
と並び替えてロードすると、「癒しの水=5個」「魔力の水=2」「薬草=1」になります。



他にもマップイベントの設定にて…
マップイベント[0]=(未使用)
マップイベント[1]=扉イベント(セリフ変数[0]=「1」の時に扉開く)
マップイベント[2]=スイッチイベント(押すとマップイベント[1]のセルフ変数[0]を「1」にする)
と言ったイベントがある状態で扉イベントを移動する際に「切り取り&貼り付け」で移動した場合…
マップイベント[0]=扉イベント(セリフ変数[0]=「1」の時に扉開く)
マップイベント[1]=(未使用)
マップイベント[2]=スイッチイベント(押すとマップイベント[1]のセルフ変数[0]を「1」にする)
と言った感じに扉イベントのイベントIDが変わってしまい、
スイッチイベントを実行しても扉イベントのセルフ変数を操作する事ができないため、
扉を開ける事ができないバグが発生します。



可変DBもセーブデータに保存されるため、例えば主人公の限界レベルを「30」にしてセーブし、
あとで限界レベルを「50」に変更しても、古いセーブデータでは限界レベルが「30」のままになります。



上記の問題は、古いセーブデータを使用する事で問題が発生します。

制作中のセーブデータで上記のような問題が発生するのは仕方がない事ですが、
作品を一般向けに公開した後に行ったバージョンアップで問題が発生する場合は、
古いセーブデータをロード時に修正するイベントを設定したり、
修正が難しい場合は最悪「古いセーブデータは使えません」とする必要があります。

作品を公開した後のバージョンアップで古いセーブデータを使えるようにするためには、
上記のような問題を考慮しつつ、バージョンアップの作業を行う必要があります。


▲トップへ戻る▲


  
■補足

通常変数や予備変数、コモンイベントのセルフ変数は、使用用途ごとに10番単位でグループ化して使った方が良いでしょう。

▼設定例


このように使用用途ごとに区切って使用する事で、
下図のように変数を選択する時の一覧の表示が見やすくなり、作業効率が上がります。




▲トップへ戻る▲



◎関連ページ

◆「変数」って何?
┣◆「セルフ変数」って何?
┣◆「通常変数」「予備変数」って何?
┣◆「文字列変数」って何?
┣◆「システム変数」「システム文字列」って何?
┃┣◆システム変数[0〜34]の説明
┃┣◆システム変数[35〜76]の説明
┃┣◆システム変数[77〜120]の説明
┃┣◆システム変数[121〜148]の説明
┃┣◆システム文字列[0〜49]の説明
┃┗◆システム文字列[50〜76]の説明
┣◆「変数呼び出し値」「X番の変数呼出」って何?
┃┗◆【使用例】「変数呼び出し値」「X番の変数呼出」
┣◆「乱数」って何?
┃┗◆乱数で一度出力した値を二重に出力させない
┗◆変数の番号や文字列を別のものに置き換える

◆「システムDB」「ユーザーDB」「可変DB」の説明
┣◆「タイプの設定」の画面説明
┣◆「システムDB」の各タイプの説明
┣◆「ユーザーDB」の各タイプの説明
┃┗◆「装備時・専有箇所」の選択肢を増やす
┗◆「可変DB」の各タイプの説明

YADOT-WOLFトップ  気紛れな空間へ戻る  メール