いつからバレンタインデーとチョコに関連があると錯覚していた?

迷惑メールが連作になってきた。

芥川美代子様が永眠したり
宝生麗華様が裏社会に顔の利くお父様に相談したり
愛子さんがバンビさんにフラれたくない一心でエロい写真を送ってきたり
途中から舞子さんに名前が変わってたり

ちょっと面白いぞ。

舞子さんはとうとう諦めたのか、
男口調で「ご結婚おめでとうございます」と
全然違う切り口で来やがった。せめてアドレス変えろよ


あ、どうも、かげろうです。

更新が遅れた理由は
バレンタインデーに用事があったからとか
そんな理由では全くありません。

前回が長かったので、今回は短めに行きましょう。
エンカウントは長くなりそうな予感がするので、
今日は「隊列」について。


さて、隊列ってなんでしょう?

実は隊列はデータベースの「職業」→「位置」で変えられます。
「前衛」「中衛」「後衛」のみっつが選択できます。
なんで職業にひっついとんねん。

ああ、なんか隊列ってあるんだな。
じゃあ剣士は前衛に、魔法使いは後衛にしておくか。

とかいうノリで設定したらえらいことになります。
一般的には後列キャラは受けるダメージと与えるダメージが半分になり、
魔法や飛び道具、ジャンプ攻撃等は後列からでもダメージは変わらないとかそんなかんじですが、ツクールVXでは全然違います。

では、ツクールVXの隊列をいじると何が変わるかというと、
敵からの狙われやすさが変わります。


前衛は後衛の2倍狙われやすく、中衛はその中間、とのことです。
これは、VXのときはこうだったみたいなことが
VXAceの公式サイトに書いてあったので間違いないです。

ちなみに全体攻撃には関係ありませんが、
スキルでも単体への攻撃には適用されます。

では今回も、スクリプトを見てみましょう。
「Game_Actor」の「●狙われやすさの取得」を見ます。
狙われやすさ
#--------------------------------------------------------------------------
# ● 狙われやすさの取得
#--------------------------------------------------------------------------
def odds
 return 4 - self.class.position
end

え?これだけ?

「self.class.position」が隊列だということはわかりますが、
じゃあ具体的に前衛は0で、中衛は1で・・・
みたいな設定をしている箇所が見つからん。
見つからん。見つからん。

ひょっとして、これはデータベースの「職業」の「位置」を入力した時点でこちらにはいじれない部分で勝手に数字が代入されているんじゃあ?

と思ってヘルプを見たらありました。
ヘルプ

position
位置 (0:前衛、1:中衛、2:後衛) 。

めっちゃかいてあるやん


というわけで、この数字をいじるのはおそらく不可能です。
しかし、この数字の役目を変えてやることは可能です。

4 - self.class.position

なので、
「前衛が4 - 0 = 4」
「中衛が4 - 1 = 3」
「後衛が4 - 2 = 2」
つまり、数字が低いほど狙われにくいということがわかります。
ならば、こっちで勝手にif文を作成してやることで、細かい調整が可能になります。

#-------------------------------------------------------------------------
# ● 狙われやすさの取得
#-------------------------------------------------------------------------
def odds
 n = 0
 if self.class.position == 0    #前衛のとき
   n = 4
 elsif self.class.position == 1  #中衛のとき
   n = 3
 else              #後衛のとき
   n = 2
 end
 return n
end

このように変えてしまえば楽です。
このままだと初期状態と変わりませんので、
n = 4 とかの箇所を好きなようにいじってください。
差を顕著にしたければ、上から6,4,2にしたり、
100,10,1みたいなことも可能です。

また、確かめてみましたが、0にすると一切狙われなくなるようです。
ただその場合、こちらが一人だと敵が一切何もしてこなくなるため
ゲーム的にはアウトです。

もっと突っ込んでスクリプトを確認すると、
「Game_Unit」の「●ターゲットのランダムな決定」で
実際に狙われやすさが反映されているようです。
ターゲットのランダムな決定
#--------------------------------------------------------------------------
# ● ターゲットのランダムな決定
#--------------------------------------------------------------------------
def random_target
 roulette = []
 for member in existing_members
   member.odds.times do
     roulette.push(member)
   end
 end
 return roulette.size > 0 ? roulette[rand(roulette.size)] : nil
end

「odds」という単語が使われているのがおそらくここだけのため、
ここで狙われやすさを決めていると思われるのですが、
内容が非常に難解なので、かなり噛み砕いて説明します。

たとえば初期状態の「前衛4:中衛3:後衛2」だとして、
前衛の中衛と後衛の3人パーティだとすると、

1.箱(roulette = [])の中に
赤いボールを4つ
青いボールを3つ
黄色いボールを2つ
入れる。(roulette.push)

2.適当にひとつ取り出す。(roulette[rand(roulette.size)])

のようなことをしています。
たぶん。



以上、隊列の説明終わり。
よく考えたらツクール内で「隊列」って言葉は使ってなかった。

ところでVXAceでは隊列は廃止されてアクターごとに細かく狙われやすさが設定できるとかなんとか。
それどころかクリティカル率とかも細かく設定できるとかなんとか。

もうVXAce買えばいいんじゃないだろうか。


今回は隊列の説明と割合を変動させる方法しか説明していませんが、

「職業ではなくアクターごとに隊列を変更したい」
「隊列をメニュー画面でわかりやすくしたい」
「隊列をゲーム内で変更できるようにしたい」
「狙われやすさではなく防御力や攻撃力を変えたい」
「後列から通常攻撃が届かないようにしたい」

などといった本当に「隊列」に関する要望は、
ググればスクリプトがたくさん出てくるので
勝手に実装しやがれ(放棄)



かげろうでした。


RGSS2講座目次

RGSS2講座第5回
スポンサーサイト

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR