Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Day/Night Script Help

I'm using this script for my game.

Code:
#=======================================#
# class Game_Title                                                                 #
#     Written by Deke
#     Rewiten by Near Fantastica
#=======================================#
class Game_Time

attr_accessor :minute_length

def initialize
 @minute_length= 1#0.325     #length of game minute in real seconds
 @hour_length= 60.0      #minute in an hour
 @day_length= 24.0        #hours in a day
 @month_length=30.0    #days in a month
 @year_length=12.0       #months in a year
 @minutes=0                 #starting minute count
 start_minute=0
 add_minutes(start_minute)
 start_hour=12           #starting hour count
 add_hours(start_hour)
 start_day=1                #starting day count
 add_days(start_day)
 start_month=8             #starting month count
 add_months(start_month-1)
 start_year= 2735         #starting year count
 add_years(start_year)
end

def add_minutes(minutes)
 @minutes +=minutes
end

def add_hours(hours)
 @minutes +=hours*@hour_length
end

def add_days(days)
 @minutes += days*@hour_length*@day_length
end

def add_months(months)
 @minutes +=months * @hour_length*@day_length*@month_length
end

def add_years(years)
 @minutes += years * @hour_length*@day_length*@month_length * @year_length
end
 

def get_year
  minutes=get_total_minutes
  year=minutes / @hour_length / @day_length / @month_length  / @year_length
  return year
end
 
def get_month
  minutes=get_total_minutes
  month=minutes / @hour_length / @day_length /  @month_length % @year_length + 1
  return month
end
 
def get_day
  minutes=get_total_minutes
  day=minutes / @hour_length / @day_length % @month_length
  return day
end  
 
def get_hour
  minutes=get_total_minutes
  hour=minutes / @hour_length % @day_length
  return hour
end
 
def get_total_minutes
  total_sec=Graphics.frame_count / Graphics.frame_rate
  minute=(total_sec/@minute_length+@minutes)
  return minute
end

def get_minute
 minutes=get_total_minutes % @hour_length
 return minutes
end

def get_tone
 period_length=Math::PI*(get_hour / @day_length)
 red_shift=  -100+ 115*Math.sin(period_length)
 green_shift=  -140+ 155*Math.sin(period_length)
 blue_shift=  -150+ 165*Math.sin(period_length)
 return Tone.new(red_shift, green_shift, blue_shift, 0)
end

end # of class Game_Time  

#=======================================#
# â–  class Window_Time
# written by Deke
#=======================================#
class Window_Time < Window_Base

#--------------------------------------------------------------------------
def initialize
  super(0, 0, 160, 96)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.name = $defaultfonttype
  self.contents.font.size = $defaultfontsize
  refresh
end

#--------------------------------------------------------------------------
def refresh
  self.contents.clear
  @total_sec = Graphics.frame_count / Graphics.frame_rate
  @minute=$game_time.get_minute.floor
  hour = $game_time.get_hour
  pm_flag= hour >=12 ? true : false
  hour= hour >= 12 ? hour-12 : hour
  day=$game_time.get_day
  month=$game_time.get_month
  year=$game_time.get_year
  if hour.floor==0
    text=sprintf("%02d:%02d",12,@minute)
  else
    text=sprintf("%02d:%02d",hour,@minute)
  end
  if pm_flag
    text += " PM"
  else
    text += " AM"
  end
  self.contents.font.color = normal_color
  self.contents.draw_text(4, 0, 120, 32, text, 2)
  text = sprintf("%02d-%02d-%02d", month, day, year)
  self.contents.font.color=system_color
  self.contents.draw_text(4,32,120,32,text)
end

#--------------------------------------------------------------------------
def update
  if $game_time.get_minute.floor != @minute
    refresh
  end
end
end # of class

#=======================================
class Game_Temp
 #--------------------------------------------------------------------------
 # ● Refer setup to Game Temp
 #--------------------------------------------------------------------------
 alias dns_game_temp_initalize initialize
 #--------------------------------------------------------------------------
 # ● Refer the Attr
 #--------------------------------------------------------------------------
 attr_reader    :map_infos  #Added Lines
 attr_reader    :outside_array  #Added Lines
 #--------------------------------------------------------------------------
 # ● Refer setup to Scene Map
 #--------------------------------------------------------------------------
 def initialize
   dns_game_temp_initalize
   @outside_array = Array.new
   @map_infos = load_data("Data/MapInfos.rxdata")
   for key in @map_infos.keys
       @outside_array[key] = @map_infos[key].name.include?(" -")
   end
end
end

#=======================================
class Scene_Map
 #--------------------------------------------------------------------------
 # ● Refer setup to Scene Map
 #--------------------------------------------------------------------------
 alias dns_scene_map_main main
 alias dns_scene_map_update update
 #--------------------------------------------------------------------------
 # ● Main
 #--------------------------------------------------------------------------
 def main
    if $game_temp.outside_array[$game_map.map_id]
      tone=$game_time.get_tone
     @minute=$game_time.get_minute.floor
     $game_screen.start_tone_change(tone, 0)
   end
   @spriteset = Spriteset_Map.new
   @message_window = Window_Message.new
   Graphics.transition
   loop do
     $light_effects.refresh
     Graphics.update
     Input.update
     update
     if $scene != self
       break
     end
   end
   Graphics.freeze
   @spriteset.dispose
   @message_window.dispose
   if $scene.is_a?(Scene_Title)
     Graphics.transition
     Graphics.freeze
   end
   $light_effects.hide
 end
 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------
 def update
   $light_effects.update
    conditional1 =$game_temp.outside_array[$game_map.map_id] and $game_time.get_minute.floor != @minute
    conditional2 =$game_temp.outside_array[$game_map.map_id] and @current_id != $game_map.map_id
    if  conditional1 or conditional2    
          tone=$game_time.get_tone
          $game_screen.start_tone_change(tone, 0)
          @minute = $game_time.get_minute.floor
          $game_map.need_refresh=true
          @current_id=$game_map.map_id
    end
    if $game_temp.outside_array[$game_map.map_id] == false and @current_id != $game_map.map_id
       $game_screen.start_tone_change(Tone.new(0,0,0,0),0)
       @current_id=$game_map.map_id
     end
    dns_scene_map_update
end
end

#======================================================
class Scene_Title
 #--------------------------------------------------------------------------
 # ● Refer setup to Scene Map
 #--------------------------------------------------------------------------
 alias dns_scene_title_update update
 #--------------------------------------------------------------------------
 # ● Refer setup to Scene Map
 #--------------------------------------------------------------------------
def update
  $game_time=Game_Time.new
   #Dubealex Addition (from XRXS) to show Map Name on screen
  dns_scene_title_update
end
end
#========================================================
class Scene_Load
def read_save_data(file)
  characters = Marshal.load(file)
  Graphics.frame_count = Marshal.load(file)
  $game_system        = Marshal.load(file)
  $game_switches      = Marshal.load(file)
  $game_variables     = Marshal.load(file)
  $game_self_switches = Marshal.load(file)
  $game_screen        = Marshal.load(file)
  $game_actors        = Marshal.load(file)
  $game_party         = Marshal.load(file)
  $game_troop         = Marshal.load(file)
  $game_map           = Marshal.load(file)
  $game_player        = Marshal.load(file)
#  $game_time          = Marshal.load(file) #Added Line
  if $game_system.magic_number != $data_system.magic_number
    $game_map.setup($game_map.map_id)
    $game_player.center($game_player.x, $game_player.y)
  end
  $game_party.refresh
end
end # of Scene_Load updates

#=======================================================
class Scene_Save
def write_save_data(file)
  characters = []
  for i in 0...$game_party.actors.size
    actor = $game_party.actors[i]
    characters.push([actor.character_name, actor.character_hue])
  end
  Marshal.dump(characters, file)
  Marshal.dump(Graphics.frame_count, file)
  $game_system.save_count += 1
  $game_system.magic_number = $data_system.magic_number
  Marshal.dump($game_system, file)
  Marshal.dump($game_switches, file)
  Marshal.dump($game_variables, file)
  Marshal.dump($game_self_switches, file)
  Marshal.dump($game_screen, file)
  Marshal.dump($game_actors, file)
  Marshal.dump($game_party, file)
  Marshal.dump($game_troop, file)
  Marshal.dump($game_map, file)
  Marshal.dump($game_player, file)
  Marshal.dump($game_time,file) # Added Line
end
end # of Scene_Save updates

#========================================================

class Game_Map
 #--------------------------------------------------------------------------
 # ● Refer the attr
 #--------------------------------------------------------------------------
 attr_reader   :outside
 attr_reader   :map_id
 #--------------------------------------------------------------------------
 # ● Outside
 #--------------------------------------------------------------------------
 def outside
    return $game_temp.outside_array[@map_id]
 end
end

#==============================================================================
# â–  Light Effect System
#------------------------------------------------------------------------------
#  By: Near Fantastica
#   Date: 13/2/05
#
#   Addes light Effects to the DNS so objects glow and have ground effect lighting...
#==============================================================================

class Light_Effect_System
 #--------------------------------------------------------------------------
 # ● Refer the attr
 #--------------------------------------------------------------------------
 attr_accessor    :picture_le
 attr_accessor    :event_list
 attr_accessor    :type_list
 #--------------------------------------------------------------------------
 # ● Initialization
 #--------------------------------------------------------------------------
 def initialize
   @event_counter = 0
   @picture_le = Array.new
   @event_list = Array.new
   @type_list = Array.new
 end
 #--------------------------------------------------------------------------
 # ● Setup Light Effects on Map Change
 #--------------------------------------------------------------------------
 def setup
   # Setup Event Max
   @event_counter = 0
   for i in 1..999
     if $game_map.map.events[i].id > @event_counter
       @event_counter = $game_map.map.events[i].id
     end
   end
   #
   for i in 1..@event_counter
     if  $game_map.map.events[i] == nil
       next
     end
     case $game_map.map.events[i].name
     when "Ground"
       ground(i)
     when "Fire"
       fire(i)
     when "Lamp Post"
       lamp(i)
     when "Left Lantern"
       left_lantern(i)
     when "Right Lantern"
       right_lantern(i)
     end
   end
 end
 #--------------------------------------------------------------------------
 # ● Updates the Array based on time of day
 #--------------------------------------------------------------------------
 def update
   if $game_time.get_hour > 7 and $game_time.get_hour < 14
     hide
   else
     show
   end
 end
 #--------------------------------------------------------------------------
 # ● Updates the XY of the sprites
 #--------------------------------------------------------------------------
 def refresh
   for i in 0..$light_effects.picture_le.size - 1
     case $light_effects.type_list[i]
     when "Ground"
       $light_effects.picture_le[i].x = ($game_map.events[$light_effects.event_list[i]].real_x - 200 - $game_map.display_x) / 4
       $light_effects.picture_le[i].y = ($game_map.events[$light_effects.event_list[i]].real_y - 200 - $game_map.display_y) / 4
       $light_effects.picture_le[i].visible = true
     when "Fire"
       $light_effects.picture_le[i].x = ($game_map.events[$light_effects.event_list[i]].real_x - 300 - $game_map.display_x) / 4
       $light_effects.picture_le[i].y = ($game_map.events[$light_effects.event_list[i]].real_y - 300 - $game_map.display_y) / 4
       $light_effects.picture_le[i].visible = true
     when "Left Lamp Post"
       $light_effects.picture_le[i].x = (-0.25 * $game_map.display_x) + ($game_map.events[$light_effects.event_list[i]].x * 32) - 5
       $light_effects.picture_le[i].y = (-0.25 * $game_map.display_y) + ($game_map.events[$light_effects.event_list[i]].y * 32) - 15
     when "Right Lamp Post"
       $light_effects.picture_le[i].x = (-0.25 * $game_map.display_x) + ($game_map.events[$light_effects.event_list[i]].x * 32) - 25
       $light_effects.picture_le[i].y = (-0.25 * $game_map.display_y) + ($game_map.events[$light_effects.event_list[i]].y * 32) - 15
       $light_effects.picture_le[i].visible = true
     when "Left Lantern"
       $light_effects.picture_le[i].x = (-0.25 * $game_map.display_x) + ($game_map.events[$light_effects.event_list[i]].x * 32) - 20
         $light_effects.picture_le[i].y = (-0.25 * $game_map.display_y) + ($game_map.events[$light_effects.event_list[i]].y * 32) - 5
         $light_effects.picture_le[i].visible = true
     when "Right Lantern"
       $light_effects.picture_le[i].x = (-0.25 * $game_map.display_x) + ($game_map.events[$light_effects.event_list[i]].x * 32) - 10
       $light_effects.picture_le[i].y = (-0.25 * $game_map.display_y) + ($game_map.events[$light_effects.event_list[i]].y * 32) - 5
       $light_effects.picture_le[i].visible = true
     end
   end
 end
 #--------------------------------------------------------------------------
 # ● Redraws the Array
 #--------------------------------------------------------------------------
 def redraw
   if @picture_le != []
     for i in 0..@picture_le.size - 1
       @picture_le[i].bitmap.dispose
     end
     @picture_le = Array.new
     @event_list = Array.new
     @type_list = Array.new
   end
 end
 #--------------------------------------------------------------------------
 # ● Shows Array
 #--------------------------------------------------------------------------
 def show
   if @picture_le != []
     for i in 0..@picture_le.size - 1
       @picture_le[i].visible = true
     end
   end
 end
 #--------------------------------------------------------------------------
 # ● Hides Array
 #--------------------------------------------------------------------------
 def hide
   if @picture_le != []
     for i in 0..@picture_le.size - 1
        @picture_le[i].visible = false
     end
   end
 end
 #--------------------------------------------------------------------------
 # ● Setup Light Effects for Ground
 #--------------------------------------------------------------------------
 def ground(event_index)
   light_effects = Sprite.new
   light_effects.bitmap = RPG::Cache.picture("LE.PNG")
   light_effects.zoom_x = 200 / 100.0
   light_effects.zoom_y = 200 / 100.0
   light_effects.z = 1000
   light_effects.opacity = 50
   light_effects.visible = false
   @picture_le.push(light_effects)
   @event_list.push(event_index)
   @type_list.push("Ground")
 end
 #--------------------------------------------------------------------------
 # ● Setup Light Effects for Fire
 #--------------------------------------------------------------------------
 def fire(event_index)
   light_effects = Sprite.new
   light_effects.bitmap = RPG::Cache.picture("LE.PNG")
   light_effects.zoom_x = 300 / 100.0
   light_effects.zoom_y = 300 / 100.0
   light_effects.z = 1000
   light_effects.opacity = 100
   light_effects.visible = false
   @picture_le.push(light_effects)
   @event_list.push(event_index)
   @type_list.push("Fire")
 end
 #--------------------------------------------------------------------------
 # ● Setup Light Effects for Lamp
 #--------------------------------------------------------------------------
 def lamp(event_index)
   light_effects = Sprite.new
   light_effects.bitmap = RPG::Cache.picture("LE.PNG")
   light_effects.z = 1000
   light_effects.opacity = 100
   light_effects.visible = false
   @picture_le.push(light_effects)
   @event_list.push(event_index)
   @type_list.push("Left Lamp Post")
   light_effects = Sprite.new
   light_effects.bitmap = RPG::Cache.picture("LE.PNG")
   light_effects.z = 1000
   light_effects.opacity = 100
   light_effects.visible = false
   @picture_le.push(light_effects)
   @event_list.push(event_index)
   @type_list.push("Right Lamp Post")
 end
 #--------------------------------------------------------------------------
 # ● Setup Light Effects for Lantern
 #--------------------------------------------------------------------------
 def left_lantern(event_index)
   light_effects = Sprite.new
   light_effects.bitmap = RPG::Cache.picture("LE.PNG")
   light_effects.z = 1000
   light_effects.opacity = 150
   light_effects.visible = false
   @picture_le.push(light_effects)
   @event_list.push(event_index)
   @type_list.push("Left Lantern")
 end
   #--------------------------------------------------------------------------
 # ● Setup Light Effects for Lantern
 #--------------------------------------------------------------------------
 def right_lantern(event_index)
   light_effects = Sprite.new
   light_effects.bitmap = RPG::Cache.picture("LE.PNG")
   light_effects.z = 1000
   light_effects.opacity = 150
   light_effects.visible = false
   @picture_le.push(light_effects)
   @event_list.push(event_index)
   @type_list.push("Right Lantern")
 end
end

#==============================================================================
# â–  Game_Map
#------------------------------------------------------------------------------
#  Add defenision of the names to Game Map Class
#==============================================================================

class Game_Map
 #--------------------------------------------------------------------------
 # ● Refer the attr
 #--------------------------------------------------------------------------
 attr_accessor :map
 #--------------------------------------------------------------------------
 # ● Refer setup to Game Map
 #--------------------------------------------------------------------------
 alias les_game_map_setup setup
 #--------------------------------------------------------------------------
 # ● Refers the Map Setup
 #--------------------------------------------------------------------------
 def setup(map_id)
   $light_effects.redraw
   les_game_map_setup(map_id)
   $light_effects.setup
 end
end

#==============================================================================
# â–  Scene_Title
#------------------------------------------------------------------------------
#  It is the class which processes the title picture
#==============================================================================

class Scene_Title
#--------------------------------------------------------------------------
# ● Refer setup to Scene Title
#--------------------------------------------------------------------------
alias les_scene_title_update update
#--------------------------------------------------------------------------
# ● Sets up the ABS
#--------------------------------------------------------------------------
def update
  $light_effects = Light_Effect_System.new
  les_scene_title_update
end
end

I just have 2 questions:

1. How can I set specific, advance, or subtract dates and times in the game using the call script command from this this script? I have no idea what line I'm supposed to use.

2. How can I adjust the color tones during the day/night shifts so that it has more of a dark blue tone at night?

I'd really appreciate any help. Manually tinkering with scripts isn't my thing. ':|
 
I'm not sure about this, but replace the old get_tone method with this:
Code:
def get_tone
 period_length=Math::PI*(get_hour / @day_length)
 red_shift=  -100+ 115*Math.sin(period_length)
 green_shift=  -140+ 155*Math.sin(period_length)
 blue_shift=  -105+ 170*Math.sin(period_length)
 return Tone.new(red_shift, green_shift, blue_shift, 0)
end

def set_time(minutes = nil, hours = nil, days = nil, months = nil, years = nil)
  @minutes = 0
  add_minutes(minutes) if minutes
  add_hours(hours) if hours
  add_days(days) if days
  add_months(months) if months
  add_years(years) if years
end
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top