RPGツクールXPVer1.02に含まれるRGSSのバグ

説明

RPGツクールXPのバージョン1.02に含まれているRGSSのバグ/仕様の紹介とその訂正方法について公開しています。
この情報はできればいろいろと共有したいので、逐次情報を募集、かつこの情報については著作権を完全に放棄します。

また、ここで公開されているものの多くはRGSS WikiRPGXP/修正Scripts.RPGXPに導入されていますので、
上記サイトで「Scripts.rxdata」をダウンロードして上書きするだけでこのページで公開されているものを含めた多くのバグを修正することが可能です。

使い方

これに関しては、内容が内容なのでコピーアンドペーストだけで終わるようなバージョンだけではなく、訂正部分だけを書いたものも公開しています。
訂正部分だけを公開しているものは、スクリプトから「Ctrl + Shift + F」の全文検索や「Ctrl + F」の検索などを利用して検索をかけてください。

バグフィックステキスト

仕様ではなく、「バグ」に関しては、コピー&ペーストによって修正できるバージョンを下記に公開しています。
この素材を導入することでこの先に書いてあるバグは手動で訂正する必要がなくなります。
(ただし、一番下に書かれている「仕様」については各自手動で導入するようにしてください)

導入方法

スクリプトの「Scene_Dubug」のすぐ下に挿入してください。
他にスクリプト素材を導入する際は、すべてこのバグ修正素材の下に追加するようにしてください。

バグ修正素材で再定義しているメソッド

正常に動作しない場合は、以下のメソッドが他のRGSS素材で再定義されていないかなどを確認してください。

class Game_Battler
  def skill_effect(user, skill)

class Interpreter
  def command_355
  def command_111

ソースと修正内容

RGSS Ver1.02 Bug Fix Text: ソース

命中率が99%以下になると一切の攻撃スキルが命中しなくなるバグ

説明

第一命中判定の式がおかしいので、物理攻撃スキル(攻撃力Fが1以上のスキル)は、アクターの命中率が99%以下になるとあたらなくなります。

対策

Game_Battler 3のdef skill_effect(user, skill)の以下の部分を書き換えてください。

# 第一命中判定
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end

上の数行を下記のように変更してください。

# 第一命中判定
hit = skill.atk_f > 0 ? skill.hit * user.hit / 100 : skill.hit

スキルの威力が0に設定されている場合、ダメージを与えても「Miss」と表示されるバグ

説明

スキルの威力が0に設定されていると、ステートが変化しない限り「Miss」と表示され、 ステートが変化した場合は何も表示されないように設定されていますが、 ダメージを与えた場合も同様の処理になってしまいます。

対策

Game_Battler 3のdef skill_effect(user, skill)の以下の部分を書き換えてください。

# 威力 0 以外の物理攻撃の場合
if skill.power != 0 and skill.atk_f > 0

上の数行を下記のように変更してください。

# 物理攻撃の場合
if skill.atk_f > 0
# 威力が 0 の場合
if skill.power == 0

上の数行を下記のように変更してください。

# 威力が 0 の場合 で、 なおかつダメージが 0 の場合
if skill.power == 0 and self.damage == 0

イベントコマンドの「条件分岐」のアクターが特定の防具を装備している場合の処理に不備があるバグ

説明

イベントコマンドの「条件分岐」で、アクターがある防具を装備するかを判別する方法の中に、 装飾品(防具の四つ目)のチェックが抜けているため、特定の装飾品を装備しているかの判別ができないバグがあります。

対策

Interpreter 3のdef command_111の以下の部分を書き換えてください。(太字が変更・追加部分)

when 4  # 防具
  result = (actor.armor1_id == @parameters[3] or
    actor.armor2_id == @parameters[3] or
    actor.armor3_id == @parameters[3])

上の数行を下記のように変更してください。

when 4 # 防具
  result = (actor.armor1_id == @parameters[3] or
    actor.armor2_id == @parameters[3] or
    actor.armor3_id == @parameters[3] or
    actor.armor4_id == @parameters[3])

イベントコマンドの「スクリプト」の一行目がfalseになるとフリーズするバグ

説明

イベントコマンドの「スクリプト」の一行目に計算結果がfalseになるものを書くとフリーズするバグを訂正します。
というかそもそもなんでスクリプトの実行結果を返り値にするか分からないので、スクリプトの実行結果を返さないように(常にtrueになるように)変更しました。

対策

Interpreter 7のdef command_355の以下の部分を書き換えてください。

# script に 1 行目を設定
script = @list[@index].parameters[0] + "\n"

に以下の一行を追加。

# 現在のindexを保存
temp_index = @index
# 評価
result = eval(script)
# 戻り値が false の場合
if result == false
  # 終了
  return false
end
 を以下のように書き換え。
# 評価
result = eval(script)
# 戻り値が false の場合
if result == false
  if temp_index == @index
    # indexが進んでない場合、indexを進める
    @index += 1
  end
  # 終了
  return false
end

SPが足りない、沈黙などの状況でも敵がスキルを使おうとする仕様の変更

説明

敵が沈黙状態なのに魔法を使おうとして「何もしない」になる仕様を変更します。

対策

Game_Enemyのdef make_actionの以下の部分の上に追加してください。

# 条件に該当 : このアクションを追加

のすぐに、以下のテキストを追加してください。

# スキル使用可能確認
if action.kind == 1
  unless self.skill_can_use?(action.skill_id)
    next
  end
end

※このスクリプトはp-sight: Annexにて素材として公開しています。→敵の思考方式の変更

文字とアニメーションの描画Z座標が対象バトラーのZ座標と同じ位置になる仕様の変更

説明

ダメージ表示や戦闘のアニメーションのZ座標が対象のバトラーと同じ位置になる仕様の変更です。
これだけだと特に問題が無いように見えますけど、以下の画像を見てください。

スクリプト適用前

すこし分かりにくいですが、SPの文字の裏にダメージが表示されているのが分かるでしょうか。
特に問題があるわけではありませんが、例えばHPゲージやSPゲージを使っているとそのゲージの裏にダメージやアニメーションが表示されますし、 ピクチャを使った場合も、ピクチャの裏にアニメーションやダメージが表示されてしまうため、 ピクチャの上からアニメーションの表示などがデフォルトではできなくなってしまいます。

対策

Mainの上ならドコでも良いので、新たにセクションを追加して、以下のテキストファイルの中身をそのまま貼り付けてください。

このソースを適用すると、以下のように変化します。

スクリプト適用後

今度はSPの手前にダメージが表示されているのが分かるでしょうか。
このように表示されているなら、適用は正常に行われました。