#============================================================================== # ■ RGSS3 スリップダメージ・ダメージ床拡張&表現強化 Ver2.00a by 星潟 #------------------------------------------------------------------------------ # スリップダメージ・自動回復の効果を計算式を以て行えるようにします。 # この効果は特徴欄とは別にメモ欄で設定しますが # スリップダメージ・自動回復の効果と同時に反映されます。 # また、マップ上でのスリップダメージ処理を行わなくさせる機能、 # スリップダメージ処理を行う歩数、 # そしてスリップダメージ処理時のフラッシュ、SEが変更可能です。 # 更にダメージ床について、地形タグ別に # ダメージ、フラッシュ、SEの設定が行う事が出来ます。 #============================================================================== # 自動回復/スリップダメージ設定例(全て、特徴を有する項目のメモ欄を使用) # # 最初にHP/MP/TPのどれを変更するかを選択し、次に回復量を指定します。 # また、必要に応じて、回復量の後に条件を指定します。 #------------------------------------------------------------------------------ # HPを10固定回復させたい場合 # # #------------------------------------------------------------------------------ # HPに20固定ダメージを与えたい場合 # # #------------------------------------------------------------------------------ # MPを30固定回復させたい場合 # # #------------------------------------------------------------------------------ # MPに40固定ダメージを与えたい場合 # # #------------------------------------------------------------------------------ # TPを50固定回復させたい場合 # # #------------------------------------------------------------------------------ # TPに60固定ダメージを与えたい場合 # # #------------------------------------------------------------------------------ # 戦闘中のみ、最大HPの1%分自動回復させたい場合 # # #------------------------------------------------------------------------------ # 非戦闘中のみ、最大MPの20%分HPを自動回復させたい場合 # # #------------------------------------------------------------------------------ # HPが50%以下の場合、運の20%分MPを自動回復させたい場合 # # #------------------------------------------------------------------------------ # MPが0の場合のみ、MPを全回復させたい場合 # # #------------------------------------------------------------------------------ # 自分の現在HPが10%以下の時、TPを100回復させたい場合 # # #------------------------------------------------------------------------------ # 50%の確率でTPを5回復させたい場合 # # #============================================================================== # Ver1.01 何故か特定の記号が全消去されていた謎現象を修正しました。 # # Ver2.00 機能を大幅に拡張しました。 # Ver1.01と互換性はありませんので設定には注意が必要です。 # # Ver2.00a 余分な記述を削除しました。 #============================================================================== module GRPLUS #HP自動回復の設定用ワードを設定します。 H_WORD = "HP自動回復" #MP自動回復の設定用ワードを設定します。 M_WORD = "MP自動回復" #TP自動回復の設定用ワードを設定します。 T_WORD = "TP自動回復" #歩行時のスリップダメージ(自動回復も含む)処理を行うか? SLIPWALK = true #歩行時のスリップダメージが有効な場合 #何歩でスリップダメージ処理を行うか? SLIPSTEP = 20 #スリップダメージ処理時にダメージを受けた場合フラッシュを行うか? SLIPFLASH = true #スリップダメージ時のフラッシュの色と強さの設定 #赤 緑 青 強さ 長さの順にカンマで区切って設定してください。 FLASH = [255,0,0,128,8] #スリップダメージ時にSEを鳴らしますか? SE_USE = true #スリップダメージ時のSEを指定します。 #SEの名前 音量 ピッチの順にカンマで区切って設定してください。 SE_DATA1 = ["Poison",100,100] #地形タグ別のダメージ床のダメージを設定します。 F_D_BY_I = {} F_D_BY_I[0] = 10 F_D_BY_I[1] = 20 F_D_BY_I[2] = 50 F_D_BY_I[3] = 100 F_D_BY_I[4] = 200 F_D_BY_I[5] = 500 F_D_BY_I[6] = 1000 F_D_BY_I[7] = 2500 #ダメージ床処理時にフラッシュを行うか? SLIPFLASHF = true #地形タグ別のダメージ床のフラッシュを設定します。 F_F_BY_I = {} F_F_BY_I[0] = [255,255,255,128,8] F_F_BY_I[1] = [255,255,255,128,8] F_F_BY_I[2] = [255,255,255,128,8] F_F_BY_I[3] = [255,255,255,128,8] F_F_BY_I[4] = [255,255,255,128,8] F_F_BY_I[5] = [255,255,255,128,8] F_F_BY_I[6] = [255,255,255,128,8] F_F_BY_I[7] = [255,0,0,128,8] #ダメージ床処理時にSEを鳴らしますか? SE_USEF = true #ダメージ床処理時のSEの名前を指定します。 #SEの名前 音量 ピッチの順にカンマで区切って設定してください。 #地形タグ別のダメージ床のSEを設定します。 F_S_BY_I = {} F_S_BY_I[0] = ["Damage1",100,100] F_S_BY_I[1] = ["Damage1",100,100] F_S_BY_I[2] = ["Damage2",100,100] F_S_BY_I[3] = ["Damage3",100,100] F_S_BY_I[4] = ["Damage4",100,100] F_S_BY_I[5] = ["Damage5",100,100] F_S_BY_I[6] = ["Damage1",100,100] F_S_BY_I[7] = ["Damage2",100,100] end class Game_BattlerBase #-------------------------------------------------------------------------- # HP自然回復用 #-------------------------------------------------------------------------- def hgrplus #各特徴別に処理。 #条件を満たす場合のみ、計算結果を値に反映。 feature_objects.inject(0) {|r, f| r += eval(f.hgr_eval[1]) ? eval(f.hgr_eval[0]).to_i : 0} end #-------------------------------------------------------------------------- # MP自然回復用 #-------------------------------------------------------------------------- def mgrplus #各特徴別に処理。 #条件を満たす場合のみ、計算結果を値に反映。 feature_objects.inject(0) {|r, f| r += eval(f.mgr_eval[1]) ? eval(f.mgr_eval[0]).to_i : 0} end #-------------------------------------------------------------------------- # TP自然回復用 #-------------------------------------------------------------------------- def tgrplus #各特徴別に処理。 #条件を満たす場合のみ、計算結果を値に反映。 feature_objects.inject(0) {|r, f| r += eval(f.tgr_eval[1]) ? eval(f.tgr_eval[0]).to_i : 0} end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # HP の再生 #-------------------------------------------------------------------------- def regenerate_hp #本来の処理に追加処理分を加える。 damage = -(mhp * hrg).to_i - hgrplus perform_map_damage_effect if $game_party.in_battle && damage > 0 @result.hp_damage = [damage, max_slip_damage].min self.hp -= @result.hp_damage end #-------------------------------------------------------------------------- # MP の再生 #-------------------------------------------------------------------------- def regenerate_mp #本来の処理に追加処理分を加える。 @result.mp_damage = -(mmp * mrg).to_i - mgrplus self.mp -= @result.mp_damage end #-------------------------------------------------------------------------- # TP の再生 #-------------------------------------------------------------------------- def regenerate_tp #本来の処理に追加処理分を加える。 self.tp += 100 * trg + tgrplus end #-------------------------------------------------------------------------- # マップ上でダメージを受けたときの効果 #-------------------------------------------------------------------------- def perform_map_damage_effect_slip end #-------------------------------------------------------------------------- # マップ上でダメージを受けたときの効果 #-------------------------------------------------------------------------- def perform_map_damage_effect_floor end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 何歩歩いたときに戦闘中の 1 ターン相当とみなすか #-------------------------------------------------------------------------- def steps_for_turn #設定データを参照。 GRPLUS::SLIPSTEP end #-------------------------------------------------------------------------- # マップ画面上でのターン終了処理 #-------------------------------------------------------------------------- def turn_end_on_map #歩行時の処理を行わない場合は何もしない。 return unless GRPLUS::SLIPWALK #回復/ダメージ処理を行う。 return unless $game_party.steps % steps_for_turn == 0 #ターン終了処理を行う。 on_turn_end #ダメージを受けていない場合は終了。 return unless @result.hp_damage > 0 #SEを演奏する場合 if GRPLUS::SE_USE #SE用配列を取得。 data = GRPLUS::SE_DATA1 #SEを演奏。 RPG::SE.new(data[0],data[1],data[2]).play end #有効な場合はマップへのエフェクトを実行。 perform_map_damage_effect_slip if GRPLUS::SLIPFLASH end #-------------------------------------------------------------------------- # マップ上でのスリップダメージ効果の実行 #-------------------------------------------------------------------------- def perform_map_damage_effect_slip #スリップダメージのフラッシュを実行。 $game_map.screen.start_flash_for_slip_damage end #-------------------------------------------------------------------------- # マップ上でのダメージ床効果の実行 #-------------------------------------------------------------------------- def perform_map_damage_effect_floor #床ダメージのフラッシュを実行。 $game_map.screen.start_flash_for_floor_damage end #-------------------------------------------------------------------------- # 床ダメージの基本値を取得 #-------------------------------------------------------------------------- def basic_floor_damage #地形タグからデータを取得。 GRPLUS::F_D_BY_I[$game_player.terrain_tag] end #-------------------------------------------------------------------------- # 床ダメージの処理 #-------------------------------------------------------------------------- def execute_floor_damage #途中まで本来の処理を行う。 damage = (basic_floor_damage * fdr).to_i self.hp -= [damage, max_floor_damage].min return unless damage > 0 #SEを演奏する場合 if GRPLUS::SE_USEF #SE用配列を取得。 data = GRPLUS::F_S_BY_I[$game_player.terrain_tag] #SEを演奏。 RPG::SE.new(data[0],data[1],data[2]).play end #有効な場合はマップへのエフェクトを実行。 perform_map_damage_effect_floor if GRPLUS::SLIPFLASHF end end class Game_Screen #-------------------------------------------------------------------------- # フラッシュの開始(スリップダメージ専用) #-------------------------------------------------------------------------- def start_flash_for_slip_damage #フラッシュを実行。 start_flash(Color.new(GRPLUS::FLASH[0],GRPLUS::FLASH[1],GRPLUS::FLASH[2],GRPLUS::FLASH[3]),GRPLUS::FLASH[4]) end #-------------------------------------------------------------------------- # フラッシュの開始(ダメージ床用) #-------------------------------------------------------------------------- def start_flash_for_floor_damage #フラッシュデータを用意 data = GRPLUS::F_F_BY_I[$game_player.terrain_tag] #フラッシュを実行。 start_flash(Color.new(data[0],data[1],data[2],data[3]),data[4]) end end class RPG::BaseItem #-------------------------------------------------------------------------- # HP自然回復用 #-------------------------------------------------------------------------- def hgr_eval #キャッシュが存在する場合はキャッシュを返す。 return @hgr_eval if @hgr_eval != nil #メモ欄からデータを取得。 data = self.note.scan(/<#{GRPLUS::H_WORD}[::](\S+)>/).flatten if data != nil && !data.empty? data = data[0].split(/\s*,\s*/) data.push("true") if data.size == 1 end #適切な場合はその配列、そうでない場合は無効にする為の配列とする。 @hgr_eval = data != nil && data.size == 2 ? data : ["0", "false"] #データを返す。 @hgr_eval end #-------------------------------------------------------------------------- # MP自然回復用 #-------------------------------------------------------------------------- def mgr_eval #キャッシュが存在する場合はキャッシュを返す。 return @mgr_eval if @mgr_eval != nil #メモ欄からデータを取得。 data = self.note.scan(/<#{GRPLUS::M_WORD}[::](\S+)>/).flatten if data != nil && !data.empty? data = data[0].split(/\s*,\s*/) data.push("true") if data.size == 1 end #適切な場合はその配列、そうでない場合は無効にする為の配列とする。 @mgr_eval = data != nil && data.size == 2 ? data : ["0", "false"] #データを返す。 @mgr_eval end #-------------------------------------------------------------------------- # TP自然回復用 #-------------------------------------------------------------------------- def tgr_eval #キャッシュが存在する場合はキャッシュを返す。 return @tgr_eval if @tgr_eval != nil #メモ欄からデータを取得。 data = self.note.scan(/<#{GRPLUS::T_WORD}[::](\S+)>/).flatten if data != nil && !data.empty? data = data[0].split(/\s*,\s*/) data.push("true") if data.size == 1 end #適切な場合はその配列、そうでない場合は無効にする為の配列とする。 @tgr_eval = data != nil && data.size == 2 ? data : ["0", "false"] #データを返す。 @tgr_eval end end