Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- =begin
- ★ Ao no Kiseki Custom Battle System - AT Bonus Plugin - ★
- Adds AT bonuses to the Ao no Kiseki Custom Battle System.
- Please place the Bonus graphics in the Graphics/System folder.
- ● Bonuses ●======================================================
- There are nine possible bonuses, randomly selected. They are:
- --------------------------------------------------------------------
- Recover 10% HP at start of turn.
- --------------------------------------------------------------------
- Recover 50% HP at start of turn.
- --------------------------------------------------------------------
- Recover 10% MP at start of turn.
- --------------------------------------------------------------------
- Recover 50% MP at start of turn.
- --------------------------------------------------------------------
- Recover 10% TP at start of turn.
- --------------------------------------------------------------------
- Recover 50% TP at start of turn.
- --------------------------------------------------------------------
- Critical (All damage/healing effectiveness is multipled by 1.5)
- --------------------------------------------------------------------
- Perfect Guard (Cannot be damaged, Cannot be healed, No Cancel, State Immunity, No Slow)
- --------------------------------------------------------------------
- Rush (Act twice in a row)
- ====================================================================
- ● Note ●========================================================
- This script was developed for the Ao no Kiseki Custom Battle System.
- Please contact PetitCure or Saba Kan for any queries regarding the system.
- ====================================================================
- ※ The Ao no Kiseki Custom Battle System is still a work in progress.
- Therefore, this script may change or become obselete in the future.
- ver0.11
- Last Update : 2012/01/24
- 01/24 : Added Critical Bonus text.
- 01/07 : Released to the public.
- Made for Saba Kan of http://petitrare.com/blog/
- Written by Rokan of http://kaisou-ryouiki.sakura.ne.jp/
- Translated by kirinelf
- =end
- #===================================
- # ● Configuration Block
- #===================================
- module Rokan
- module Kiseki_Plugin
- # The variable that determines the rate of activation of the bonuses.
- BCV = 10
- #-----------------------------------------------------------------------------
- # The following section determines the activate rate of the bonuses.
- # If 0, that bonus will not activate. All rates are relative to each other.
- # Actual rate = (Rate)/(Total Rate)*100
- #
- # (For example. At BOP=0, there's a roughly 77% chance of there being no bonuses,
- # about 4% chances of there being 10% heals of HP, MP and TP, and about 1.5%
- # chances of Critical, Perfect Guard and Rush) (Total rate = 130, sum of all rates)
- #-----------------------------------------------------------------------------
- # Variable Value =>
- # [No Bonus, 10% HP, 50% HP, 10% MP, 50% MP,
- # 10 TP, 50 TP, Critical, Perfect Guard, Rush],
- #-----------------------------------------------------------------------------
- BOP = { # No touchie.
- -1 => [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- 0 => [100, 5, 3, 5, 3, 5, 3, 2, 2, 2],
- 1 => [ 90, 3, 0, 3, 0, 3, 0, 2, 0, 0],
- } # Do not remove this.
- # Text that shows up when you get a critical bonus.
- CriticalBonusText = "Critical Bonus!"
- end
- end
- #=========================================================================
- # Do not edit anything under this line unless you know what you're doing!
- #=========================================================================
- $rsi ||= {}
- $rsi["空の軌跡_ATボーナス"] = true
- class RPG::UsableItem
- #--------------------------------------------------------------------------
- # ● 駆動時間の取得
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_operate_time operate_time
- def operate_time(battler)
- if BonusManager.rash?
- 0
- else
- _kiseki_bonus_operate_time(battler)
- end
- end
- #--------------------------------------------------------------------------
- # ● 硬直時間の取得
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_stiff_time stiff_time
- def stiff_time(battler)
- if BonusManager.rash?
- 0
- else
- _kiseki_bonus_stiff_time(battler)
- end
- end
- end
- class << BattleManager
- #--------------------------------------------------------------------------
- # ● セットアップ
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_setup setup
- def setup(troop_id, can_escape = true, can_lose = false)
- _kiseki_bonus_setup(troop_id, can_escape, can_lose)
- setup_bonus
- end
- #--------------------------------------------------------------------------
- # ● ボーナスのセットアップ
- #--------------------------------------------------------------------------
- def setup_bonus
- BonusManager.clear
- BonusManager.init_bonus
- end
- end
- class << OrderManager
- #--------------------------------------------------------------------------
- # ● 先頭ユニットを削除し、次のユニットに入れ替えます。
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_update_top update_top
- def update_top
- BonusManager.next_bonus
- _kiseki_bonus_update_top
- end
- #--------------------------------------------------------------------------
- # ● 指定のバトラーの順番を遅らせる。
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_delay_order delay_order
- def delay_order(battler, value)
- _kiseki_bonus_delay_order(battler, value) unless BonusManager.full_guard?
- end
- end
- module BonusManager
- module_function
- include Rokan::Kiseki_Plugin
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def init_manager
- @rate_list = []
- @bonus_list = []
- clear
- end
- #--------------------------------------------------------------------------
- # ● クリア
- #--------------------------------------------------------------------------
- def clear
- @rate_list.clear
- @bonus_list.clear
- @sprites_listener = nil
- end
- #--------------------------------------------------------------------------
- # ● クリティカル判定
- #--------------------------------------------------------------------------
- def critical?
- get_bonus == 6 && $game_party.in_battle
- end
- #--------------------------------------------------------------------------
- # ● 完全防御判定
- #--------------------------------------------------------------------------
- def full_guard?
- get_bonus == 7 && $game_party.in_battle
- end
- #--------------------------------------------------------------------------
- # ● ラッシュ判定
- #--------------------------------------------------------------------------
- def rash?
- get_bonus == 8
- end
- #--------------------------------------------------------------------------
- # ● アクティブなボーナスの取得
- #--------------------------------------------------------------------------
- def get_bonus
- @bonus_list[1]
- end
- #--------------------------------------------------------------------------
- # ● インデックスを指定したボーナスの取得
- #--------------------------------------------------------------------------
- def get_bonus_with_index(index)
- @bonus_list[index]
- end
- #--------------------------------------------------------------------------
- # ● 新たに追加するボーナスの取得
- #--------------------------------------------------------------------------
- def get_pop_bonus
- case rand(@rate_list[9].last)
- when @rate_list[0]; -1
- when @rate_list[1]; 0
- when @rate_list[2]; 1
- when @rate_list[3]; 2
- when @rate_list[4]; 3
- when @rate_list[5]; 4
- when @rate_list[6]; 5
- when @rate_list[7]; 6
- when @rate_list[8]; 7
- when @rate_list[9]; 8
- else; -1
- end
- end
- #--------------------------------------------------------------------------
- # ● ボーナスの初期化
- #--------------------------------------------------------------------------
- def init_bonus
- init_bonus_rate
- @bonus_list.clear
- 10.times{@bonus_list << get_pop_bonus}
- end
- #--------------------------------------------------------------------------
- # ● ボーナス発生確率の初期化
- #--------------------------------------------------------------------------
- def init_bonus_rate
- @rate_list.clear
- first = last = 0
- BOP[$game_variables[BCV]].each_with_index{|value, index|
- last += value unless value.zero?
- @rate_list << Range.new(first, last)
- first = last
- }
- end
- #--------------------------------------------------------------------------
- # ● ボーナスを進める
- #--------------------------------------------------------------------------
- def next_bonus
- @bonus_list.shift
- @bonus_list << get_pop_bonus
- @sprites_listener.next_bonus if @sprites_listener
- end
- #--------------------------------------------------------------------------
- # ● ボーナススプライトを可視化する
- #--------------------------------------------------------------------------
- def sprites_listener=(obj)
- @sprites_listener = obj
- end
- end
- BonusManager.init_manager
- class Game_ActionResult
- #--------------------------------------------------------------------------
- # ● ダメージ値のクリティカル補正
- #--------------------------------------------------------------------------
- def critical_damage_values
- @hp_damage = (@hp_damage * 1.5).to_i
- @mp_damage = (@mp_damage * 1.5).to_i
- @hp_drain = (@hp_drain * 1.5).to_i
- @mp_drain = (@mp_drain * 1.5).to_i
- end
- end
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● ダメージの処理
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_execute_damage execute_damage
- def execute_damage(user)
- if BonusManager.critical?
- @result.critical_damage_values
- elsif BonusManager.full_guard?
- @result.clear_damage_values
- @result.cancel = false
- end
- _kiseki_bonus_execute_damage(user)
- end
- #--------------------------------------------------------------------------
- # ● 使用効果[HP 回復] ※再定義
- #--------------------------------------------------------------------------
- def item_effect_recover_hp(user, item, effect)
- value = (mhp * effect.value1 + effect.value2) * rec
- value *= user.pha if item.is_a?(RPG::Item)
- value *= 1.5 if BonusManager.critical? # 追加
- value = value.to_i
- @result.hp_damage -= value
- @result.success = true
- self.hp += value
- end
- #--------------------------------------------------------------------------
- # ● 使用効果[MP 回復] ※再定義
- #--------------------------------------------------------------------------
- def item_effect_recover_mp(user, item, effect)
- value = (mmp * effect.value1 + effect.value2) * rec
- value *= user.pha if item.is_a?(RPG::Item)
- value *= 1.5 if BonusManager.critical? # 追加
- value = value.to_i
- @result.mp_damage -= value
- @result.success = true if value != 0
- self.mp += value
- end
- #--------------------------------------------------------------------------
- # ● 使用効果[TP 増加] ※再定義
- #--------------------------------------------------------------------------
- def item_effect_gain_tp(user, item, effect)
- value = effect.value1.to_i
- value *= 1.5 if BonusManager.critical? # 追加
- @result.tp_damage -= value
- @result.success = true if value != 0
- self.tp += value
- end
- #--------------------------------------------------------------------------
- # ● ステートの付加可能判定
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_state_addable? state_addable?
- def state_addable?(state_id)
- _kiseki_bonus_state_addable?(state_id) && !BonusManager.full_guard?
- end
- #--------------------------------------------------------------------------
- # ● 使用効果[ステート解除]
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_item_effect_remove_state item_effect_remove_state
- def item_effect_remove_state(user, item, effect)
- _kiseki_bonus_item_effect_remove_state(user, item, effect) unless BonusManager.full_guard?
- end
- #--------------------------------------------------------------------------
- # ● ボーナスによる回復適用
- #--------------------------------------------------------------------------
- def bonus_recover_effect
- @result.clear
- @result.used = (0..5).include?(BonusManager.get_bonus)
- case BonusManager.get_bonus
- when 0
- self.hp -= @result.hp_damage = -(mhp * 0.1).to_i
- when 1
- self.hp -= @result.hp_damage = -(mhp * 0.5).to_i
- when 2
- self.mp -= @result.mp_damage = -(mmp * 0.1).to_i
- when 3
- self.mp -= @result.mp_damage = -(mmp * 0.5).to_i
- when 4
- self.tp -= @result.tp_damage = -10
- when 5
- self.tp -= @result.tp_damage = -50
- end
- end
- end
- class Bonus < Sprite
- include Saba::Kiseki
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, index)
- super(viewport)
- @index = index
- set_bitmap unless @index.zero?
- if self.bitmap
- self.x = MARGIN_LEFT + 40
- self.y = set_new_y
- self.z = 4
- self.ox = self.bitmap.width / 2
- self.oy = self.bitmap.height
- end
- self.opacity = 0
- end
- #--------------------------------------------------------------------------
- # ● ボーナスIDの取得
- #--------------------------------------------------------------------------
- def get_bonus
- BonusManager.get_bonus_with_index(@index)
- end
- #--------------------------------------------------------------------------
- # ● ビットマップのセット
- #--------------------------------------------------------------------------
- def set_bitmap
- case get_bonus
- when 0
- self.bitmap = Cache.system("AT_BONUS_HP10")
- when 1
- self.bitmap = Cache.system("AT_BONUS_HP50")
- when 2
- self.bitmap = Cache.system("AT_BONUS_MP10")
- when 3
- self.bitmap = Cache.system("AT_BONUS_MP50")
- when 4
- self.bitmap = Cache.system("AT_BONUS_TP10")
- when 5
- self.bitmap = Cache.system("AT_BONUS_TP50")
- when 6
- self.bitmap = Cache.system("AT_BONUS_CRI")
- when 7
- self.bitmap = Cache.system("AT_BONUS_DUARD")
- when 8
- self.bitmap = Cache.system("AT_BONUS_RASH")
- end
- end
- #--------------------------------------------------------------------------
- # ● 移動先の y 座標を設定
- #--------------------------------------------------------------------------
- def set_new_y
- @new_y = 32
- @new_y += MARGIN_CURRENT_BOTTOM if @index > 1
- @new_y += MARGIN_TOP + UNIT_INTERVAL * (@index-1)
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- if self.bitmap
- super
- update_x
- update_y
- update_z
- update_zoom
- update_opacity
- end
- end
- #--------------------------------------------------------------------------
- # ● x 座標の更新
- #--------------------------------------------------------------------------
- def update_x
- end
- #--------------------------------------------------------------------------
- # ● y 座標の更新
- #--------------------------------------------------------------------------
- def update_y
- if self.y != @new_y
- self.y = [self.y - ((@new_y - self.y).abs < 3 ? 1 : 3), @new_y].max
- flash_top_bonus if @index == 1 && self.y == @new_y
- end
- end
- #--------------------------------------------------------------------------
- # ● z 座標の更新
- #--------------------------------------------------------------------------
- def update_z
- self.z = @index > 1 ? 4 : 7
- end
- #--------------------------------------------------------------------------
- # ● 拡大率の更新
- #--------------------------------------------------------------------------
- def update_zoom
- if (get_bonus == -1 || @index.zero?) && !self.zoom_x.zero?
- self.zoom_x = self.zoom_y -= 0.05
- end
- end
- #--------------------------------------------------------------------------
- # ● 透明度の更新
- #--------------------------------------------------------------------------
- def update_opacity
- self.opacity += 12 if self.opacity != 255
- end
- #--------------------------------------------------------------------------
- # ● ボーナスを進める
- #--------------------------------------------------------------------------
- def next_bonus
- @index -= 1
- set_new_y unless @index.zero?
- end
- #--------------------------------------------------------------------------
- # ● 先頭に到達したボーナスをフラッシュさせてみる
- #--------------------------------------------------------------------------
- def flash_top_bonus
- flash(Color.new(255, 255, 255, 196), 40)
- end
- end
- class Bonus_Spriteset
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport)
- @viewport = viewport
- create_bonus
- end
- #--------------------------------------------------------------------------
- # ● ボーナススプライトの生成
- #--------------------------------------------------------------------------
- def create_bonus
- @bonus_sprites = []
- 10.times{|i| @bonus_sprites << Bonus.new(@viewport, i)}
- end
- #--------------------------------------------------------------------------
- # ● ボーナスを1つ進める
- #--------------------------------------------------------------------------
- def next_bonus
- @bonus_sprites.shift.dispose
- @bonus_sprites.each{|bonus| bonus.next_bonus}
- @bonus_sprites << Bonus.new(@viewport, 8)
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- @bonus_sprites.each{|bonus| bonus.dispose}
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- @bonus_sprites.each{|bonus| bonus.update}
- end
- end
- class Spriteset_Battle
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_initialize initialize
- def initialize
- _kiseki_bonus_initialize
- @bonus_spriteset = Bonus_Spriteset.new(@viewport3)
- BonusManager.sprites_listener = @bonus_spriteset
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_update update
- def update
- _kiseki_bonus_update
- @bonus_spriteset.update if @bonus_spriteset
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_dispose dispose
- def dispose
- _kiseki_bonus_dispose
- @bonus_spriteset.dispose
- end
- end
- class Window_BattleLog < Window_Selectable
- include Rokan::Kiseki_Plugin
- #--------------------------------------------------------------------------
- # ● クリティカルヒットの表示
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_display_critical display_critical
- def display_critical(target, item)
- display_critical_bonus
- _kiseki_bonus_display_critical(target, item)
- end
- #--------------------------------------------------------------------------
- # ● クリティカルボーナスの表示
- #--------------------------------------------------------------------------
- def display_critical_bonus
- if BonusManager.critical?
- add_text(CriticalBonusText)
- wait
- end
- end
- #--------------------------------------------------------------------------
- # ● ボーナスによる回復結果の表示
- #--------------------------------------------------------------------------
- def display_bonus_recover(target)
- if target.result.used
- Sound.play_recovery
- last_line_number = line_number
- case BonusManager.get_bonus
- when 0..1
- add_text(target.result.hp_damage_text)
- when 2..3
- add_text(target.result.mp_damage_text)
- when 4..5
- add_text(target.result.tp_damage_text)
- end
- SceneManager.scene.refresh_status
- wait
- wait if line_number > last_line_number
- back_to(last_line_number)
- end
- end
- end
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● パーティコマンド選択の開始
- #--------------------------------------------------------------------------
- alias _kiseki_bonus_start_party_command_selection start_party_command_selection
- def start_party_command_selection
- battler = OrderManager.top_unit.battler
- battler.bonus_recover_effect
- @log_window.display_bonus_recover(battler)
- _kiseki_bonus_start_party_command_selection
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement