Black_Mage icon

Extra Setting for Choice RMVXA Script

Black_Mage | PRO | 07/05/22 12:28:37 PM UTC (Edited) | 0 ⭐ | 1035 👁️ | Never ⏰ | []
Ruby |

15.65 KB

|

None

|

0 👍

/

0 👎

#==============================================================================
# Extra Settings for Choices Script By Black Mage (Credit required to use)
# Version : 1.2
#
# https://burningwizard.wordpress.com/2017/12/29/extra-settings-for-choices-script-rmvxa-rgss3/
#==============================================================================
 
#==============================================================================
# Changelog
#==============================================================================
# Version 1.2 
#   - Separate centered choices text with centered choices window position.
#   - Add custom position for choices window.
#
# Version 1.1
#   - Add Button Customize setting.
#   - Add Centered Choices setting.
#
# Version 1.0 
#   - Initial version.
#==============================================================================
 
#==============================================================================
# This script have several function regarding choices command.
#
# 1. Scrolling Choices
#    You can make the choices cursor scrolling from top to the bottom by using
#    this script call:
#
#    choice_scroll(boolean, delay)
#
#    where boolean value is true or false. When boolean is false, nothing is
#    happened, and you can put delay value whatever you like. If the boolean
#    is true, however, then the choices will start to scrolling from top to the
#    bottom of available choices. The speed of the scrolling is depends on the
#    value of delay. The smaller the delay value, means the scrolling speed
#    will be faster.
#
# 2. Arrow Lock
#    You can lock the directional button during choice selection, leaving
#    player to have access only on confirm and cancel button, by using this 
#    script call:
#
#    choice_arrow_lock(value)
#
#    where the value is true or false. Set the value on true to disable the 
#    directional button, and set it on false to enable the directional button.
#
# 3. Forced Choices
#    This setting will make the choice cursor will always return to a specified 
#    index, no matter where the player move the cursor. The cursor will return 
#    to the specified index after several delay. You can use it by calling this 
#    script call:
#
#    choice_forced(boolean, index, delay)
#
#    where boolean is either true or false, determining wether the setting is
#    used or not. index is where the choice cursor will return at. And delay is
#    how many frame passed before the cursor return to the specified index.
#
# 4. Timed Choices
#    This will make the choice have an invisible timer on it. When the timer
#    reaches 0, the highlited choice will be selected, or it will trigger 
#    another event depending on the setting. You can use it by using this script
#    call:
#
#    choice_timer(boolean1, boolean2, duration, common_event)
#
#    where boolean1 stands for determining wether the setting is in effect or
#    not. Set it to false so you don't need to worry about the other arguments
#    value, just put whatever on them.
#
#    boolean2 stands for wether when the time is running out, a specific common
#    event will be played or it will choos the highlighted choice. When this
#    value is false, the highlighted choice will be selected. When this is true,
#    a common event will be played depending on common_event value.
#
#    duration is how many frames will passed before Boolean2 setting took effect.
#
#    common_event is an ID for which common event get executed if boolean2 value
#    is true. If boolean2 value is false, you can put whatever on it's value.
#
#    You can check how many frames left on the timer on this variable:
#    
#    $game_system.choice_remaining_time
#
# 5. Button Customize
#    You can customize the button used to move the choices by using this script 
#    call:
#
#    choice_button(down, up)
#
#    where down and up are the button that will make the choices go down and up
#    respectively. Ex: choice_button(:LEFT, :RIGHT) will make the left arrow to
#    move the choice cursor up, and the right arrow will move the choice cursor
#    down.
#    
#    Default available button:
#    down arrow         :DOWN
#    up arrow           :UP
#    left arrow         :LEFT
#    right arrow        :RIGHT
#
#    You can add more button by using some script that enable another button to
#    be used in your game.
#
# 6. Centered Choices
#    I hate the default positioning of choices in RMVXA, and some script out
#    there aren't suited for my needs. So here's a function to have the choices
#    got centered.
#
#    choice_centered(boolean)
#
#    where boolean are set to true if you want the choices to be centered.
#
# 7. Centered choices text
#    This initially come together with the Centered Choices feature. I decided
#    to have them separated. 
#
#    choice_text_centered(boolean)
#
#    Set the boolean to true to have this feature enabled.
#
# 8. Custom Choice Window Position
#    This feature was added by request due to script with same function as this
#    can't be used for certain reason.
#    
#    choice_window_pos_custom(boolean)
#    choice_window_position_x(int)
#    choice_window_position_y(int)
#
#    Set the boolean into true to enable this feature. Set the int to your
#    desired value.
#==============================================================================
 
#==============================================================================
# * Initial Settings. Can left them untouched.
#==============================================================================
module BLACK_CHOICES
  SCROLL        = [false, 0]  # Setting, delay
  TIMER         = [false, false, 0, 0]  # Setting, event on, duration, common event]
  ARROW_LOCK    = false
  FORCED        = [false,0,0] # Setting, index, delay
  BUTTON        = [:DOWN, :UP]
  CENTERED      = false
  TEXT_CENTERED = false
  ENABLE_CUSTOM_CHOICE_WINDOW_POSITION = false
  CUSTOM_CHOICE_WINDOW_POSITION = [0,0]
end
#==============================================================================
 
#------------------------------------------------------------------------------
# * Beyond this is the sacred land of code. You need programming qualification
#   to dwelve deeper, or it'll cause many unnecessary problems. Proceed on your
#   own risk.
#------------------------------------------------------------------------------
 
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
  attr_accessor :choice_scroll
  attr_accessor :choice_timer
  attr_accessor :choice_arrow_lock
  attr_accessor :choice_remaining_time
  attr_accessor :choice_forced
  attr_accessor :choice_button
  attr_accessor :choice_centered
  attr_accessor :choice_text_centered
  attr_accessor :choice_window_pos_custom
  attr_accessor :choice_window_position_x
  attr_accessor :choice_window_position_y
  
  alias black_initialize initialize
  def initialize
    @choice_scroll        = [BLACK_CHOICES::SCROLL[0], BLACK_CHOICES::SCROLL[1]]
    @choice_timer         = [BLACK_CHOICES::TIMER[0], BLACK_CHOICES::TIMER[1], BLACK_CHOICES::TIMER[2]]
    @choice_arrow_lock    = BLACK_CHOICES::ARROW_LOCK
    @choice_forced        = [BLACK_CHOICES::FORCED[0], BLACK_CHOICES::FORCED[1], BLACK_CHOICES::FORCED[2]]
    @choice_button        = [BLACK_CHOICES::BUTTON[0], BLACK_CHOICES::BUTTON[1]]
    @choice_centered      = BLACK_CHOICES::CENTERED
    @choice_text_centered = BLACK_CHOICES::TEXT_CENTERED
    @choice_window_pos_custom = BLACK_CHOICES::ENABLE_CUSTOM_CHOICE_WINDOW_POSITION
    @choice_window_position_x = BLACK_CHOICES::CUSTOM_CHOICE_WINDOW_POSITION[0]
    @choice_window_position_y = BLACK_CHOICES::CUSTOM_CHOICE_WINDOW_POSITION[1]
    black_initialize
  end
end
#==============================================================================
 
#==============================================================================
# * Game Interpreter
#==============================================================================
class Game_Interpreter
  #----------------------------------------------------------------------------
  # * Choice scroll setting
  #----------------------------------------------------------------------------         
  def choice_scroll(boolean, delay)
    $game_system.choice_scroll = [boolean, delay]
  end
  
  #----------------------------------------------------------------------------
  # * Choice timer
  #----------------------------------------------------------------------------         
  def choice_timer(boolean1, boolean2, timer, common_event)
    $game_system.choice_timer = [boolean1, boolean2, timer, common_event]
  end
  
  #----------------------------------------------------------------------------
  # * Arrow lock
  #----------------------------------------------------------------------------         
  def choice_arrow_lock(value); $game_system.choice_arrow_lock = value; end
 
  #----------------------------------------------------------------------------
  # * Choice forced.
  #----------------------------------------------------------------------------         
  def choice_forced(boolean, index, delay)
    $game_system.choice_forced = [boolean, index, delay]
  end
  
  #----------------------------------------------------------------------------
  # * Choice reverse.
  #----------------------------------------------------------------------------         
  def choice_button(down, up); $game_system.choice_button = [down, up]; end
 
  #----------------------------------------------------------------------------
  # * Choice centered.
  #----------------------------------------------------------------------------         
  def choice_centered(boolean); $game_system.choice_centered = boolean; end
 
  #----------------------------------------------------------------------------
  # * Choice text centered.
  #----------------------------------------------------------------------------         
  def choice_text_centered(boolean)
    $game_system.choice_text_centered = boolean
  end
  
  #----------------------------------------------------------------------------
  # * Enable custom choice window position.
  #----------------------------------------------------------------------------         
  def choice_window_pos_custom(boolean)
    $game_system.choice_window_pos_custom = boolean
  end
  
  #----------------------------------------------------------------------------
  # * Custom choice window position.
  #----------------------------------------------------------------------------         
  def choice_window_position_x(int)
    $game_system.choice_window_position_x = int
  end
  def choice_window_position_y(int)
    $game_system.choice_window_position_y = int
  end
end
 
class Window_ChoiceList < Window_Command
  #----------------------------------------------------------------------------
  # * Update
  #----------------------------------------------------------------------------
  def update
    super
    scrolling_choices if $game_system.choice_scroll[0] == true
    countdown_timer if $game_system.choice_timer[0] == true
    forced_choices if $game_system.choice_forced[0] == true
  end
  
  #----------------------------------------------------------------------------
  # * Method for scrolling choices
  #----------------------------------------------------------------------------
  def scrolling_choices
    @speed = 0 if @speed == nil
    @speed += 1
    @speed = 0 if @speed >= $game_system.choice_scroll[1]
    if self.active and @speed == 0
      if @index == ($game_message.choices.size - 1)
        @index = 0
      else 
        @index += 1 
      end
      update_cursor
    end
  end
  
  #----------------------------------------------------------------------------
  # * Method for timed choices
  #----------------------------------------------------------------------------
  def countdown_timer
    $game_system.choice_remaining_time = $game_system.choice_timer[2] if @timer == nil
    @timer = true; $game_system.choice_remaining_time -= 1
    if $game_system.choice_remaining_time <= 0 and @timer != nil
      if $game_system.choice_timer[1]
        deactivate; close; black_reset
        $game_temp.reserve_common_event($game_system.choice_timer[3])
      else
        process_ok
      end
    end
  end  
 
  #----------------------------------------------------------------------------
  # * Method for forced choices
  #----------------------------------------------------------------------------
  def forced_choices
    @delay = $game_system.choice_forced[2] if @delay == nil
    @delay -= 1
    if @delay <= 0
      @delay = nil; select($game_system.choice_forced[1])
    end
  end
  
  #----------------------------------------------------------------------------
  # * Call OK Handler
  #----------------------------------------------------------------------------
  alias black_call_ok_handler call_ok_handler
  def call_ok_handler; black_reset; black_call_ok_handler; end
 
  #----------------------------------------------------------------------------
  # * Call Cancel Handler
  #----------------------------------------------------------------------------
  alias black_call_cancel_handler call_cancel_handler
  def call_cancel_handler; black_reset; black_call_cancel_handler; end
  
  #----------------------------------------------------------------------------
  # * Reset setting
  #----------------------------------------------------------------------------
  def black_reset
    @timer = nil; @delay = nil
    $game_system.choice_forced[0] = false
    $game_system.choice_timer[0] = false
  end
  
  #----------------------------------------------------------------------------
  # * Arrow lock
  #----------------------------------------------------------------------------
  def cursor_movable?; super if !$game_system.choice_arrow_lock; end
 
  #----------------------------------------------------------------------------
  # * Cursor Movement Processing
  #----------------------------------------------------------------------------
  def process_cursor_move
    return unless cursor_movable?
    last_index = @index
    down  = $game_system.choice_button[0]
    up    = $game_system.choice_button[1]
    cursor_down (true)  if Input.repeat?(down)
    cursor_up   (true)  if Input.repeat?(up)
    Sound.play_cursor if @index != last_index
  end
end
 
#==============================================================================
# * Centered Choices Script.
#==============================================================================
class Window_ChoiceList < Window_Command
  alias center_item_rect_for_text item_rect_for_text
  def item_rect_for_text(index)
    return center_item_rect_for_text(index) if !$game_system.choice_text_centered
    rect = item_rect(index)
    max_chc_wdth = $game_message.choices.collect {|s| text_size(s).width }[index]
    center = (self.width - max_chc_wdth - (padding * 2)) / 2
    rect.x = center; rect.width -= 8; rect
  end    
  alias black_update_placement update_placement
  def update_placement
    black_update_placement
    if $game_system.choice_centered
      self.width = [width, 144].max
      self.x = (Graphics.width - width)/2
      self.y = self.y - 2
    elsif $game_system.choice_window_pos_custom
      self.width = [width, 144].max
      self.x = $game_system.choice_window_position_x
      self.y = $game_system.choice_window_position_y
    end
  end
end
#==============================================================================

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎