RPGエディタでのフラグ管理
投稿者: mosmoss 投稿日:2017/07/19 03:54
ちょっと長い前置き
RPGエディタでまとまった物語を作る時、
分岐やイベントの多い作品を作る時、
フラグの管理が課題の一つになってくる
Rmakeの講座を読めば、フラグは、
setFlag()を使って作るのが一番簡単そうだとわかる
そして慣れてくれば、setVariable()を使えば、
さらにこまやかな条件づけができるとわかってくるのだが…
問題は、1つのゲームで使うフラグの多さだと思う
例えば、自分の経験では、
マップ10個、1時間半ほどのアドベンチャーを作るのに、
300近いsetFlag()またはsetVariable()を設定しなくてはならなかった
その数を扱うには、管理メモがあると心強い
でもどうせフラグ管理のメモを作るなら、
変数名を文字列で設定したり、setFlag()とsetVariable()を混在させるのは
あまり意味がないと考えた
そこで全てのフラグをsetVariable()の配列で作り、
フラグ名は数値で管理する、という方法を考えた
実際のスクリプトと使い方
開始スクリプトに書くユーザー定義関数
使い方は、例えば、
単純なフラグのように、真偽や勝敗を判定する場合は、0か1を入れておく
イベントの進行状況を確認する場合は、0,1,2,3,4など段階の数値を入れておく
何を選択したかを保存する場合は、選択肢番号を入れる
誰かのあだ名など、文字列もそのまま保存できる
そして、何番のインデックスに、何の数値が入ってると、どんな意味なのかを、
メモに書いておく(このメモはバックアップ推奨)
#####メモの例######
インデックス番号、入っている情報、入っている形(数値)
フラグ
~~
1避難/戦う1/2
2戦闘結果 負け/勝ち 1/2
3マリエッタ 初めて話しかける/二回目以降話しかける 1/2
4クレア 初めて話しかける/二回目以降話しかける 1/2
5サルビア 初めて話しかける/二回目以降話しかける 1/2
6サルビアギャグへの反応 ?/! 1/2
7レジスタンスシナリオ進行 防衛戦前/夜/翌朝自/翌朝マ 0/1/2/3/4
####################
あるイベントエディタ内での実際の使用例
上のような書き方で作ってみて、
作業時間が減り、エディタが見やすくなり、フラグが一覧化されて把握しやすくなり
面倒という理由でフラグ作成やフラグ回収を避けることが減った
次作る時も、このやり方でやると思う
ツイート
RPGエディタでまとまった物語を作る時、
分岐やイベントの多い作品を作る時、
フラグの管理が課題の一つになってくる
Rmakeの講座を読めば、フラグは、
setFlag()を使って作るのが一番簡単そうだとわかる
そして慣れてくれば、setVariable()を使えば、
さらにこまやかな条件づけができるとわかってくるのだが…
問題は、1つのゲームで使うフラグの多さだと思う
例えば、自分の経験では、
マップ10個、1時間半ほどのアドベンチャーを作るのに、
300近いsetFlag()またはsetVariable()を設定しなくてはならなかった
その数を扱うには、管理メモがあると心強い
でもどうせフラグ管理のメモを作るなら、
変数名を文字列で設定したり、setFlag()とsetVariable()を混在させるのは
あまり意味がないと考えた
そこで全てのフラグをsetVariable()の配列で作り、
フラグ名は数値で管理する、という方法を考えた
実際のスクリプトと使い方
開始スクリプトに書くユーザー定義関数
#フラグセットと取り出しの関数 #通常変数Flagの配列の中に、インデックスを指定して情報を入れたり取得したりする setVariable("Flag",createArray()) def sflg(a,b,c) getVariable("Flag")[a]=b if c #aに配列が作ってあること getVariable("Flag")[a][c]=b end end def gflg(a,b) if b #aに配列が作ってあること c=getVariable("Flag")[a][b] else c=getVariable("Flag")[a] end return c end
使い方は、例えば、
単純なフラグのように、真偽や勝敗を判定する場合は、0か1を入れておく
イベントの進行状況を確認する場合は、0,1,2,3,4など段階の数値を入れておく
何を選択したかを保存する場合は、選択肢番号を入れる
誰かのあだ名など、文字列もそのまま保存できる
そして、何番のインデックスに、何の数値が入ってると、どんな意味なのかを、
メモに書いておく(このメモはバックアップ推奨)
#####メモの例######
インデックス番号、入っている情報、入っている形(数値)
フラグ
~~
1避難/戦う1/2
2戦闘結果 負け/勝ち 1/2
3マリエッタ 初めて話しかける/二回目以降話しかける 1/2
4クレア 初めて話しかける/二回目以降話しかける 1/2
5サルビア 初めて話しかける/二回目以降話しかける 1/2
6サルビアギャグへの反応 ?/! 1/2
7レジスタンスシナリオ進行 防衛戦前/夜/翌朝自/翌朝マ 0/1/2/3/4
####################
あるイベントエディタ内での実際の使用例
if gflg(7) > 1 if gflg(12) > 0 hanasu("セイコ","そういえば…") else if gflg(9) > 0 hanasu("サルビア","セイコ、おはよう","昨晩は楽しかった") else hanasu("サルビア","セイコ、おはよう","今日はよろしくな!") end sflg(12,1) end elsif gflg(5) > 0 sflg(5,2) hanasu("セイコ","魔法ってどうやれば使えるんだ?") else sflg(5,1) hanasu("???","レジス箪笥(たんす)…") hanasu("???","なんちゃって") case speakWithSelect(2,"?","!", "セイコ\n「・・・・・・」") when 0 sflg(6,1) hanasu("セイコ","(ちょっと何言ってるかわからない…)") when 1 sflg(6,2) hanasu("セイコ","最高に面白い!") end hanasu("???","私はサルビア・サブレヴァニーユ","見ての通り魔女さ") if gflg(6) >1 hanasu("サルビア","それにいい子みたいだし") else hanasu("サルビア","まだまだお子ちゃまみたいだけど") end end #上記エディタでのフラグの説明 #場面1か2か #場面1で、初めて話しかける時、二度目以降話しかける時 #場面1で、初めて話しかける時に何を選択したか #場面2で、初めて話しかける時、二度目以降話しかける時 #昨夜のイベントを経験したか、していないか #以上の情報を取り出したり入れたりしています
上のような書き方で作ってみて、
作業時間が減り、エディタが見やすくなり、フラグが一覧化されて把握しやすくなり
面倒という理由でフラグ作成やフラグ回収を避けることが減った
次作る時も、このやり方でやると思う
コメントする
コメントするには、ログインする必要があります。
自分なりに使いやすい関数に纏めておくと
利便性が上がるだけでなく、
後からコードのチェックをする際も
解析しやすくなって良いですね
そして、インデントが
整理されていない点が
気になってしまうクセ←
全くわからなかったのですが、
簸川さんをはじめとする方々の初心者講座や
オリジナル関数を読むうちに、
自然と何が機能的できれいかをわかるようになって、
前よりできることが多くなってとても嬉しいです。
とはいえ、インデントなどの感覚はまだのようです
インデントっていうんですね…
後で直しておきます!('ω'っ)3