Lampião Customizável
Breve Descrição:
O script cria uma zona de luz em volta do personagem enquanto o restante do mapa permanece escuro, sem o uso de imagens adicionais. Para ativar/desativar o efeito usa-se uma switch. A luz do lampião é totalmente customizável, além da escuridão em volta. Contudo, quanto mais realista e quanto maior o raio do efeito de luz maior será o tempo de transição entre os mapas.
Demo:
Creio que desnecessária.
Screen de Exemplo:
Versão 1.0:
- Código:
#===============================================================
# Lampião Customizável
# Autor: Madajuv
# Agradecimentos:
# Ao autor de Nakiri Dungeon, pelo código para desenhar círculos.
#===============================================================
# O script faz com que uma pequena área em volta do personagem
# fique iluminada, enquanto o restante fica escuro.
# Não precisa de imagens.
#===============================================================
# Edite Aqui:
#---------------------------------------------------------------
module Mada
# O raio da circunferência de luz que o lampião cria
# Quanto maior, mais demora a transição entre mapas
LAMP_Raio_max = 150
# A opacidade da escuridão fora da luz
#(0 = Muito claro/255 = Muito escuro)
LAMP_Escuridao = 250
# Quantidade de camadas de transição entre a luz do lampião e a escuridão
# Quanto mais, mais demora a transição entre mapas
LAMP_Camadas = 5
# "Distância" de opacidade entre a luz do lampião e
# a escuridão, quanto mais próximo do zero melhor o efeito.
LAMP_Dist = 0
# Switch que ativa o efeito.
LAMP_Switch = 1
end
#---------------------------------------------------------------
# Fim da edição
#===============================================================
class Bitmap
# Método para desenhar círculos,
# crédito ao autor de Nakiri Dungeon
def draw_circle(x, y, r, color)
for ax in 0..r
for ay in 0..r
set_pixel(x + ax, y + ay, color) if Math.hypot((r/2) - ax, (r/2) - ay) < r/2
end
end
end
end
class Spriteset_Map
alias mada_lamp initialize
def initialize
if Mada::LAMP_Raio_max > 400
p 'O raio escolhido para o lampião é muito grande.'
$scene = nil
mada_lamp
return
end
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@lampiao = Plane.new(@viewport2)
@lampiao.bitmap = Bitmap.new(960, 720)
@lampiao.bitmap.fill_rect(Rect.new(0, 0, 960, 720), Color.new(0,0,0,Mada::LAMP_Escuridao))
aux = Mada::LAMP_Camadas + 1
aux1 = Mada::LAMP_Raio_max.to_f/aux.to_f
aux2 = aux1/2.0
aux3 = Mada::LAMP_Escuridao-Mada::LAMP_Dist
for i in 0..aux
@lampiao.bitmap.draw_circle(480.0+i.to_f*aux2, 360+i.to_f*aux2,
Mada::LAMP_Raio_max.to_f-i.to_f*aux1, Color.new(0,0,0,aux3-i*aux1))
end
aux4 = (Mada::LAMP_Raio_max-100).to_f/2.0
@lamp_x = 530 + aux4
@lamp_y = 430 + aux4
@lampiao.ox = @lamp_x - $game_player.screen_x
@lampiao.oy = @lamp_y - $game_player.screen_y
mada_lamp
end
alias mada_lamp_d dispose
def dispose
unless Mada::LAMP_Raio_max > 400
@lampiao.bitmap.dispose
@lampiao.dispose
end
mada_lamp_d
end
alias mada_t update
def update
@lampiao.visible = $game_switches[Mada::LAMP_Switch]
if $game_player.moving?
@lampiao.ox = @lamp_x - $game_player.screen_x
@lampiao.oy = @lamp_y - $game_player.screen_y
end
mada_t
end
end
Versão 2.0:
- Código:
#===============================================================
# Lampião Customizável 2.0
# Autor: Madajuv
# Agradecimentos:
# Ao autor de Nakiri Dungeon, pelo código para desenhar círculos.
#===============================================================
# Versão 1.0:
#---------------------------------------------------------------
# O script faz com que uma pequena área em volta do personagem
# fique iluminada, enquanto o restante fica escuro.
# Não precisa de imagens.
#---------------------------------------------------------------
# Versão 2.0
#---------------------------------------------------------------
# A imagem do lampião é criada antes do título e somente uma vez,
# há uma opção de colocar uma tela de loading.
#===============================================================
# Edite Aqui:
#---------------------------------------------------------------
module Mada
# O raio da circunferência de luz que o lampião cria
# Quanto maior, mais demora o loading
LAMP_Raio_max = 300
# A opacidade da escuridão fora da luz
#(0 = Muito claro/255 = Muito escuro)
LAMP_Escuridao = 250
# Quantidade de camadas de transição entre a luz do lampião e a escuridão
# Quanto mais, mais demora o loading
LAMP_Camadas = 50
# "Distância" de opacidade entre a luz do lampião e
# a escuridão, quanto mais próximo do zero melhor o efeito.
LAMP_Dist = 0
# Switch que ativa o efeito.
LAMP_Switch = 1
# Mostrar tela de load?
LAMP_Load = true # true = sim / false = não
# Mensagem da barra de load.
LAMP_Mensa = 'Colocando óleo no lampião... Aguarde.'
end
#---------------------------------------------------------------
# Fim da edição
#===============================================================
class Bitmap
# Método para desenhar círculos,
# crédito ao autor de Nakiri Dungeon
def draw_circle(x, y, r, color)
for ax in 0..r
for ay in 0..r
set_pixel(x + ax, y + ay, color) if Math.hypot((r/2) - ax, (r/2) - ay) < r/2
end
end
end
end
def desenhar_lamp
@load_bar_fundo = Sprite.new
@load_bar_fundo.bitmap = Bitmap.new(480, 64)
@load_bar_fundo.bitmap.fill_rect(Rect.new(0, 0, 480, 64), Color.new(150,150,150))
@load_bar_fundo.bitmap.fill_rect(Rect.new(1, 1, 478, 62), Color.new(100,100,100))
@load_bar = Sprite.new
@load_bar.bitmap = Bitmap.new(478, 62)
@load_bar_fundo.x = 80; @load_bar.x = 81
@load_bar_fundo.y = 208; @load_bar.y = 209
$lamp_d = Bitmap.new(960, 720)
$lamp_d.fill_rect(Rect.new(0, 0, 960, 720), Color.new(0,0,0,Mada::LAMP_Escuridao))
aux = Mada::LAMP_Camadas + 1
aux1 = Mada::LAMP_Raio_max.to_f/aux.to_f
aux2 = aux1/2.0
aux3 = Mada::LAMP_Escuridao-Mada::LAMP_Dist
if Mada::LAMP_Load
for i in 0..aux
@load_bar.bitmap.clear
@load_bar.bitmap.fill_rect(Rect.new(0, 0, 478*i/aux, 62), Color.new(255-(i*255/aux),(i*255/aux),0))
@load_bar.bitmap.draw_text(@load_bar.bitmap.rect, Mada::LAMP_Mensa, 1)
$lamp_d.draw_circle(480.0+i.to_f*aux2, 360+i.to_f*aux2,
Mada::LAMP_Raio_max.to_f-i.to_f*aux1, Color.new(0,0,0,aux3-i*aux1))
Graphics.update
end
else
for i in 0..aux
$lamp_d.draw_circle(480.0+i.to_f*aux2, 360+i.to_f*aux2,
Mada::LAMP_Raio_max.to_f-i.to_f*aux1, Color.new(0,0,0,aux3-i*aux1))
end
end
@load_bar.bitmap.dispose
@load_bar.dispose
@load_bar_fundo.bitmap.dispose
@load_bar.dispose
end
desenhar_lamp
class Spriteset_Map
alias mada_lamp initialize
def initialize
if Mada::LAMP_Raio_max > 400
p 'O raio escolhido para o lampião é muito grande.'
$scene = nil
mada_lamp
return
end
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@lampiao = Plane.new(@viewport2)
@lampiao.bitmap = $lamp_d
@lamp_x = 530 + (Mada::LAMP_Raio_max-100).to_f/2.0
@lamp_y = 430 + (Mada::LAMP_Raio_max-100).to_f/2.0
@lampiao.ox = @lamp_x - $game_player.screen_x
@lampiao.oy = @lamp_y - $game_player.screen_y
mada_lamp
end
alias mada_lamp_d dispose
def dispose
unless Mada::LAMP_Raio_max > 400
@lampiao.dispose
end
mada_lamp_d
end
alias mada_t update
def update
@lampiao.visible = $game_switches[Mada::LAMP_Switch]
if $game_player.moving?
@lampiao.ox = @lamp_x - $game_player.screen_x
@lampiao.oy = @lamp_y - $game_player.screen_y
end
mada_t
end
end
Créditos:
Madajuv - Por Criar
WweBR - Por disponibilizar