VX 스크립트

Kylock's Time System VX 1.5
by Kylock

This script will track game time as well as automatically tint the screen for a day/night effect.
You can make events dependent on time thanks to game variable output support.
You can customize how dark you want it to be at what time.
You can designate certain maps as "outside" so they are the only ones that are dark at night! (Add [KTS] to map name.)
You can choose the speed of your game's clock.
Because the entire time system is an object, its possible to instance or have more than one game clock. PM me for details if you really need this functionality.

Detailed installation and script usage instructions are included in the script header, just like all my other scripts. The usage is VERY similar to the XP version that I wrote over a year ago - if you are familiar with it at all.

To answer a few question before they are asked:
- I am not including weeks, months and years because it gets too complicated when you have a different amount of days in each month for example. The primary intention of this script is to allow you to build your events based on hours in the day and time periods throughout the day. (Ex: The time-locked vault can only be opened between 2 and 3. or The guy with the password can only be found drinking in the bar at midnight.)
- The [KTS] that you put in your map names remains hidden to other scripts, like Map Name Popups and such.
- For script compatibility reasons, if you use a CMS, you might get better results if this script is located ABOVE your CMS. If you have a CMS and want a time window added to it, this is a really easy hack for any scripter, so please make a request in the appropriate Script Requests Forum.
- There are no screenshots because that would be pointless. You can define your own screen tones and there is an added window for time right above the gold window in the default menu. That's all there is, I promise!

Now, the script itself
:Script
#==============================================================================
# ■ Kylock's Time System VX 1.5
#     6.3.2008
#------------------------------------------------------------------------------
#  Script by: Kylock
#==============================================================================
#    Mostly rewritten since XP version.  Cleaner code and less intrusive (more
#  compatible).  This is my comprehensive time and day/night system.  This
#  script adds a new window to the game menu, so if you use a CMS, then place
#  this script ABOVE it so that it won't mess up your CMS.  If you use a custom
#  script that makes changes to the battle background, place KTS below it so
#  that you don't get the delayed-tone effect in you battles.  Other than that,
#  there shouldn't be any other script compatibility issues.
#    I've tried to make this script as customizable as possible, the settings
#  are found immediately following this header.  Although time output to game
#  variables is optional, I strongly suggest using it so that its easier to
#  build your events based on the time in the game.
#==============================================================================
# ● Change Log
#------------------------------------------------------------------------------
#  1.0 - Original Release.
#  1.1 - Corrected tinting issue at the start of a battle.  Place this script
#          below any battle background scripts if you experience "jumpy tinting"
#  1.2 - Corrected the accuracy of $kts.stop and $kts.go
#  1.3 - $kts.stop really stops everything now.  Also added game switches for
#          even easier eventing.
#  1.4 - Fixed Battle Test compatibility (simulates normal daylight for battle
#          test instead of darkness).
#        Now switches and variables will only update when the map loads so that
#          events don't suddenly dissappear when their time is up.
#        Added $kts_anti_tone - returns an inverse tone color to allow sprites
#          to appear normally on a tinted screen.
#  1.5 - Rewrote the regexp that finds the [KTS] in the map name.  Hopefully
#          this resolves the wrong maps being tinted problem.
#==============================================================================
# ● Auto-tone Instructions
#------------------------------------------------------------------------------
#    Maps designated as outdoors are the only maps to be affected by this
#  scripts use of auto-toning.  To signify a map to be "outdoors", you must
#  include [KTS] In the name of the map.  For example, you world map could be
#  named "World Map [KTS]" or "[KTS] World Map".  Provisions are made later in
#  the script to remove [KTS] from the map name when it's read by another
#  script.  This means that "[KTS]" won't show up in your Map Name Popup
#  windows.
#==============================================================================
# ● Script Function Calls
#------------------------------------------------------------------------------
#    The following are script commands that can be executed by using the
#  "Script..." command in your events.
#    ● $kts.stop            - Stops time (can be used for cutscenes)
#    ● $kts.go              - Resumes time (don't forget to use this!)
#    ● $kts.sec(n)          - progresses time forward (n) seconds
#    ● $kts.min(n)          - progresses time forward (n) minutes
#    ● $kts.hours(n)        - progresses time forward (n) hours
#    ● $kts.days(n)         - progresses time forward (n) days
#    ● $kts.jump_to_hour(n) - progresses time forward TO the specified hour.
#                             Particularly useful in a situation where you
#                             want a certain event to happen at a certain time,
#                             or an Innkeeper who should wake the party up at
#                             a certain hour.  This command MAY cause your game
#                             to appear to freeze for a few seconds on slower
#                             computers.
#==============================================================================
# ● Game Database Setup
#------------------------------------------------------------------------------
#    This script, by defult, uses the following game variables and switches:
#  Database Variables:
#    [1] The Current Time            [4] The Current Hour
#    [2] The Current Second          [5] The Current Day
#    [3] The Current Minute          [6] Name of the Current Day
#  Database Switches
#    [1] ON during night hours   (2200-0400)(10pm-4am)
#    [2] ON during dawn hours    (0500-0800)( 5am-8am)
#    [3] ON during daytime hours (0900-1800)( 9am-6pm)
#    [4] ON during sunset hours  (1900-2100)( 7pm-9pm)
#==============================================================================

#==============================================================================
# Stores variables and user defined settings for the time system.
#==============================================================================
module KTS
  #-----------------------------------------------------------------------
  # User Definable Clock Settings
  #-----------------------------------------------------------------------
  # Sets the speed multiplier of the clock.  1 is real time.  A higher
  #   value will give you a faster clock.  Default is 100.
  SPEED      = 100
  #AMPM (True: 12-hour clock, False: 24-hour clock)
  AMPM       = false
  # Sets the time at the start of your game.
  START_HOUR = 1
  START_DAY  = 1
  #-----------------------------------------------------------------------
  # If you want custom day names, edit away!
  #-----------------------------------------------------------------------
  DAY_NAMES = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
  #-----------------------------------------------------------------------
  # Settings for Time Periods
  #-----------------------------------------------------------------------
  T1 = [ 0,5 ] # Night         # Sets time periods for tinting effects
  T2 = [ 6,8 ] # Dawn          # [Start Hour, End Hour] for time period
  T3 = [ 9,18] # Day           # Use 24-hour values for time periods
  T4 = [19,21] # Sunset
  T5 = [22,24] # Night         # <- Ex: Night is between 23:00 and 24:00
  #-----------------------------------------------------------------------
  # Settings for Output to Game Variables option.
  #-----------------------------------------------------------------------
  # Set this to true to output the current time to game variables.
  DATABASE_OUTPUT = true
    # Game Variable to be used for time output.
    TIME    = 1 #(Time in string format. Ex: "2:48 AM" or "02:48")
    SECONDS = 2
    MINUTES = 3
    HOURS   = 4
    DAYS    = 5
    DAYNAME = 6
    # Game Switches to be used for time output.
    NIGHT   = 1 # This switch is on during night hours   (2200-0400)(10pm-4am)
    DAWN    = 2 # This switch is on during dawn hours    (0500-0800)( 5am-8am)
    DAY     = 3 # This switch is on during daytime hours (0900-1800)( 9am-6pm)
    SUNSET  = 4 # This switch is on during sunset hours  (1900-2100)( 7pm-9pm)
  #-----------------------------------------------------------------------
  # Settings for time controlled screen toning
  #-----------------------------------------------------------------------
  # True will enable screen toning to be used by the script.
  USE_TONE = true
  # Sets the duration of tone changes (in frames)
  FADE_LENGTH = 120
  # Defines tones to be used in the corresponding time periods defined above.
  #              RED, GREEN, BLUE, GREY
  C1 = Tone.new(-187,  -119,  -17,  68)
  C2 = Tone.new(  17,   -51, -102,   0)
  C3 = Tone.new(   0,     0,    0,   0)
  C4 = Tone.new( -68,  -136,  -34,   0)
  C5 = Tone.new(-187,  -119,  -17,  68)
  # Defines anti-tones
  A1 = Tone.new( 187,   119,   17, -68)
  A2 = Tone.new( -17,    51,  102,   0)
  A3 = Tone.new(   0,     0,    0,   0)
  A4 = Tone.new(  68,   136,   34,   0)
  A5 = Tone.new( 187,   119,   17, -68)
end

#==============================================================================
# Core Time System Engine
#==============================================================================
class Kylock_Time_System
  # sets instance variables
  def initialize
    $kts_map_data = load_data("Data/MapInfos.rvdata")
    @event_offset = (KTS::START_HOUR * 3600) + (KTS::START_DAY * 86400)
    @kts_stop = false
    $kts_event_tone = false
    $kts_battle_tone = true
    $kts_anti_tone = Tone.new(0,0,0,0)
  end
  
  # Computes current time and updates variables if used
  def update
    if !@kts_stop
      @total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
      @seconds = (@total_seconds) % 60
      @minutes = (@total_seconds / 60) % 60
      @hours   = (@total_seconds / 3600) % 24
      @days    = (@total_seconds / 86400)
      update_tint
      if KTS::DATABASE_OUTPUT
        $game_variables[KTS::TIME]    = getTime
      end
    end
  end

  def update_variables
    $game_variables[KTS::SECONDS] = @seconds
    $game_variables[KTS::MINUTES] = @minutes
    $game_variables[KTS::HOURS]   = @hours
    $game_variables[KTS::DAYS]    = @days
    $game_variables[KTS::DAYNAME] = getDayName
  end

  def update_switches
    if @period == 1 || @period == 5
      $game_switches[KTS::NIGHT] = true
    else
      $game_switches[KTS::NIGHT] = false
    end
    if @period == 2
      $game_switches[KTS::DAWN] = true
    else
      $game_switches[KTS::DAWN] = false
    end
    if @period == 3
      $game_switches[KTS::DAY] = true
    else
      $game_switches[KTS::DAY] = false
    end
    if @period == 4
      $game_switches[KTS::SUNSET] = true
    else
      $game_switches[KTS::SUNSET] = false
    end
  end

  def getTime
    if KTS::AMPM
      # Formats a 12-Hour Clock
      if @hours > 12
        hours1 = @hours - 12
        if hours1 > 9
          time = sprintf("%02d:%02d" + " PM", hours1, @minutes)
        else
          time = sprintf("%01d:%02d" + " PM", hours1, @minutes)
        end
      else
        if @hours > 9
          time = sprintf("%02d:%02d" + " AM", @hours, @minutes)
        else
          time = sprintf("%01d:%02d" + " AM", @hours, @minutes)
        end
      end
      return time
    else
      # Formats a 24-Hour Clock
      time = sprintf("%02d:%02d", @hours, @minutes)
      return time
    end
  end
  #-----------------------------------------------------------------------
  # Script Command Functions
  #-----------------------------------------------------------------------
  def stop
    @time_stopped = @total_seconds
    @kts_stop = true
  end
  def go
    total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
    @event_offset -= (total_seconds - @time_stopped)
    @kts_stop = false
  end
  def sec(sec = 0)
    @event_offset += sec
  end
  def min(min = 0)
    @event_offset += min * 60
  end
  def hours(hours = 0)
    @event_offset += hours * 3600
  end
  def days(days = 0)
    @event_offset += days * 86400
  end
  def jump_to_hour(jhour = 0)
    while @hours != jhour
      @event_offset += 1
      $kts.update
    end
  end
  #-----------------------------------------------------------------------
  # Script Support/Misc Functions
  #-----------------------------------------------------------------------
  def getDayName
    weekday = (@days % KTS::DAY_NAMES.length)
    return KTS::DAY_NAMES[weekday]
  end

  #-----------------------------------------------------------------------
  # Screen Tone Functions
  #-----------------------------------------------------------------------
  def update_tint(duration = KTS::FADE_LENGTH)
    return if $BTEST
    if KTS::USE_TONE && !$kts_event_tone && $kts_map_data[$game_map.map_id].outside_tint?
      if @hours >= KTS::T1[0] and @hours <= KTS::T1[1]
        @period = 1
        screen.start_tone_change(KTS::C1,duration)
        $kts_anti_tone = KTS::A1
      elsif @hours >= KTS::T2[0] and @hours <= KTS::T2[1]
        @period = 2
        screen.start_tone_change(KTS::C2,duration)
        $kts_anti_tone = KTS::A2
      elsif @hours >= KTS::T3[0] and @hours <= KTS::T3[1]
        @period = 3
        screen.start_tone_change(KTS::C3,duration)
        $kts_anti_tone = KTS::A3
      elsif @hours >= KTS::T4[0] and @hours <= KTS::T4[1]
        @period = 4
        screen.start_tone_change(KTS::C4,duration)
        $kts_anti_tone = KTS::A4
      elsif @hours >= KTS::T5[0] and @hours <= KTS::T5[1]
        @period = 5
        screen.start_tone_change(KTS::C5,duration)
        $kts_anti_tone = KTS::A5
      end
    else
      # no tone if indoors
      if !$kts_map_data[$game_map.map_id].outside_tint?
        screen.start_tone_change(Tone.new(0,0,0,0),duration)
      end
    end
  end
  def screen
    if $game_temp.in_battle
      return $game_troop.screen
    else
      return $game_map.screen
    end
  end
end

class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias kts_initialize initialize
  def initialize
    $kts.update_switches if !@kts_stop && KTS::DATABASE_OUTPUT
    $kts.update_variables if !@kts_stop && KTS::DATABASE_OUTPUT
    kts_initialize
  end
end

#==============================================================================
# Instantly updates screen tone when a new map is loaded.
#==============================================================================
class Game_Map
  alias kts_setup setup
  def setup(map_id)
    kts_setup(map_id)
    $kts_event_tone = false
    $kts.update
    $kts.update_tint(0)
  end
end

#==============================================================================
# Instantly updates screen tone when a battle starts.
#==============================================================================
class Spriteset_Battle
  alias kts_create_battleback create_battleback
  def create_battleback
    $kts.update_tint(0)
    kts_create_battleback
  end
end

#==============================================================================
# Temporarily disables auto-toning if an event tints the screen.
#==============================================================================
class Game_Interpreter
  alias kts_Interpreter_command_223 command_223
  def command_223
    $kts_event_tone = true
    kts_Interpreter_command_223
  end
end

#==============================================================================
# Integrates the Time System into the Game System.
#==============================================================================
class Game_System
  # inits a KTS object
  alias kts_initialize initialize
  def initialize
    $kts=Kylock_Time_System.new
    kts_initialize
  end
  # Updates kts every game frame
  alias kts_update update
  def update
    $kts.update
    kts_update
  end
end

#==============================================================================
# Scans Map Names for Toning
#==============================================================================
class RPG::MapInfo
  def name # Definition prevents location scripts from reading anything within
    return @name.gsub(/[.*]/) {""} # brackets, including the brackets
  end
  def original_name
    return @name
  end
  def outside_tint?
    return @name.scan(/[KTS]/).size > 0
    # old regexp: return @name.scan(/[KTS]/).size > 0
  end
end

#==============================================================================
# Sets up the time window for the menu.
#==============================================================================
class Window_KTS < Window_Base
  def initialize(x, y)
    super(x, y, 160, WLH + 32)
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
  end
  def update
    super
    $kts.update
    self.contents.clear
    self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
  end
end

#==============================================================================
# Adds the time window to the menu.
#==============================================================================
class Scene_Menu < Scene_Base
  alias kts_start start
  def start
    kts_start
    @kts_window = Window_KTS.new(0,305)
  end
  alias kts_terminate terminate
  def terminate
    kts_terminate
    @kts_window.dispose
  end
  alias kts_update update
  def update
    kts_update
    @kts_window.update
  end
end

#==============================================================================
# Saves and Loads game time to/from save game file.
#==============================================================================
class Scene_File
  alias kts_write_save_data write_save_data
  def write_save_data(file)
    kts_write_save_data(file)
    Marshal.dump($kts, file)
  end
  alias kts_read_save_data read_save_data
  def read_save_data(file)
    kts_read_save_data(file)
    $kts = Marshal.load(file)
  end
end
Comment '3'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
497 기타 레벨업 시 증가분의 HP/MP 회복 10 시트르산 2010.09.12 2427
496 전투 Animated Battlers VX 3.4 by DerVVulfman 5 file Alkaid 2010.09.10 3117
495 기타 이벤트 제작용 소품 모음 스크립트 12 시트르산 2010.09.10 2209
494 전투 RPG Tankentai SBS 3.4d + ATB 1.2c Kaduki 18 시트르산 2010.09.10 6449
493 기타 타격관계도 등의 한계돌파 11 시트르산 2010.09.10 2365
492 맵/타일 맵상 캐릭터 그래픽 확대 / 축소 이벤트 스크립트 6 시트르산 2010.09.10 3023
491 메시지 Advanced Text System 3.0c by Modern Algebra 3 file Alkaid 2010.09.08 2302
490 액터 Point Spend System 1.05 by Drago del Fato (포인트로 스탯 올리기) 6 Alkaid 2010.09.08 2612
489 메시지 Universal Message System 0.3.0(beta) by ccoa 3 file Alkaid 2010.09.08 2304
488 기타 VX Weather Script by ccoa 1 Alkaid 2010.09.08 1318
487 액터 (수정)크리쳐 합체, 'SW_CreatureMix' by SiotWarrior 22 file 시옷전사 2010.09.07 2972
486 메시지 Advanced Text System 3.0b by Modern Algebra 3 file Alkaid 2010.09.05 2206
485 스킬 Grid Inventory 1.0f by Modern Algebra 2 Alkaid 2010.09.05 1960
484 상태/속성 Full Status CMS 1.0d by Modern Algebra 1 file Alkaid 2010.09.03 2408
483 상점 (수정)크리쳐 샵, 'SW_CreatureShop' by Siot Warrior 15 file 시옷전사 2010.09.03 3675
482 전투 GubiD's Tactical Battle System 1.5.1.4 (RMVX용) 2 Alkaid 2010.09.03 2858
481 저장 Advanced Files 1.3 by Dargor 6 file Alkaid 2010.09.02 2364
480 메뉴 자작 메뉴 스크립트 for VX(L's Simple Custom Menu VX ver.) 5 Alkaid 2010.09.02 4705
479 장비 Multi-Slot Equipment VX 1.6 by DerVVulfman 1 file Alkaid 2010.09.02 1637
478 저장 Neo Save System V by Helladen(Original by Woratana) 8 Alkaid 2010.09.02 2439
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32