The RPG Maker Resource Kit

RMRK RPG Maker Creation => VX => VX Scripts Database => Topic started by: XIV on February 17, 2011, 11:10:56 PM

Title: XIV's Timed Choices v1.4
Post by: XIV on February 17, 2011, 11:10:56 PM
Timed Choices
Version: v1.4
Author: XIV
Date: February 17, 2011

Version History



Description


This simple script allows you to put a timer on player's choices, so whenever there is a "Show Choices" event command the player has a limited time to make a choice before you make one for him or the script chooses one randomly. The wait time can be easily set using a variable.

Features


Screenshots

(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg121.imageshack.us%2Fimg121%2F7865%2Fscrshotx.jpg&hash=7f5a63f8f7a3ad392a08266d7d83ac6a2b10ec14)

Instructions

Copy the script below. Paste it above Main in your project. Setup variable IDs, switch IDs and read the instructions. Use and enjoy!

Script


Code: [Select]
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# ======================== XIV's Timed Choices v1.4 ============================
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------

# Author: XIV
# Version: 1.4
# Date: 19.12.2010.

# Features:
# - set a timer on player's choices with a variable
# - running an additional timer in the background is possible
# - set a random choice when the timer reaches 00:00 or use your own choice from
#   the event command

# How to use:
# 1. Paste this script above Main in your project.
# 2. Setup the switch and variable IDs below.
# 3. Use and enjoy!

# NOTE!
# If you plan on using this with a custom message system, it WILL work fine as
# long as you don't mess with the "choice-box positioning"!
# If you want to make this script compatible with any custom message system's
# choice-box positioning, contact me either in the thread where you found this or
# via PM on rpgmakervx.net.

# For Ultimate Timer users:
# This script does NOT function properly with the count-up  timer or the
# variable timer on, although it works perfectly with other features of the
# Ultimate Timer!

module XIV
  module TimedChoice
  # This variable determines the wait time before the choices close. 
  CHOICE_TIME = 5
 
  # This switch enables(ON) or disables(OFF) the randomness of the choice when
  # the choice timer reaches 00:00
  RANDOM_CHOICE = 5
 
  # Set this to true if you want the choice timer to be directly above the message
  # box.
  ABOVE_MSG = true
  end
end
#-------------------------------------------------------------------------------
# * END CUSTOMIZATION
#-------------------------------------------------------------------------------
class Game_System
  attr_accessor :choice_on
  attr_accessor :return_pos
end # Game_System

class Sprite_Timer < Sprite
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     viewport : viewport
  #--------------------------------------------------------------------------
  alias xiv_timedchoices_init initialize unless $@
  def initialize(viewport)
    xiv_timedchoices_init(viewport)
    @xy = [self.x,self.y]
    $game_system.return_pos = true
    if XIV::TimedChoice::ABOVE_MSG
      self.x = 120
      self.y = 240
      $game_system.return_pos = false
    end
  end # initialize
 
  alias xiv_timedchoices_up update unless $@
  def update
    xiv_timedchoices_up
    if $game_system.return_pos
      self.x = @xy[0]
      self.y = @xy[1]
    end
  end # update
end # Sprite_Timer

class Window_Timer < Window_Base
  def initialize
    super(120, 240, 88, 50)
    self.z = 0
  end
end
   
class Window_Message < Window_Selectable
  #-----------------------------------------------------------------------------
  # * start_choice alias
  #-----------------------------------------------------------------------------
  alias new_start_choice_XTC start_choice unless $@
  def start_choice
    new_start_choice_XTC
    $game_system.choice_on = true
    @win = Window_Timer.new if XIV::TimedChoice::ABOVE_MSG
    if $game_system.timer_working
      @timer_worked = true
      @old_time = $game_system.timer
    end
    $game_system.timer = $game_variables[XIV::TimedChoice::CHOICE_TIME] * Graphics.frame_rate   
    $game_system.timer_working = true
  end # start_choice
 
  #-----------------------------------------------------------------------------
  # * input_choice alias
  #-----------------------------------------------------------------------------
  alias new_input_choice_XTC input_choice unless $@
  def input_choice
    new_input_choice_XTC
    if $game_system.timer == 0
      rand_choice
      Sound.play_cancel
      terminate_message
      $game_system.choice_on = false
      if XIV::TimedChoice::ABOVE_MSG
        @win.dispose
        $game_system.return_pos = true
      end
      return_timer
    end
    if Input.trigger?(Input::C)
      $game_system.timer_working = false
      $game_system.choice_on = false
      if XIV::TimedChoice::ABOVE_MSG
        @win.dispose
        $game_system.return_pos = true
      end
      return_timer
    end
  end # input_choice
 
  #-----------------------------------------------------------------------------
  # * new method determines the random choice
  #-----------------------------------------------------------------------------
  def rand_choice
    if $game_switches[XIV::TimedChoice::RANDOM_CHOICE]
      random_choice = rand(6)
      while random_choice == 0 or (random_choice != 5 and random_choice > $game_message.choice_max) or ($game_message.choice_cancel_type < 5 and random_choice == 5) do
        random_choice = rand(6)
      end
    else
      random_choice = $game_message.choice_cancel_type
    end
    $game_message.choice_proc.call(random_choice - 1)
  end # rand_choice
 
  #-----------------------------------------------------------------------------
  # * new_method returns the timer if it ran before choice processing
  #-----------------------------------------------------------------------------
  def return_timer
    if @timer_worked
      @diff = ($game_variables[XIV::TimedChoice::CHOICE_TIME] * Graphics.frame_rate) - $game_system.timer - Graphics.frame_rate
      timing = @old_time - @diff
      $game_system.timer = timing
      if $game_system.timer <= 0
        $game_system.timer = 0
      end
        $game_system.timer_working = true
    end
  end # return_timer 
end # Window_Message

Credit



Thanks


Support


Any bugs reports and suggestions should be posted in this thread or sent to me via PM.

Known Compatibility Issues

This script aliases the following methods:
- start_choice of the Window_Message class
- input_choice of the Window_Message class
- update of the Sprite_Timer class
- initialize of the Sprite_Timer class

There might be issues with other scripts that use these methods.

Demo


Timed Choices v1.4 Demo (http://www.mediafire.com/?tmeykur02urnog9)