module BlizzABS
#===============================================================================
# ** Controller
#===============================================================================
class Controller
CX = ((SCREEN[0] / 2) - 16) * 4
CY = ((SCREEN[1] / 2) - 16) * 4
def center(x, y, flag = false)
pix = flag ? $BlizzABS.pixel : 1
x, y = x * 128 / pix, y * 128 / pix
m_x = ($game_map.width - $game_map.tile_size[0]) * 128
m_y = ($game_map.height - $game_map.tile_size[1]) * 128
ox, oy = x - CX, y - CY
if ox > m_x
$game_map.display_x = m_x
elsif ox < 0
$game_map.display_x = 0
else
$game_map.display_x = ox
end
if oy > m_y
$game_map.display_y = m_y
elsif oy < 0
$game_map.display_y = 0
else
$game_map.display_y = oy
end
end
end
#===============================================================================
# ** Utility
#===============================================================================
class Utility
def get_fullscreen_area
return Rect.new($game_map.display_x / 4, $game_map.display_y / 4,
SCREEN[0], SCREEN[1])
end
def get_player_radius
if $game_player.screen_x > (SCREEN[0] / 2)
x_max = $game_player.screen_x
else
x_max = SCREEN[0] - $game_player.screen_x
end
if $game_player.screen_y > (SCREEN[1] / 2)
y_max = $game_player.screen_y
else
y_max = SCREEN[1] - $game_player.screen_y
end
return Math.hypot(x_max, y_max) / 32
end
end
end
#===============================================================================
# ** Sprite
#===============================================================================
class Sprite
def in_screen?
return (self.x.between?(0, SCREEN[0]-1) && (self.y-16).between?(0, SCREEN[1]-1))
end
end
#===============================================================================
# ** Game_Character
#===============================================================================
class Game_Character
def in_abseal_range?
factor = BlizzABS::Config::ABSEAL_FACTOR < 1 ? 1 :
BlizzABS::Config::ABSEAL_FACTOR.to_i
return false if @real_x < $game_map.display_x - factor * 128
return false if @real_y < $game_map.display_y - factor * 128
return false if @real_x >= $game_map.display_x + (SCREEN[0]*4) + factor * 128
return false if @real_y >= $game_map.display_y + (SCREEN[1]*4)+ factor * 128
return true
end
end
#===============================================================================
# ** Map_Battler < Game_Character
#===============================================================================
class Map_Battler < Game_Character
def in_screen?
return (((@real_x - $game_map.display_x - 64) / 4).between?(0, SCREEN[0]) &&
((@real_y - $game_map.display_y - 64) / 4).between?(0, SCREEN[1]))
end
end
#===============================================================================
# ** Map_Remote < Map_Battler
#===============================================================================
class Map_Remote < Map_Battler
def out_of_screen?(add = 0)
return (self.real_x - $game_map.display_x + add < 0 ||
self.real_x - $game_map.display_x + add > (SCREEN[0]*4) ||
self.real_y - $game_map.display_y + add < 0 ||
self.real_y - $game_map.display_y + add > (SCREEN[1]*4))
end
end
#===============================================================================
# ** HUD < Sprite
#===============================================================================
class HUD < Sprite
alias zer0_resolution_hud_position_init initialize
def initialize(viewport = nil)
zer0_resolution_hud_position_init(viewport)
case BlizzABS::Config::HUD_POSITION
when 0 then self.x, self.y = 4, 4
when 1 then self.x, self.y = SCREEN[0] - self.bitmap.width - 4, 4
when 2 then self.x, self.y = 4, (SCREEN[1] - 116)
end
end
end
#===============================================================================
# ** Minimap < Sprite
#===============================================================================
class Minimap < Sprite
def initialize
width, height = SCREEN[0] / 4, SCREEN[1] / 4
super(Viewport.new(SCREEN[0]-width-4, SCREEN[1]-height-4, width, height))
@autotile = $BlizzABS.cache.image('minimap_autotile')
create_passable_floor
self.x = self.y = 0
viewport.z = 5000
@events, @names = check_events
create_sevents
self.visible = true
update
end
def update(override = false)
create_passable_floor if @map_id != $game_map.map_id
ev = check_events
if @events != ev[0] || @names != ev[1]
@events, @names = ev
destroy_sevents
create_sevents
end
if $game_system.minimap < 2
self.ox, self.oy = $game_map.display_x / 16, $game_map.display_y / 16
elsif !($game_system.turn_button && Input.press?(Input::Turn)) || override
if self.bitmap.width > SCREEN[0]
border = $game_player.real_x/16 - (SCREEN[0] / 2)
border_x = self.bitmap.width - SCREEN[0]
if border < 0
self.ox = 0
elsif border > border_x
self.ox = border_x
else
self.ox = border
end
else
self.ox = self.bitmap.width/2 - (SCREEN[0] / 2)
end
if self.bitmap.height > SCREEN[1]
border = $game_player.real_y/16 - (SCREEN[1] / 2)
border_y = self.bitmap.height - SCREEN[1]
if border < 0
self.oy = 0
elsif border > border_y
self.oy = border_y
else
self.oy = border
end
else
self.oy = self.bitmap.height/2 - (SCREEN[1] / 2)
end
end
@sevents.each_index {|i|
if $game_system.minimap == 2 || @events[i].update?
@sevents[i].x = self.x + @events[i].real_x / 16
@sevents[i].y = self.y + @events[i].real_y / 16
@sevents[i].ox, @sevents[i].oy = self.ox, self.oy
if @names[i] != '' && !@events[i].dropped? &&
(@events[i].is_a?(Map_Actor) ||
!@events[i].name.clone.gsub!('\box') {''})
@sevents[i].src_rect.set((@events[i].direction - 2) * 7, 0, 14, 14)
@sevents[i].ox += 3
@sevents[i].oy += 3
end
end}
end
end
#===============================================================================
# ** Scene_Map
#===============================================================================
class Scene_Map
def update_minimap
return if @minimap == nil
if $game_system.minimap < 2
@minimap.update
return
end
unless @minimap.viewport.rect.width == SCREEN[0] &&
@minimap.map_id == $game_map.map_id
@minimap.viewport.rect.set(0, 0, SCREEN[0], SCREEN[1])
@minimap.update(true)
else
@minimap.update
end
if $game_system.turn_button && Input.press?(Input::Turn) &&
!$game_system.map_interpreter.running? && !@move_route_forcing &&
!$game_temp.message_window_showing
if @minimap.bitmap.width > SCREEN[0]
if Input.repeat?(Input::RIGHT)
if @minimap.ox + SCREEN[0] < @minimap.bitmap.width
$game_system.se_play($data_system.cursor_se)
@minimap.ox += 32
else
$game_system.se_play($data_system.buzzer_se)
end
elsif Input.repeat?(Input::LEFT)
if @minimap.ox > 0
$game_system.se_play($data_system.cursor_se)
@minimap.ox -= 32
else
$game_system.se_play($data_system.buzzer_se)
end
end
end
if @minimap.bitmap.height > SCREEN[1]
if Input.repeat?(Input::DOWN)
if @minimap.oy + SCREEN[1] < @minimap.bitmap.height
$game_system.se_play($data_system.cursor_se)
@minimap.oy += 32
else
$game_system.se_play($data_system.buzzer_se)
end
elsif Input.repeat?(Input::UP)
if @minimap.oy > 0
$game_system.se_play($data_system.cursor_se)
@minimap.oy -= 32
else
$game_system.se_play($data_system.buzzer_se)
end
end
end
end
end
def initialize_selection
object, r, type, sprites = $game_temp.select_data
enemy, dead, all = $BlizzABS.util.get_scope_data(object.scope)
if $tons_version != nil && object.is_a?(RPG::Skill) &&
($tons_version >= 6.02 && $game_system.TARGET_EM_ALL &&
FULL_TARGET_IDS.include?(object.id))
target_all = all = true
end
sprites.each {|sprite| sprite.z += 1000000}
@index = 0
Graphics.freeze
tone = $game_screen.tone
@spriteset.viewport1.tone = Tone.new(tone.red - 32, tone.green - 32,
tone.blue - 32, tone.gray)
$game_system.se_play($data_system.decision_se)
@win = Window_Help.new
@win.z, @win.opacity = 10000, 192
@ranges = [Sprite.new(@spriteset.viewport1),
Sprite.new(@spriteset.viewport1)]
@ranges[0].z = @ranges[1].z = 950000
color = (target_all ? Color.new(255, 255, 255, 96) : enemy ?
Color.new(255, 0, 0, 96) : Color.new(0, 128, 255, 96))
if type == BlizzABS::BEAM && all
@ranges[0].bitmap = Bitmap.new(SCREEN[0], SCREEN[1])
@ranges[1].bitmap = Bitmap.new(SCREEN[0]-2, SCREEN[1]-2)
@ranges[0].bitmap.fill_rect(0, 0, SCREEN[0], SCREEN[1],
Color.new(255, 255, 0, 160))
@ranges[0].bitmap.fill_rect(1, 1, SCREEN[0]-2, SCREEN[1]-2,
Color.new(0, 0, 0, 0))
@ranges[1].x = @ranges[1].y = 1
@ranges[1].bitmap.fill_rect(0, 0, SCREEN[0]-2, SCREEN[1]-2, color)
else
@ranges[0].bitmap = Bitmap.new(r * 2 + 32, r * 2 + 32)
@ranges[1].bitmap = Bitmap.new(r * 2 + 32, r * 2 + 32)
@ranges[0].x, @ranges[0].y = $game_player.screen_x, $game_player.screen_y
@ranges[1].x, @ranges[1].y = $game_player.screen_x, $game_player.screen_y
@ranges[0].ox, @ranges[0].oy = r + 16, r + 32
@ranges[1].ox, @ranges[1].oy = r + 16, r + 32
@ranges[0].bitmap.draw_circle(0, 0, r.to_i + 16, Color.new(255, 255, 0, 160))
@ranges[0].bitmap.draw_circle(1, 1, r.to_i + 15, Color.new(0, 0, 0, 0))
@ranges[1].bitmap.draw_circle(1, 1, r.to_i + 15, color)
end
if all
sprites.each {|sprite| sprite.select = 1}
@win.set_text(BlizzABS::Cache::WORDAll, 1)
else
sprites[0].select = 1
@win.set_text(sprites[0].character.battler.name, 1)
end
@ranges[1].color.set(255, 255, 0, (16 - Graphics.frame_count % 32).abs * 8 )
Graphics.transition
end
end