RPGエディタでのフラグ管理

投稿者:            mini mosmoss 投稿日:2017/07/19 03:54

ちょっと長い前置き

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で、初めて話しかける時、二度目以降話しかける時
#昨夜のイベントを経験したか、していないか

#以上の情報を取り出したり入れたりしています


上のような書き方で作ってみて、
作業時間が減り、エディタが見やすくなり、フラグが一覧化されて把握しやすくなり
面倒という理由でフラグ作成やフラグ回収を避けることが減った
次作る時も、このやり方でやると思う

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2017/07/23 00:59, 履歴)
たくさんのデータを扱う場合は
自分なりに使いやすい関数に纏めておくと
利便性が上がるだけでなく、
後からコードのチェックをする際も
解析しやすくなって良いですね

そして、インデントが
整理されていない点が
気になってしまうクセ←
            mini mosmoss(投稿日:2017/07/30 10:53, 履歴)
最初は自分で組み立てる場合のポイントが
全くわからなかったのですが、
簸川さんをはじめとする方々の初心者講座や
オリジナル関数を読むうちに、
自然と何が機能的できれいかをわかるようになって、
前よりできることが多くなってとても嬉しいです。

とはいえ、インデントなどの感覚はまだのようです
インデントっていうんですね…
後で直しておきます!('ω'っ)3
Cdv30200 aoi icon mini aoihikawa(投稿日:2017/07/30 13:33, 履歴)
綺麗になった!ヾ('ω'*)ゝ