Group: Staff
Posts: 22
Joined: 30-January 08
From: Iz in yur RPG Makur, maykin sum geimz.
Member No.: 629
Script Name: Day/Night System Author: KGC (English Translation By: Koru-chan) Number Of Scripts: 1 Original Source: http://f44.aaa.livedoor.jp/~ytomy/tkool/rp...p;tech=daynight Description: Someone translated this on RRR but the comments were Babelfish'ed beyond understanding, so here is my translation of this script. This script will allow you to have a night/day system that can be activated per map. It automatically changes the tones of your map to make the transition and also allows for enemies that only appear during certain parts of the day.
Screenshots
Night screenshot.
(IMG:https://rpgcrisis.net/forums/uploads/1201857217/gallery_1_1_17896.jpg)
Instructions
1. Make a new blank script page above main but below all other scripts and name it Day/Night System.
2. Copy the script below into the new page.
3. Follow the instructions on the translated webpage to customize.
The script:
Spoiler
CODE
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ? Day/Night System - KGC_DayNight ? VX ?
#_/ ? Last update : 2008/02/01 ?
#_/----------------------------------------------------------------------------
#_/ Making Day and Night in your game.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
module KGC
module DayNight
# ? Day/Night System
# 0 - Time runs based on your elapsed game time.
# 1 - Time runs based on the number of steps you've taken.
# 2 - Time runs based off real time. (Sensitive/Experimental)
METHOD = 1
# ? This is the number of the variable for the phases.
# In this variable, the present phase will be housed.
# ? Translator's note: in other words, when making your
# game, I would either set it to a variable you're not
# using or avoid the default variable it uses.
PHASE_VARIABLE = 11
# ? This is the number of the variable that keeps the
# information for the days.
# Days are kept here as they elapse.
PASS_DAYS_VARIABLE = 12
# ? Stopping script behavior during an event.
STOP_ON_EVENT = true
# ? In a battle, the following will make only the
# background change tone.
# Setting this to "false" will tone everything.
TONE_BACK_ONLY_IN_BATTLE = true
# ? Setting the phases.
# Each phases uses the following setup.
# ["name", color tone (Tone), duration]
# It's possible to increase phases, but the other
# phases will not just automatically adjust.
# You'll have to set them yourself so they fit
# within the day's time frame.
#
# [name]
# The name of the phase.
# The name has no significance over performance.
# [color tone]
# Color of the screen or background.
# If you don't know much about this, you'd be
# better off not editing.
# ***Translator's note for beginners***
# The way the tones are listed below are by the
# amount of red, green, and blue, the fourth number
# being saturation. If you go into the event
# command for changing the screen tint, you can
# mess around with the tint until you find something
# you like. When you okay it, the event window will
# show you the actual numeric values for the tone you
# want. You can simply copy those numbers below into
# the phase you want them for.
#
# [Duration]
# The time before the next phase occurs.
# If you chose for phases to change according to
# number of steps, the duration number is the number
# of steps before the phase change.
# In the case of a real-time system, it's changed to
# a 24 hour system.
PHASE = [
["noon", Tone.new( 0, 0, 0), 300], # Phase 0
["evening", Tone.new( -32, -96, -96), 100], # Phase 1
["night", Tone.new(-128, -128, -32), 250], # Phase 2
["morning", Tone.new( -48, -48, -16), 100], # Phase 3
] # ? Do not delete PHASE?
# If you want a more realistic tone for your real-time setting...
# ["noon", Tone.new( 0, 0, 0), 16], # Phase 0
# ["evening", Tone.new( 0, -96, -96), 20], # Phase 1
# ["night", Tone.new(-96, -96, -64), 6], # Phase 2
# ["morning", Tone.new(-48, -48, -16), 10], # Phase 3
# ...is an alternative to your tones.
# ? The phase where the day changes.
# When the appointed phase comes into play, a new day is started.
# The default settings are as follows:
# 0 - noon
# 1 - evening
# 2 - night
# 3 - morning
# ? If using actual time, keep in mind that this script cannot
# keep track of the actual days.
PASS_DAY_PHASE = 3
# ? Fade time between phases in frames.
# 60 frames is the default used.
PHASE_DURATION = 60
# ? Day of the week name.
# Starts from the first day, goes to the last day, then loops.
# The name of the day has no significance to how the script
# performs, so name them as you wish.
# ? When actual time is used, make sure to use 7 days.
WEEK_NAME = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
end
end
#???????????????????????????????????????
$imported = {} if $imported == nil
$imported["DayNight"] = true
if $data_mapinfos == nil
$data_mapinfos = load_data("Data/MapInfos.rvdata")
end
module KGC::DayNight
METHOD_TIME = 0 # Elapsed Time
METHOD_STEP = 1 # Number of Steps
METHOD_RTIME = 2 # Real-time
module KGC::Commands
module_function
#--------------------------------------------------------------------------
# ? Stopping day/night change.
#--------------------------------------------------------------------------
def stop_daynight
$game_system.daynight_change_enabled = false
end
#--------------------------------------------------------------------------
# ? Starting day/night change.
#--------------------------------------------------------------------------
def start_daynight
$game_system.daynight_change_enabled = true
end
#--------------------------------------------------------------------------
# ? Acquiring present phase name.
#--------------------------------------------------------------------------
def get_daynight_name
return KGC::DayNight::PHASE[get_daynight_phase][0]
end
#--------------------------------------------------------------------------
# ? Acquiring present day of the week.
# variable_id : the ID of the variable it replaces.
#--------------------------------------------------------------------------
def get_daynight_week(variable_id = 0)
if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
week = Time.now.wday
else
days = $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE]
week = (days % KGC::DayNight::WEEK_NAME.size)
end
if variable_id > 0
$game_variables[variable_id] = week
end
return week
end
#--------------------------------------------------------------------------
# ? Acquiring the name of the present day of the week.
#--------------------------------------------------------------------------
def get_daynight_week_name
return KGC::DayNight::WEEK_NAME[get_daynight_week]
end
#--------------------------------------------------------------------------
# ? Phase Change
# phase : the phase after phase transition.
# duration : time in frames for phase transition
# pass_days : the days that have elapsed initially (Default: 0)
#--------------------------------------------------------------------------
def change_daynight_phase(phase,
duration = KGC::DayNight::PHASE_DURATION,
pass_days = 0)
$game_temp.manual_daynight_duration = duration
$game_system.daynight_counter = 0
$game_system.daynight_phase = phase
$game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += pass_days
end
#--------------------------------------------------------------------------
# ? Transitioning to the next phase.
# duration : time in frames for phase transition
#--------------------------------------------------------------------------
def transit_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.transit_daynight_phase(duration)
end
#--------------------------------------------------------------------------
# ? Reseting the color tone to default.
# duration : time in frames for transition
#--------------------------------------------------------------------------
def set_daynight_default(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.set_daynight_default(duration)
end
#--------------------------------------------------------------------------
# ? Re-creating present phase.
# duration : time in frames for transition
#--------------------------------------------------------------------------
def restore_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.restore_daynight_phase(duration)
end
end
unless $@
class RPG::Area
#--------------------------------------------------------------------------
# ? Acquiring Encounter List
#--------------------------------------------------------------------------
alias encounter_list_KGC_DayNight encounter_list
def encounter_list
list = encounter_list_KGC_DayNight.clone
# Appearance conditional choice.
list.each_index { |i|
list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
}
return list.compact
end
end
end
class RPG::Troop
#--------------------------------------------------------------------------
# ? Cache formation of day/night change.
#--------------------------------------------------------------------------
def create_daynight_cache
@__appear_daynight_phase = []
@__nonappear_daynight_phase = []
# Phase Appearance
if @name =~ KGC::DayNight::Regexp::Troop::APPEAR_PHASE
$1.scan(/[\-]?\d+/).each { |num|
phase = num.to_i
if phase
# If the phase doesn't appear
@__nonappear_daynight_phase
else
# If the phase does appear
@__appear_daynight_phase
end
}
end
end
#--------------------------------------------------------------------------
# ? Phase Appearance
#--------------------------------------------------------------------------
def appear_daynight_phase
create_daynight_cache if @__appear_daynight_phase == nil
return @__appear_daynight_phase
end
#--------------------------------------------------------------------------
# ? Phase Non-Appearance
#--------------------------------------------------------------------------
def nonappear_daynight_phase
create_daynight_cache if @__nonappear_daynight_phase == nil
return @__nonappear_daynight_phase
end
end
class Game_Screen
#--------------------------------------------------------------------------
# ? Open instance variable
#--------------------------------------------------------------------------
attr_reader :daynight_tone # Color tone of day and night
#--------------------------------------------------------------------------
# ? Clear
#--------------------------------------------------------------------------
alias clear_KGC_DayNight clear
def clear
clear_KGC_DayNight
clear_daynight
end
#--------------------------------------------------------------------------
# ? Clearing the variable for day and night change
#--------------------------------------------------------------------------
def clear_daynight
@default_tone = Tone.new(0, 0, 0)
# Coordinate initialization for movement decision
@daynight_x = 0
@daynight_y = 0
apply_daynight
end
#--------------------------------------------------------------------------
# ? Applying the color tone of day and night
#--------------------------------------------------------------------------
def apply_daynight
return if $game_map == nil
# In the case of a map with day/night changes disabled
if $game_map.daynight_void?
if @daynight_tone_changed
# You reset to the default color tone
@tone = @default_tone.clone
@daynight_tone_changed = false
end
@daynight_tone = @tone.clone
return
end
# If phase isn't correct, restore default
if $game_system.daynight_phase_object == nil
$game_system.daynight_phase = 0
end
# Applying the present color tone
@tone = $game_system.daynight_phase_object[1].clone
@daynight_tone = @tone.clone
# In case of real-time transition
if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
time = Time.now
# Transition to the correct phase
KGC::DayNight::PHASE.each_with_index { |phase, i|
if phase[2]
start_tone_change(phase[1], 1)
$game_system.daynight_phase = i
break
end
}
end
@daynight_tone_changed = true
end
#--------------------------------------------------------------------------
# ? Acquisition of color tone
#--------------------------------------------------------------------------
def tone
if $game_temp.in_battle && KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
return @default_tone
else
return @tone
end
end
#--------------------------------------------------------------------------
# ? Start of color tone modification
# tone : Color tone
# duration : Transition time
#--------------------------------------------------------------------------
alias start_tone_change_KGC_DayNight start_tone_change
def start_tone_change(tone, duration)
duration = [duration, 1].max
start_tone_change_KGC_DayNight(tone, duration)
@daynight_tone_target = tone.clone
@daynight_tone_duration = duration
end
#--------------------------------------------------------------------------
# ? Frame update
#--------------------------------------------------------------------------
alias update_KGC_DayNight update
def update
update_KGC_DayNight
update_daynight_transit
end
#--------------------------------------------------------------------------
# ? Color tone update
#--------------------------------------------------------------------------
alias update_tone_KGC_DayNight update_tone
def update_tone
update_tone_KGC_DayNight
if @daynight_tone_duration >= 1
d = @daynight_tone_duration
target = @daynight_tone_target
@daynight_tone.red = (@daynight_tone.red * (d - 1) + target.red) / d
@daynight_tone.green = (@daynight_tone.green * (d - 1) + target.green) / d
@daynight_tone.blue = (@daynight_tone.blue * (d - 1) + target.blue) / d
@daynight_tone.gray = (@daynight_tone.gray * (d - 1) + target.gray) / d
@daynight_tone_duration -= 1
end
end
#--------------------------------------------------------------------------
# ? Phase transition update
#--------------------------------------------------------------------------
def update_daynight_transit
# When manual change was done
if $game_temp.manual_daynight_duration
start_tone_change($game_system.daynight_phase_object[1],
$game_temp.manual_daynight_duration)
$game_temp.manual_daynight_duration = nil
@daynight_tone_changed = true
end
return unless $game_system.daynight_change_enabled # Replace current phase
return if $game_map.daynight_stop? # In process of stopping
if KGC::DayNight::STOP_ON_EVENT
interpreter = ($game_temp.in_battle ? $game_troop.interpreter :
$game_map.interpreter)
return if interpreter.running? # event executing
end
case KGC::DayNight::METHOD
when KGC::DayNight::METHOD_TIME # Elapsed time
update_daynight_pass_time
when KGC::DayNight::METHOD_STEP # Number of steps
update_daynight_step
when KGC::DayNight::METHOD_RTIME # Real-time
update_daynight_real_time
end
end
#--------------------------------------------------------------------------
# ? Transition: Elapsed Time
#--------------------------------------------------------------------------
def update_daynight_pass_time
# Count growth calculation
inc_count = Graphics.frame_count - @frame_count
# If the result is off, return.
if inc_count >= 100
@frame_count = Graphics.frame_count
return
end
# Count addition
$game_system.daynight_counter += inc_count
@frame_count = Graphics.frame_count
# State transition decision
count = $game_system.daynight_counter / Graphics.frame_rate
if count >= $game_system.daynight_phase_object[2]
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ? Transition: Number of Steps
#--------------------------------------------------------------------------
def update_daynight_step
# If it's not active, it returns.
return if @daynight_x == $game_player.x && @daynight_y == $game_player.y
@daynight_x = $game_player.x
@daynight_y = $game_player.y
# Count addition
$game_system.daynight_counter += 1
# State transition decision
count = $game_system.daynight_counter
if count >= $game_system.daynight_phase_object[2]
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ? Transition: Real-time
#--------------------------------------------------------------------------
def update_daynight_real_time
time = Time.now
# State transition decision
time1 = $game_system.daynight_phase_object[2]
transit = (time1
if $game_system.previous_daynight_phase_object != nil
time2 = $game_system.previous_daynight_phase_object[2]
if time1
transit &= (time.hour
end
end
if transit
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ? Transitioning to the next state
# duration : Transition duration
#--------------------------------------------------------------------------
def transit_daynight_next(duration = KGC::DayNight::PHASE_DURATION)
$game_system.daynight_counter = 0
$game_system.progress_daynight_phase
# Days lapse decision
if $game_system.daynight_phase == KGC::DayNight::PASS_DAY_PHASE
$game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += 1
end
# Color tone change
start_tone_change($game_system.daynight_phase_object[1], duration)
@daynight_tone_changed = true
end
#--------------------------------------------------------------------------
# ? Default tone to fall back on (0, 0, 0)
# duration : Transition duration
#--------------------------------------------------------------------------
def set_daynight_default(duration)
start_tone_change(@default_tone, duration)
end
#--------------------------------------------------------------------------
# ? Restoring present phase
# duration : Transition duration
#--------------------------------------------------------------------------
def restore_daynight_phase(duration)
start_tone_change($game_system.daynight_phase_object[1], duration)
@daynight_tone_changed = true
end
end
class Game_Map
#--------------------------------------------------------------------------
# ? Setup
# map_id : Map ID
#--------------------------------------------------------------------------
alias setup_KGC_DayNight setup
def setup(map_id)
setup_KGC_DayNight(map_id)
@screen.apply_daynight
end
#--------------------------------------------------------------------------
# ? Is day and night change stopped?
#--------------------------------------------------------------------------
def daynight_stop?
info = $data_mapinfos[map_id]
return false if info == nil
return (info.daynight_stop || info.daynight_void)
end
#--------------------------------------------------------------------------
# ? Day and night change invalidity?
#--------------------------------------------------------------------------
def daynight_void?
info = $data_mapinfos[map_id]
return false if info == nil
return info.daynight_void
end
#--------------------------------------------------------------------------
# ? Acquisition of encounter list
#--------------------------------------------------------------------------
alias encounter_list_KGC_DayNight encounter_list
def encounter_list
list = encounter_list_KGC_DayNight.clone
# Appearance of conditional decision
list.each_index { |i|
list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
}
return list.compact
end
end
if KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
class Spriteset_Battle
#--------------------------------------------------------------------------
# ? Compilation of battleback sprite
#--------------------------------------------------------------------------
alias create_battleback_KGC_DayNight create_battleback
def create_battleback
create_battleback_KGC_DayNight
if @battleback_sprite.wave_amp == 0
@battleback_sprite.tone = $game_troop.screen.daynight_tone
end
end
#--------------------------------------------------------------------------
# ? Compilation of battle floor sprite
#--------------------------------------------------------------------------
alias create_battlefloor_KGC_DayNight create_battlefloor
def create_battlefloor
create_battlefloor_KGC_DayNight
@battlefloor_sprite.tone = $game_troop.screen.daynight_tone
end
end
end