Advanced Day 'n Night
Versão 1.0
que traz uma boa dose de realismo para o jogo. No script é possivel
configurar mapas de interiores (onde não há mudança de tonalidade),
permitindo o maker criar interiores com uma tonalidade própria, e quando
o player esta dentro e algum lugar, a tonalidade de fora continua sendo
atualizada. Ou seja, se vc entrar de noite em uma casa, e sair de
manhã, o sol ja vai estar brilando !
Plataforma: RPG Maker VX Ace
Compatiblidade: Média
Lag Gerado: Nenhum
Características
- Alta dose de Realismo
- Inúmeras Tonalidades definidas pelo Maker
- Configuração Ampla
Como Usar
Cole o script em scripts adicionais (acima do main) e configure o
script... Mais instruções podem ser encontradas no próprio script. E Atenção: Esqueci de colocar no Script, mas não faça tonalidades com duração menor que 1 hora.
Script
- Código:
#==============================================================================
# RMTM - Advanced Day 'n Night
#==============================================================================
module RMTM
#------------------------------------------------------------------------------
# Créditos: Leon-S.K --- ou --- AndreMaker --- ou --- 4ndreMTM
#==============================================================================
# Um script de dia e noite que permite criar quantas tonalidades o maker
# desejar, dando um aspecto realista ao jogo.
#
#------------------------------------------------------------------------------
# INSTRUÇÕES DE COMANDOS "CHAMAR SCRIPT"
#------------------------------------------------------------------------------
#
# Em um evento qualquer, você pode usar a função chamar script para:
#
# - $game_system.foward_time(x)
# Avança o tempo em x Horas
#
# - $game_system.backward_time(x)
# Volta o tempo em x Horas
#
# - $game_system.set_time(x, y)
# Define o tempo como sendo X horas e Y minutos
#
# ** Lembrando que os numeros devem ser inteiros
#
# - $game_system.formatted_time
# Retorna uma string com o tempo formatado
# Esse é mais usado para programadores
#
#------------------------------------------------------------------------------
module DaN
#------------------------------------------------------------------------------
# CONFIGURAÇÕES GERAIS
#------------------------------------------------------------------------------
# Coloque aqui os IDs dos mapas que são interiores, separador por vírgulas
# nestes mapas, o Script não ira modificar a tonalidade da tela.
Interior_Maps = [6, 8]
# Sprite que mostra o tempo (sim/não -> true/false)
Clock_Sprite = true
# Coordenada X do Sprite
CP_X = 484
# Coordenada Y do Sprite
CP_Y = 0
# Largura do Sprite
CP_WIDTH = 200
# Altura do Sprite
CP_HEIGHT = 50
# Tamanho da fonte do Sprite
CP_FONT_SIZE = 22
Tones = [ # Não Remova
#------------------------------------------------------------------------------
# Coloque aqui as tonalidades que o script irá utilizar.
# Para adicionar uma nova tonalidade, copie
# [inicio, fim, Tone.new(red, green, blue, gray)],
# com a vírgula! e cole em uma nova linha abaixo \/
# e então modifique os valores:
# inicio = Horário que a Tonalidade começa
# fim = Horário que a Tonalidade Termina
# red, green, blue, gray = vermelho, verde, azul e cinza
[4, 6, Tone.new(-26,-48,0,-32)],
[6, 10, Tone.new(-16,-16,0,0)],
[10, 14, Tone.new(0,0,0,0)],
[14, 18, Tone.new(-26,-35,-35,0)],
[18, 4, Tone.new(-68,-68,0,68)]
# O Ultimo valor não precisa de virgula /\
#------------------------------------------------------------------------------
] # Não Remova
# Quanto vale um minuto de jogo em frames.
# Lembrando que o padrão do maker é 60 FPS, então
# 60 -> "1 minuto no jogo para cada 1 minuto real" ~~ Tempo Real¹
# 30 -> "2 minuto no jogo para cada 1 minuto real" ~~ 2x mais rápido¹
# 15 -> "4 minuto no jogo para cada 1 minuto real" ~~ 4x mais rápido¹
Time_Rate = 30
# Não use valores menores que 15 ~
# Valor Recomendado = 30
# ¹ = Isso se o RGSS player ficar sempre na casa de 60 FPS
#------------------------------------------------------------------------------
# Fim das Configurações
#------------------------------------------------------------------------------
#==============================================================================
class RTone
attr_accessor :start
attr_accessor :finish
attr_accessor :tone
def initialize(start, finish, tone)
@start, @finish, @tone = start, finish, tone
end
end
class Timer < Sprite
include RMTM::DaN
attr_reader :time
def initialize()
super()
self.z = 999 + 1
self.bitmap = Bitmap.new(CP_WIDTH, CP_HEIGHT)
self.x, self.y = CP_X, CP_Y
@time = $game_system.ingame_time
self.bitmap.font.size = CP_FONT_SIZE
update
end
def update
super
self.bitmap.clear
@time = $game_system.ingame_time
self.bitmap.draw_text(0,0,CP_WIDTH,CP_HEIGHT,$game_system.formatted_time)
end
end
end
end
class Game_System
attr_accessor :ingame_time
def formatted_time
s = @ingame_time.to_s.sub('.',':')
s4 = s[4].nil? ? "0" : s[4]
if @ingame_time.to_i < 10
string = "0#{s[0]}#{s[1]}#{s[2]}#{s[3]}"
else
string = "#{s[0]}#{s[1]}#{s[2]}#{s[3]}#{s4}"
end
return string
end
def foward_time(hour)
time = @ingame_time
hour = hour.to_f
if time.to_i + hour > 23
rest = 23 - time
@ingame_time = (0 + rest).to_f
else
@ingame_time += hour
end
end
def backward_time(hour)
time = @ingame_time
hour = hour.to_f
if time.to_i - hour < 0
rest = time - 23
@ingame_time = (23 - rest).to_f
else
@ingame_time -= hour
end
end
def set_time(hour,min)
@ingame_time = hour + (min / 100.0)
end
end
class << DataManager
alias :rmtm_setup_time :setup_new_game
def setup_new_game
rmtm_setup_time
$game_system.ingame_time = Time.now.hour + (Time.now.min / 100.0)
end
end
class Spriteset_Map; attr_accessor :viewport1; end
class Scene_Map < Scene_Base
attr_accessor :io_debug
include RMTM::DaN
alias :rmtm_dan_update :update
def update
@mtimer = 0 if @mtimer.nil?; @io_debug = false if @io_debug.nil?
if @timer.class != RMTM::DaN::Timer
@timer = RMTM::DaN::Timer.new
else
@timer.viewport = @spriteset.viewport1 if @timer.viewport != @spriteset.viewport1
@timer.update if @timer.time != $game_system.ingame_time
end
update_ingame_time
if not Interior_Maps.include?($game_map.map_id)
update_screen_tone if $game_map.screen.tone_duration == 0
else
update_screen_tone2 if $game_map.screen2.tone_duration == 0
end
rmtm_dan_update
end
def update_ingame_time
time = $game_system.ingame_time
if @mtimer == Time_Rate
add_minute; @mtimer = 0
else
@mtimer += 1
end
end
def update_screen_tone
time = $game_system.ingame_time.to_i
Tones.each do |array|
i = array[0]; e = array[1]; tone = array[2]
e += 24 if i > e
if time >= i and time <= e and $game_map.screen.tone != tone
$game_map.screen.start_tone_change(tone, Time_Rate * 70); return
end
end
end
def update_screen_tone2
time = $game_system.ingame_time.to_i
Tones.each do |array|
i = array[0]; e = array[1]; tone = array[2]
e += 24 if i > e
if time >= i and time <= e and $game_map.screen2.tone != tone
$game_map.screen2.start_tone_change(tone, Time_Rate * 70); return
end
end
end
def add_minute
time = $game_system.ingame_time
if time + 0.01 > (time.to_i + 0.60)
if time.to_i + 1.0 > 23.0
$game_system.ingame_time = 0.0
else
$game_system.ingame_time = (time.to_i + 1.0).to_f
end
else
$game_system.ingame_time += 0.01
end
end
end
class Game_Screen
attr_accessor :tone_duration
attr_accessor :tone_target
def tone=(tone)
return unless tone.is_a?(Tone)
clear_tone
@tone = tone
end
end
class Game_Map
attr_accessor :screen2
alias :tone_set :setup
def setup(map_id)
@screen2 = Game_Screen.new if @screen2.nil?
if outside_to_inside map_id
@screen.clear_tone
@screen.start_tone_change(Tone.new(0,0,0,0), 1)
elsif inside_to_outside map_id
@screen.clear_tone;
@screen.tone = @screen2.tone
@screen.tone_duration = @screen2.tone_duration
@screen.tone_target = @screen2.tone_target
end
tone_set(map_id)
end
alias :rmtm_upd :update
def update(main = false)
rmtm_upd(main)
if inside? @map_id
@screen2.update
elsif outside? @map_id
@screen2.tone = @screen.tone
end
end
def outside_to_inside map_id
!im_include?(@map_id) and im_include?(map_id)
end
def inside_to_outside map_id
im_include?(@map_id) and !im_include?(map_id)
end
def inside? id; im_include? id; end
def outside? id; !im_include? id; end
def im_include?(id)
RMTM::DaN::Interior_Maps.include?(id)
end
end
Créditos
- AndreMaker por criar e disponibilizar