Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 RMTM - Advanced Day' n Night em Sab Abr 06, 2013 2:05 pm

avatarT-Lord
Admin


Advanced Day 'n Night
Versão 1.0
Um script de dia e noite feito pela RMTM
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

Ver perfil do usuário http://www.zonetoony.net

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum