このRGSS2講座にはRubyの文法や仕様についての解説などは一切ありません、
難しいことを省けるだけ省き、RPGツクールVXのスクリプトをいじるために
必要な最低限の要素だけを紹介する講座です。
スクリプトに触ったことがない、本格的な勉強はできそうにないけど
ちょっとだけでもスクリプトをいじれたらいいのになぁ……
そんなVXツクラーさんを対象としています。
基礎編ではスクリプト改造の具体例を挙げて、その改造に必要な知識を
ものすごくテキトウに解説していきます。
……というか詳しく説明できるほどの知識がありませんorz
■ 目次
□基礎知識
□行動順のランダム要素をなくす
□メニューを開いた回数をカウントする
□スイッチでクリティカル禁止
□ランダムにアイテムを入手する
■ バックアップをとる
スクリプトを変にいじって失敗し、元に戻せなくなったらどうしよう……
バックアップをとっておけばこの悩みは解決します、でもその前にコメントについて説明

画像のように文字が緑色になっている部分がコメントです。
この部分はスクリプト実行時に無視されるので何を書いてもかまいません、
半角のシャープ(#)以降がコメントとして扱われます。
このコメントを使って簡単にバックアップをとることができます。
まず、これからいじる部分をコピペして同じ行を二つに増やしてください、
このうち片方には頭に半角シャープを挿入してコメント化、残ったもう一方を改造していきます。

もしもエラーが発生するなどして元の状態に戻したくなったら
改造した方を削除し、放置しておいた方の半角シャープを削除、これで元通りですね。
複数行をまとめて改造する場合、全部の行頭に半角シャープを挿入していくのは面倒なので
コメント化したい範囲を選択して、Ctrl + Q を押してください。
これで選択範囲がすべてコメント化されます、もう一度同じようにすれば元に戻ります。
■ 全セクション検索
○○をいじりたいけど、どのセクションの何行目にあるのかわからない!
そんなときに便利なのが全セクション検索です、Shift + Ctrl + F を押して検索したいキーワードを
入力すれば、入力したキーワードを含む行がリストアップされます。
"スキル" で全セクション検索を行った場合

■ お約束
全角スペースを使わない!
スクリプトを見ると、ちょうど全角スペース分の空白が空けてあるように見えてしまいますが
あれは半角スペース2個です(TabでもOK)、スクリプトエディタで全角文字(スペース)を
使っていいのはコメントと" "で囲まれた部分のみということを覚えておいてください。
バトルにおける行動順は敏捷性の値やターン内先制オプションによって決定されますが、
実際にはこれにランダムな値が加算されるので、毎ターン同じ行動順になるとは限りません。
このランダム要素を排除してしまえば、『敏捷性が 15 あれば必ず敵より早く行動できる』というように
敏捷性の恩恵をより感じられるようになるはずです。
改造するセクションはGame_BattleAction
メソッドは206〜215行目にあるmake_speedです。

ランダム要素が含まれているのは210行目の rand(5 + battler.agi / 4) という部分なので
ここをまるっと削除して
@speed = battler.agi
と書き換えてしまえばランダム要素がなくなります。
重要なことは rand(数値や式) はランダム要素だ ということ、これだけ分かっていればOKです、
全セクション検索で "rand(" を検索(ダブルクォーテーション含まず)すればゲーム中のすべての
ランダム要素がリストアップされるわけです。
以下は make_speed メソッドの簡単な解説
まずは210行目を日本語に直してみます……
行動スピード = バトラーの敏捷性 + 乱数(バトラーの敏捷性を4で割って5を足した数)
なんだかごちゃごちゃしていて分かりにくいので、このバトラーの敏捷性を 20 と仮定してみます。
行動スピード = 20 + 乱数(10)
括弧内は20を4で割って5を足して10になりますね、乱数(10)には10通り(0〜9)の数値の
いずれかが当てはめられるので、20〜29の範囲でランダムな値がこのバトラーの行動スピードになります。
それでは211行目以降をテキトウに……
211行目 : 行動がスキルなら行動スピードにスキルの速度補正値を足す
212行目 : 行動がアイテムなら行動スピードにアイテムの速度補正値を足す
213行目 : 行動が防御なら行動スピードに2000を足す
214行目 : 行動が通常攻撃でターン内先制オプションが有効なら行動スピードに1000を足す
そんなの何に使うんだ?と思うかもしれませんが、スクリプトの内容としては
いろんな場面に応用できるものですので安心してください。
カウントするといえば思いつくのはゲーム変数を利用する方法ですね、
スクリプトでもイベントと同じようにゲーム変数を使ってカウントします。
その方が結果をイベントで利用しやすくなる、というのが理由です。
さて、改造するのはScene_Mapセクション
call_menuメソッドです。
名前だけ見てもマップシーンのメニューを呼ぶ処理だということがわかりますね。

この232行目と233行目の間に
$game_variables[1] += 1
を挿入してください、これだけで改造は完了です。
これでメニューが呼び出されるたびに、ゲーム変数 1 番の値が 1 ずつ加算されていきます。
ゲーム変数 1 番の値が 10 以上になったらメニューを禁止にする
なんていう並列処理のコモンイベントを組んでおけば、オープニングからエンディングまでの間に
10回しかメニューを開くことができないという制限付きゲームの完成です。
さて、冒頭で『いろんな場面に応用できる』と書いたとおり、今回追加したカウント処理の一行は
基本的にはスクリプトのどこへでも挿入が可能です。乗り物に乗った回数、装備を変更した回数などなど、
いろんなものをカウントして、イベントの発生条件として利用することができます。
カウントしたいものがどこで処理されているかは全セクション検索を利用して探してみましょう。
このダンジョンでは敵も味方もクリティカルが発動しない。
そんな特殊な設定を実現するためのテクニックを紹介します。
といってもテクニックといえるほどのものではありません。
特定のゲームスイッチがオンのときだけ元からある処理を無視する、
そんな改造をほどこします。
unless $game_switches[5]
end
この二行で挟まれた処理は5番のスイッチがオンのときは処理が
実行されなくなります、簡単ですね。
数字を変えれば好きなゲームスイッチで処理を操作することができるわけです。
それではさっそくクリティカルの発動をスイッチで制限してみましょう。
改造するのはGame_Battlerセクション
make_attack_damage_valueメソッドです。

643行目 : クリティカル判定
644行目 : クリティカル無効判定
645行目 : クリティカルのダメージ補正(クリティカルならダメージを3倍にします)
となっているので、643行目を上で紹介した二行で挟み込んでみます。
unless $game_switches[5]
@critical = (rand(100) < attacker.cri)
end
これでスイッチ5番がオンのときはクリティカル判定が無視されるようになり、
クリティカルが無効となります。
あとはこのスイッチをダンジョンに入るとき、出るときに操作すれば完成です。
ボス戦の直前と直後で操作すれば戦闘単位での設定も可能ですね。
今回紹介した方法は当然クリティカル以外の部分にも適用できます、すぐ下にある
ダメージ分散に適用すればダメージが分散しないダンジョンを作ることができますし、
属性補正やMP消費、他にも戦闘以外の処理を無視してみたり、色々試してみてください。
今回はスクリプトエディタではなく、イベントコマンド『スクリプト』を利用します。
何が入っているか分からない宝箱を作る場合、イベントコマンドで乱数による分岐を
作るわけですが、候補となるアイテムが多いと作業量がとんでもないことになってしまいます。
そこでスクリプトの出番です!
item = $data_items[rand($data_items.size - 1) + 1]
$game_party.gain_item(item, 1)
text = item.name + "を手に入れた!"
$game_message.texts.push(text)
このスクリプトを実行するだけでデータベースにあるアイテムの中から1つを入手し、
そのメッセージを表示してくれます。
しかしこれには大きな問題があります、このままではすべてのアイテムが
出現候補となってしまい、非常に使いづらいです。
この問題を解決するために出現候補となるアイテムを設定できるように改良してみます。
a = [1, 2, 3, 4, 5]
item = $data_items[a[rand(a.size)]]
$game_party.gain_item(item, 1)
text = item.name + "を手に入れた!"
$game_message.texts.push(text)
最初の行の括弧内に1〜5までの数字がカンマで区切って書かれています、この数字が
出現候補アイテムのIDとなるわけです。ここに書き入れたIDのアイテムから一つが選択され
入手することになります。
候補アイテムがたくさんあるからID確認して入力するなんて面倒だよぉ……
そんな風に思う方もいるかもしれませんが、この方法にはこんな利点もあります。
同じIDを複数設定することで出現率を設定できる
というものです、例えば
a = [1, 1, 1, 1, 5]
とした場合、80%の確率でID1番のアイテムが手に入り、残りの20%の確率で
ID5番のアイテムが手に入るようになるわけです、見た目もわかりやすいと思います。
注意点として、スクリプトエディタと違って入力できる文字数に限りがある
という点を挙げておきます。たくさんの候補アイテムを設定する場合は当然改行するんですが
変なところで改行すると、ツクールが勘違いをして誤動作の原因となるおそれがあります。
a = [1, 2, 3, 4, 5,
6, 7, 8, 9, 10]
上記のように必ずカンマが行のお尻にくるように改行してください
■ さらなる改造
アイテムではなく、武器や防具をランダム入手したい!
その場合は$data_itemsの items という部分を weapons(武器) armors(防具)に置き換えてください。
変更はこの一箇所のみです、item = 〜 や item.name の部分は変更しなくて大丈夫です。
さらに、アイテム、武器、防具をごちゃ混ぜにしてランダム入手したい!という場合は
上記の方法で三種類のランダム入手スクリプトを作り、イベントコマンドの条件分岐で
どれか一つだけを実行してやればOKです。
アイテムだけで候補が255もある!これじゃ改行しても収まらないよ!
なんてときもこの方法で複数のスクリプトに分けてやれば解決できるはずです。