#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
# Blizz-ABS Action Recharge Time by Winkio
# Version: 1.11
#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
#
#
#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
# This script modifies the Blizz-ABS system to allow for recharge times. These
# times are graphically represented on the hotkey bar
#
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
module BlizzABS
#-----------------------------------------------------------------------------
# configure recharge times like everything else.
# put in the number of frames (40 = 1 second)
#-----------------------------------------------------------------------------
module Weapons
def self.recharge(id)
case id
when 1 then return 0
end
return 0
end
end
module Skills
def self.recharge(id)
case id
when 1 then return 800
end
return 800
end
end
module Items
def self.recharge(id)
case id
when 1 then return 40
end
return 40
end
end
module Enemies
def self.recharge(id)
case id
when 1 then return 0
end
return 0
end
end
end
class Map_Battler
attr_reader :recharge
attr_reader :rechcounter
attr_reader :rechcheck
#----------------------------------------------------------------------------
# Initialize
#----------------------------------------------------------------------------
alias initialize_recharge_later initialize
def initialize
@rechcounter = [0, 0] #attack, defend
(0...999).each {|i| @rechcounter.push(0)} #500 skills and 500 items
@recharge = @rechcounter.clone
@recheck = []
initialize_recharge_later
end
#----------------------------------------------------------------------------
# Recharging
#----------------------------------------------------------------------------
def recharging?(index)
return (@rechcounter[index] > 0)
end
#----------------------------------------------------------------------------
# Recharge Rate
#----------------------------------------------------------------------------
def rech_rate(index)
return 0.0 if @recharge[index] == 0
return (@rechcounter[index].to_f/@recharge[index].to_f)
end
#----------------------------------------------------------------------------
# attack_can_use?
#----------------------------------------------------------------------------
alias attack_can_use_recharge_later? attack_can_use?
def attack_can_use?
return (!recharging?(0) && attack_can_use_recharge_later?)
end
#----------------------------------------------------------------------------
# skill_can_use?
#----------------------------------------------------------------------------
alias skill_can_use_recharge_later? skill_can_use?
def skill_can_use?(id, forced = false)
return (!recharging?(1+id) && skill_can_use_recharge_later?(id, forced))
end
#----------------------------------------------------------------------------
# item_can_use?
#----------------------------------------------------------------------------
alias item_can_use_recharge_later? item_can_use?
def item_can_use?(id, forced = false)
return (!recharging?(501+id) && item_can_use_recharge_later?(id, forced))
end
end
class Map_Actor
#----------------------------------------------------------------------------
# Update
#----------------------------------------------------------------------------
alias upd_recharger_later update
def update
@recheck.each {|i|
if recharging?(i)
@rechcounter[i] -= 1
else
@recheck.delete(i)
end}
upd_recharger_later
end
#----------------------------------------------------------------------------
# Attack Penalty
#----------------------------------------------------------------------------
alias attack_penalty_recharger_later attack_penalty
def attack_penalty
re = BlizzABS::Weapons.recharge(@battler.weapon_id)
@recharge[0], @rechcounter[0] = re, re
@recheck.push(0)
return attack_penalty_recharger_later
end
#----------------------------------------------------------------------------
# Skill Penalty
#----------------------------------------------------------------------------
alias skill_penalty_recharger_later skill_penalty
def skill_penalty(id)
re = BlizzABS::Skills.recharge(id)
@recharge[1+id], @rechcounter[1+id] = re, re
@recheck.push(1+id)
return skill_penalty_recharger_later(id)
end
#----------------------------------------------------------------------------
# Item Penalty
#----------------------------------------------------------------------------
alias item_penalty_recharger_later item_penalty
def item_penalty(id)
re = BlizzABS::Items.recharge(id)
@recharge[501+id], @rechcounter[501+id] = re, re
@recheck.push(501+id)
return item_penalty_recharger_later(id)
end
end
class Map_Enemy
#----------------------------------------------------------------------------
# Update
#----------------------------------------------------------------------------
alias upd_recharger_later update
def update
@recheck.each {|i|
if recharging?(i)
@rechcounter[i] -= 1
else
@recheck.delete(i)
end}
upd_recharger_later
end
#----------------------------------------------------------------------------
# Attack Penalty
#----------------------------------------------------------------------------
alias attack_penalty_recharger_later attack_penalty
def attack_penalty
re = BlizzABS::Enemies.recharge(@battler.weapon_id)
@recharge[0], @rechcounter[0] = re, re
@recheck.push(0)
return attack_penalty_recharger_later
end
#----------------------------------------------------------------------------
# Skill Penalty
#----------------------------------------------------------------------------
alias skill_penalty_recharger_later skill_penalty
def skill_penalty(id)
re = BlizzABS::Skills.recharge(id)
@recharge[1+id], @rechcounter[1+id] = re, re
@recheck.push(1+id)
return skill_penalty_recharger_later(id)
end
#----------------------------------------------------------------------------
# Item Penalty
#----------------------------------------------------------------------------
alias item_penalty_recharger_later item_penalty
def item_penalty(id)
re = BlizzABS::Items.recharge(id)
@recharge[501+id], @rechcounter[501+id] = re, re
@recheck.push(501+id)
return item_penalty_recharger_later(id)
end
end
class Hotkey_Assignment < Sprite
attr_accessor :recharge
alias initialize_recharge_later initialize
def initialize(viewport = nil)
initialize_recharge_later(viewport)
@recharge = Hotkey_Assignment_Recharge.new(self.x, self.y, self.z)
end
#----------------------------------------------------------------------------
# update
# Updates the hotkey display.
#----------------------------------------------------------------------------
alias update_recharge_later update
def update
update_recharge_later
if @recharge != nil
@recharge.update
end
end
#----------------------------------------------------------------------------
# dispose
# Removes recharge time graphics from screen and memory.
#----------------------------------------------------------------------------
alias dispose_recharge_later dispose
def dispose
@recharge.dispose
dispose_recharge_later
end
end
class Hotkey_Assignment_Recharge < Sprite
attr_reader :skillrecharge
attr_reader :itemrecharge
attr_reader :chargebitmaps
#----------------------------------------------------------------------------
# Initialization
# viewport - the viewport for the sprite
#----------------------------------------------------------------------------
def initialize(x0, y0, z0, viewport = nil)
# call superclass
super(viewport)
# create bitmap
self.bitmap = Bitmap.new(320, 32)
# set font name
self.bitmap.font.name = 'Arial'
# set font size
self.bitmap.font.size = 16
# set font to bold
self.bitmap.font.bold = true
# set x and y position
self.x, self.y, self.z = x0, y0, z0+100
# update display
@actor = $game_player.battler
@skillrecharge = []
@itemrecharge = []
(1...10).each {|i|
@skillrecharge.push(i)
@itemrecharge.push(i)}
update
end
#----------------------------------------------------------------------------
# draw
# Draws the recharge sectors over the hotkey display.
#----------------------------------------------------------------------------
def draw(index = nil)
# iterate through all skills that need to be recharged
(@skillrecharge).each {|i|
# temporary var
object = $data_skills[$game_player.skill_hotkeys[i%10]]
ind = $game_player.skill_hotkeys[i%10]+1
if $game_player.recharging?(ind)
# remove old image
self.bitmap.fill_rect(32*(i-1), 0, 32, 32, Color.new(0, 0, 0, 0))
# draw recharge indicator
len = (24*$game_player.rech_rate(ind)).to_i
self.bitmap.fill_rect(32*(i-1)+4, 0, len, 4, Color.new(255, 255, 0))
self.bitmap.draw_text_full(32*(i-1)+4, 4, 24, 24, (($game_player.rechcounter[ind]/40).to_i+1).to_s, 1)
else
if object != nil
# remove old image
self.bitmap.fill_rect(32*(i-1), 0, 32, 32, Color.new(0, 0, 0, 0))
end
@skillrecharge.delete(i)
end}
# iterate through all items that need to be recharged
(@itemrecharge).each {|i|
# temporary var
object = $data_items[$game_player.item_hotkeys[i%10]]
ind = $game_player.item_hotkeys[i%10]+501
if $game_player.recharging?(ind)
# remove old image
self.bitmap.fill_rect(32*(i-1), 0, 32, 32, Color.new(0, 0, 0, 0))
# draw recharge indicator
len = (24*$game_player.rech_rate(ind)).to_i
self.bitmap.fill_rect(32*(i-1)+4, 0, len, 4, Color.new(255, 255, 0))
self.bitmap.draw_text_full(32*(i-1)+4, 4, 24, 24, (($game_player.rechcounter[ind]/40).to_i+1).to_s, 1)
else
if object != nil
# remove old image
self.bitmap.fill_rect(32*(i-1), 0, 32, 32, Color.new(0, 0, 0, 0))
end
@itemrecharge.delete(i)
end}
end
#----------------------------------------------------------------------------
# update
# Updates the hotkey display.
#----------------------------------------------------------------------------
def update
if @actor != $game_player.battler
# set new actor
@actor = $game_player.battler
@skillrecharge = []
@itemrecharge = []
self.bitmap.fill_rect(0, 0, 320, 32, Color.new(0, 0, 0, 0))
(1...10).each {|i|
@skillrecharge.push(i)
@itemrecharge.push(i)}
draw
end
draw if test_recharge
end
#----------------------------------------------------------------------------
# test_recharge
# Updates the hotkey display.
#----------------------------------------------------------------------------
def test_recharge
BlizzABS::Cache::HotkeyRange.each {|i|
if $game_player.skill_hotkeys[i%10] != 0 and !@skillrecharge.include?(i)
ind = $game_player.skill_hotkeys[i%10]+1
if $game_player.recharging?(ind)
@skillrecharge.push(i)
return true
end
elsif $game_player.item_hotkeys[i%10] != 0 and !@itemrecharge.include?(i)
ind = $game_player.item_hotkeys[i%10]+501
if $game_player.recharging?(ind)
@itemrecharge.push(i)
return true
end
end}
return false if @skillrecharge.size < 1 and @itemrecharge.size < 1
return true
end
#----------------------------------------------------------------------------
# bitmap_square_sect
# w - width
# rate - fill rate
# color - color
# Draws the HUD gradient bar.
# This was going to be used a recharge graphic, but it lagged. I included
# the code in case someone ever wanted to use it or fixes the lag.
#----------------------------------------------------------------------------
def bitmap_square_sect(w, rate)
b = Bitmap.new(w, w)
return b if rate <= 0.0 or rate > 1.0
color = Color.new(0, 0, 0, 127)
(0...23).each {|x|
(0...23).each {|y|
angle = (Math.atan2(x-w/2, y-w/2) + 6*Math::PI/2)%(2*Math::PI)
b.set_pixel(x, y, color) if angle <= 2*Math::PI*rate}}
return b
end
end