スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【小ネタ】防御力と精神力

スキル、アイテムの防御力と精神力によるダメージ軽減は、物理関係度と精神関係度を利用しています。
物理関係度が100なら通常通り「防御力×2」の軽減ですが、物理関係度が10なら「防御力×2÷10」20%の軽減です。
デフォルトデータのファイアのように精神関係度が30なら「精神力×1×30/100」つまり精神力の30%です。
少ないです。これでは精神力を上げてもなかなか魔法ダメージは減りません。100上げてもたったの30ダメージです。
まあそれはそういうバランスでいいように作るなら問題ないんですが、個人的に違和感を覚えたので。

Game_Battlerの657行目から。
  def make_obj_damage_value(user, obj)
    damage = obj.base_damage # 基本ダメージを取得
    if damage > 0 # ダメージが正の数
      damage += user.atk * 4 * obj.atk_f / 100 #打撃関係度: 使用者
      damage += user.spi * 2 * obj.spi_f / 100 # 精神関係度: 使用者
      unless obj.ignore_defense # 防御力無視以外視以外
        damage -= self.def * 2 * obj.atk_f / 100 # 打撃関係度: 対象者
        damage -= self.spi * 1 * obj.spi_f / 100 # 精神関係度: 対象者
      end

damage -= self.def * 2 * obj.atk_f / 100が問題です。
受け側の防御力 × 2 × スキルの物理関係度÷100 をダメージから減らすことになっています。
というわけで、これとこの下の行を頭に#をつけてコメントアウトして、別の式を入れてやりましょう。
        damage -= self.def * 2 if obj.physical_attack
        damage -= self.spi * 1 unless obj.physical_attack
さっきの2行の代わりです。
physical_attackというのは物理攻撃。つまり
物理攻撃ならば、防御力の2倍を引く 物理攻撃でない(精神攻撃)ならば、精神力の1倍を引く
となります。これでそれっぽくなりました。

self.spi * 2にしてやれば精神力の2倍を引くようになって、さらに魔法ダメージを減らせるようになります。精神力のありがたみが増します。
スポンサーサイト

【小ネタ】アイテムドロップ率

手に入ったら超ラッキーみたいな感じで1/400とか1/1000とかのドロップアイテムを作りたいと・・・思った人がいるかどうかは分かりませんが。

Game_Troopの235行目から251行目、
  def make_drop_items
    drop_items = []
    for enemy in dead_members
      for di in [enemy.drop_item1, enemy.drop_item2]
        ########
        next if di.kind == 0
        next if rand(di.denominator) != 0
        if di.kind == 1
          drop_items.push($data_items[di.item_id])
        elsif di.kind == 2
          drop_items.push($data_weapons[di.weapon_id])
        elsif di.kind == 3
          drop_items.push($data_armors[di.armor_id])
        end
      end
    end
    return drop_items
  end

この########の部分を
di.denominator = 400 if di.denominator == 199
とすると、ドロップ率1/199と設定したものは1/400として扱われることになります。199分の1なんて普通使わないし別にいいよね

denominatorはドロップ率、drop_items.pushというのがドロップアイテム入手です。
next if rand(di.denominator) != 0
rand(そのアイテムのドロップ率)が0でなければnext次の処理に移る。
ドロップ率が1/100ならrand(100)つまり0~99のランダムな数値が0と同値になればnextは起こらずドロップ成功です。

di.kindはアイテムの種類。1が道具、2が武器、3が防具です。

drop_items.push($data_weapons[di.weapon_id])
ドロップアイテムの配列.加える(データベース:武器[ID])
つまりそのIDの武器が入手ドロップアイテムのリストに加わります。
ここでリストに加わったアイテムが、この後の処理で「~を手に入れた!」と表示され、持ち物に入ります。

【小ネタ】エンカウント歩数算出

デフォルトではエンカウント歩数は
1~(マップで設定した歩数の2倍-1)
になってます。つまり0%~200%です。振れ幅がやたら大きいですね。

Game_Playerの195行目から200行目、
  def make_encounter_count
    if $game_map.map_id != 0
      n = $game_map.encounter_step
      @encounter_count = rand(n) + rand(n) + 1 # サイコロを 2 個振るイメージ
    end
  end

これを
  def make_encounter_count
    if $game_map.map_id != 0
      n = $game_map.encounter_step
      @encounter_count = n - n / 5 + rand(n * 2 / 5)
    end
    end
これで80%~120%になります。

$game_map.encounter_stepというのがマップで設定した歩数です。これをnに代入して計算に使っています。
@encounter_countが結果のエンカウント歩数。
歩数を30にしたと仮定して計算してみます。
rand()というのは0から「()内の数値-1」までの数をランダムで出します。

rand(n) + rand(n) + 1は
(0~29)+(0~29)+1ということです。1~59です。

で、さっきのn - n / 5 + rand(n * 2 / 5)は
30 - 30/5 + rand(30*2/5)
30 - 6 + rand(12)
24 + (0~11)
24~35です。80%~120%の値になります。

50%~150%にしたければ、
@encounter_count = n / 2 + rand(n)
15 + (1~30)
こんな感じです。
about
管理人:トリス

RPGツクールVX、VXAceのスクリプト素材を作ってます。
VXAceはATBやテストプレー高速化、VXはひきも記様のSRPG2拡張、アクション拡張 などがあります。

簡易利用規約
素材を使用した作品に著作権表記(このブログの名前)をお願いします。

作品公開時の利用報告は任意です。

サポート,リンク,共同制作などその他の詳しい規約はこちら
カテゴリ
リンク
ゲーム紹介
協力したゲームとか素材利用してくれたゲームとか

アスガル騎士団
アルカナリッター
 (VX)SRPG
 作品ページ  DLページ

チキチキボーンの骨
TimeLeaper -タイムリーパー-
 (VXAce)ATB
 作品ページ  DLページ
明日へのデュナミス
 (VXAce)ATB_XP
 作品ページ  DLページ


レンガの創作小屋
Dimension Warriors 間章
 (VXAce)
 作品ページ

なかぱー更新記
CRYSTALDestiny
 (VXAce)ATBサイドビュー
 DLページ
リンク用バナー

リンクフリーです。相互リンクは受け付けていません。
画像への直リンクは禁止です。
アクセスカウンター
リクエスト・質問掲示板
最新記事
月別アーカイブ
最新コメント
RSSリンクの表示
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。