RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
Instant Event Commands

0 Members and 1 Guest are viewing this topic.

pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
Instant Event Commands
Version: 1.0
Author: TDS
Date: August 6, 2012

Version History


  • 1.0 2012.08.6 - Public Release

Description


This script allows you to process event commands instantly. Which basically means that it allows you to skip an event to a specific part while running everything from the start up to it allowing to continue working on a long story or complex event from a certain point instead of having to restart it each time you want to make changes.

Features

  • Process Event commands isntantly.
  • Skip to an index command in an event.

Instructions

Instructions are on the script.

Script


Code: [Select]
#==============================================================================
# ** TDS Instant Event Commands
#    Ver: 1.0
#------------------------------------------------------------------------------
#  * Description:
#  This script allows you to process event commands instantly.
#------------------------------------------------------------------------------
#  * Features:
#  Process Event commands isntantly.
#  Skip to an index command in an event.
#------------------------------------------------------------------------------
#  * Instructions:
#  To instantly skip to an index command of an event use this in a script
#  call:
#
#    go_to_index(index)
#
#    index = command index
#
#    Example:
#
#    go_to_index(5)
#
#  To adjust the map display position use this in a script call above the
#  "go_to_index" call:
#
#    quick_event_screen_offset(X, Y)
#
#    X = X Offset (In tiles/Can be negative)
#    Y = Y Offset (In tiles/Can be negative)
#
#    Example:
#
#    quick_event_screen_offset(1, -1)
#
#    Note:
#    This script call is to account for special circustances where instantly
#    scrolling the map does not end up where it's supposed to be due to the
#    player moving as well.
#------------------------------------------------------------------------------
#  * Notes:
#  The indexing sytem can take a bit of getting used to, which is why it's
#  good to have the RGSS console turned on to see which event command index
#  is currently running.
#------------------------------------------------------------------------------
# WARNING:
#
# Do not release, distribute or change my work without my expressed written
# consent, doing so violates the terms of use of this work.
#
# If you really want to share my work please just post a link to the original
# site.
#
# * Not Knowing English or understanding these terms will not excuse you in any
#   way from the consequenses.
#==============================================================================
# * Import to Global Hash *
#==============================================================================
($imported ||= {})[:TDS_Instant_Event_Commands] = true

#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # * Constants (Settings)
  #--------------------------------------------------------------------------
  # Commands that do not require special handling
  QUICK_COMMANDS = (121..123).to_a + (125..129).to_a + (132..138).to_a +
                   (201..206).to_a + (231..235).to_a + (281..285).to_a +
                   (311..324).to_a +  [118, 211, 216, 217, 221, 222, 223, 355]
  #--------------------------------------------------------------------------
  # * Alias Listing
  #-------------------------------------------------------------------------- 
  alias tds_instant_event_commands_game_interpreter_execute_command execute_command 
  #--------------------------------------------------------------------------
  # * Quick Event Call Screen Center Offset (Adjust Screen by offset)
  #     x : x-coordinate offset value
  #     y : y-coordinate offset value 
  #--------------------------------------------------------------------------
  def quick_event_screen_offset(x = 0, y = 0) ; @quick_event_screen_offset = [x, y] end
  #--------------------------------------------------------------------------
  # * Go to Event Index
  #     index : event index
  #--------------------------------------------------------------------------
  def go_to_index(index)
    # Return if Already Past Index or index is bigger than list
    return if index <= @index or index > @list.size
    # Increase Index by 1
    @index += 1
    # While
    loop do
      # Execute Quick Event Command
      execute_quick_command
      # Break if Index has reached desired index
      break if @index >= index           
      # Increase Index
      @index += 1
    end
    # If Event Screen Offset is not nil
    if !@quick_event_screen_offset.nil?     
      x = $game_map.display_x + @quick_event_screen_offset.at(0)
      y = $game_map.display_y + @quick_event_screen_offset.at(1)     
      # Set Map Display Position
      $game_map.set_display_pos(x, y)
    end
    # Set Quick Evetn Screen Offset to nil
    @quick_event_screen_offset = nil
  end
  #--------------------------------------------------------------------------
  # * Quick Event Command Execution
  #--------------------------------------------------------------------------
  def execute_quick_command
    # Get Command
    command = @list[@index]       
    # Return if Quick Commands List does not include Command Code
    return if !QUICK_COMMANDS.include?(command.code)   
    # Get Command Parameters and Indentation
    @params = command.parameters ; @indent = command.indent         
    # Set Quick Command Parameters
    set_quick_command_parameters(command)
    # Return if Custom Quick Command Process is executed
    return if custom_quick_command_process(command)
    # Get Method Name
    method_name = "command_#{command.code}"
    # Send Method if Class Responds to method
    send(method_name) if respond_to?(method_name)
  end
  #--------------------------------------------------------------------------
  # * Set Quick Command Parameters
  #     command : command
  #--------------------------------------------------------------------------
  def set_quick_command_parameters(command)
    # Command Code Case
    case command.code
    when 223 # Map tone Change
      # Change Fade time to 0 and remove wait
      @params[1] = 0 ; @params[2] = false
    when 234 # Change Picture Tone
      # Change Picture Tone and Remove Wait
      @params[2] = 0 ; @params[3] = false
    when 232 # Move Picture
      # Change Move Picture Duration and Remove Wait
      @params[10] = 0 ; @params[11] = false
    end   
  end
  #--------------------------------------------------------------------------
  # * Custom Quick Command Process
  #     command : command
  #--------------------------------------------------------------------------
  def custom_quick_command_process(command)   
    # Command Code Case
    case command.code
    when 221 # Fadeout Screen
      screen.start_fadeout(1)
      return true
    when 222 # Fadein Screen     
      screen.start_fadein(1)
      return true
    when 204 # Scroll Map
      # Start Map Instant Scroll (Ignoring Speed Parameter)
      $game_map.start_instant_scroll(*@params.first(2))
      return true
    when 205 # Set Move Route
      # Refresh Game Map if needed
      $game_map.refresh if $game_map.need_refresh
      # Get Character
      character = get_character(@params[0])
      # Force instant Move Route If Character is not nil
      character.force_instant_move_route(@params[1]) if character
      return true
    end   
    # Return false by default (No Custom events were runned)
    return false
  end
  #--------------------------------------------------------------------------
  # * Event Command Execution
  #--------------------------------------------------------------------------
  def execute_command(*args, &block)   
    # Print Event List
    p "Event Line: #{@index}"
    # Run Original Method
    tds_instant_event_commands_game_interpreter_execute_command(*args, &block)
  end 
end


#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles maps. It includes scrolling and passage determination
# functions. The instance of this class is referenced by $game_map.
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias tds_quick_event_commands_game_map_update                      update 
  #--------------------------------------------------------------------------
  # * Start Instant Scroll
  #--------------------------------------------------------------------------
  def start_instant_scroll(direction, distance)
    # Reset Scrolling Settings if applicable
    setup_scroll
    # Direction Case (2: Up, 4: Left, 6: Right, 8: Down)
    case direction
    when 2 ; set_display_pos(@display_x, @display_y + distance)
    when 4 ; set_display_pos(@display_x - distance, @display_y)
    when 6 ; set_display_pos(@display_x + distance, @display_y)
    when 8 ; set_display_pos(@display_x, @display_y - distance)
    end
  end
end


#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  A character class with mainly movement route and other such processing
# added. It is used as a super class of Game_Player, Game_Follower,
# GameVehicle, and Game_Event.
#==============================================================================

class Game_Character < Game_CharacterBase
  #--------------------------------------------------------------------------
  # * Force Instant Move Route
  #--------------------------------------------------------------------------
  def force_instant_move_route(move_route)
    # Get Instant Move Route
    @instant_move_route = move_route.list.dup   
    # While Instant Move Route is not empty
    while !@instant_move_route.empty?
      # Get Move Command
      command = @instant_move_route.first
      # Process Instant Move Command
      process_instant_move_command(command)
      # Delete Instant Move Route List Command
      @instant_move_route.delete(command)
    end
    # Set Instant Move Route to nil
    @instant_move_route = nil
  end
  #--------------------------------------------------------------------------
  # * Instant Move Straight
  #     d:        Direction (2,4,6,8)
  #     turn_ok : Allows change of direction on the spot
  #--------------------------------------------------------------------------
  def instant_move_straight(d, turn_ok = true)
    @move_succeed = passable?(@x, @y, d)
    if @move_succeed
      set_direction(d)
      @x = $game_map.round_x_with_direction(@x, d)
      @y = $game_map.round_y_with_direction(@y, d)
      moveto(@x, @y) ; increase_steps
    elsif turn_ok
      set_direction(d) ; check_event_trigger_touch_front
    end
  end
  #--------------------------------------------------------------------------
  # * Instant Jump
  #     x_plus : x-coordinate plus value
  #     y_plus : y-coordinate plus value
  #--------------------------------------------------------------------------
  def instant_jump(x_plus, y_plus)
    if x_plus.abs > y_plus.abs
      set_direction(x_plus < 0 ? 4 : 6) if x_plus != 0
    else
      set_direction(y_plus < 0 ? 8 : 2) if y_plus != 0
    end
    # Move to Coordinates
    @x += x_plus ; @y += y_plus ; moveto(@x, @y) ; straighten
  end 
  #--------------------------------------------------------------------------
  # * Instant Move Toward Character
  #--------------------------------------------------------------------------
  def instant_move_toward_character(character)
    sx = distance_x_from(character.x)
    sy = distance_y_from(character.y)
    if sx.abs > sy.abs
      instant_move_straight(sx > 0 ? 4 : 6)
      instant_move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
    elsif sy != 0
      instant_move_straight(sy > 0 ? 8 : 2)
      instant_move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
    end
  end
  #--------------------------------------------------------------------------
  # * Instant Move Away from Character
  #--------------------------------------------------------------------------
  def instant_move_away_from_character(character)
    sx = distance_x_from(character.x) ; sy = distance_y_from(character.y)
    if sx.abs > sy.abs
      instant_move_straight(sx > 0 ? 6 : 4)
      instant_move_straight(sy > 0 ? 2 : 8) if !@move_succeed && sy != 0
    elsif sy != 0
      instant_move_straight(sy > 0 ? 2 : 8)
      instant_move_straight(sx > 0 ? 6 : 4) if !@move_succeed && sx != 0
    end
  end
  #--------------------------------------------------------------------------
  # * Instant Move Diagonally
  #     horz:  Horizontal (4 or 6)
  #     vert:  Vertical (2 or 8)
  #--------------------------------------------------------------------------
  def instant_move_diagonal(horz, vert)
    @move_succeed = diagonal_passable?(x, y, horz, vert)
    if @move_succeed
      @x = $game_map.round_x_with_direction(@x, horz)
      @y = $game_map.round_y_with_direction(@y, vert)     
      moveto(@x, @y) ; increase_steps
    end
    set_direction(horz) if @direction == reverse_dir(horz)
    set_direction(vert) if @direction == reverse_dir(vert)   
  end
  #--------------------------------------------------------------------------
  # * Process Move Command
  #--------------------------------------------------------------------------
  def process_instant_move_command(command)
    params = command.parameters
    case command.code
    when ROUTE_MOVE_DOWN        ; instant_move_straight(2)
    when ROUTE_MOVE_LEFT        ; instant_move_straight(4)
    when ROUTE_MOVE_RIGHT       ; instant_move_straight(6)
    when ROUTE_MOVE_UP          ; instant_move_straight(8)
    when ROUTE_MOVE_LOWER_L     ; instant_move_diagonal(4, 2)
    when ROUTE_MOVE_LOWER_R     ; instant_move_diagonal(6, 2)
    when ROUTE_MOVE_UPPER_L     ; instant_move_diagonal(4, 8)
    when ROUTE_MOVE_UPPER_R     ; instant_move_diagonal(6, 8)
    when ROUTE_MOVE_RANDOM      ; instant_move_straight(2 + rand(4) * 2, false)
    when ROUTE_MOVE_TOWARD      ; instant_move_toward_character($game_player)
    when ROUTE_MOVE_AWAY        ; instant_move_away_from_character($game_player)
    when ROUTE_MOVE_FORWARD     ; instant_move_straight(@direction)
    when ROUTE_MOVE_BACKWARD
      last_direction_fix = @direction_fix
      @direction_fix = true
      instant_move_straight(reverse_dir(@direction), false)
      @direction_fix = last_direction_fix
    when ROUTE_JUMP ;             instant_jump(params.at(0), params.at(1))
    when ROUTE_TURN_DOWN;         set_direction(2)
    when ROUTE_TURN_LEFT;         set_direction(4)
    when ROUTE_TURN_RIGHT;        set_direction(6)
    when ROUTE_TURN_UP;           set_direction(8)
    when ROUTE_TURN_90D_R;        turn_right_90
    when ROUTE_TURN_90D_L;        turn_left_90
    when ROUTE_TURN_180D;         turn_180
    when ROUTE_TURN_90D_R_L;      turn_right_or_left_90
    when ROUTE_TURN_RANDOM;       turn_random
    when ROUTE_TURN_TOWARD;       turn_toward_player
    when ROUTE_TURN_AWAY;         turn_away_from_player
    when ROUTE_SWITCH_ON;         $game_switches[params[0]] = true
    when ROUTE_SWITCH_OFF;        $game_switches[params[0]] = false
    when ROUTE_CHANGE_SPEED;      @move_speed = params[0]
    when ROUTE_CHANGE_FREQ;       @move_frequency = params[0]
    when ROUTE_WALK_ANIME_ON;     @walk_anime = true
    when ROUTE_WALK_ANIME_OFF;    @walk_anime = false
    when ROUTE_STEP_ANIME_ON;     @step_anime = true
    when ROUTE_STEP_ANIME_OFF;    @step_anime = false
    when ROUTE_DIR_FIX_ON;        @direction_fix = true
    when ROUTE_DIR_FIX_OFF;       @direction_fix = false
    when ROUTE_THROUGH_ON;        @through = true
    when ROUTE_THROUGH_OFF;       @through = false
    when ROUTE_TRANSPARENT_ON;    @transparent = true
    when ROUTE_TRANSPARENT_OFF;   @transparent = false
    when ROUTE_CHANGE_GRAPHIC;    set_graphic(params[0], params[1])
    when ROUTE_CHANGE_OPACITY;    @opacity = params[0]
    when ROUTE_CHANGE_BLENDING;   @blend_type = params[0]
    when ROUTE_SCRIPT
      # Get Script Call
      call = params.at(0).dup           
      # If Script Call Matches Move times Method
      if call =~ /move_times\(.+,.+\)/i
        # Replace Move times by Instant Move Times
        call.sub!(/move_times/, 'instant_move_times')
      end
      # Evaluate Script Call
      eval(call)     
    end
  end
  #--------------------------------------------------------------------------
  # * Move Instantly by Times
  #    code  : move code
  #    times : times to move using code
  #--------------------------------------------------------------------------
  def instant_move_times(code, times)
    # Return if Instant Move Route is nil
    return if @instant_move_route.nil?
    # Convert Code From Symbol to Integer if applicable
    code = SYMBOL_CODE[code] if code.is_a?(Symbol)
    # Add Move Route Code
    times.times {|i| @instant_move_route.insert(0, RPG::MoveCommand.new(code))}
  end 
end


Credit


  • TDS


Support


On this topic.

Known Compatibility Issues

There may be some with custom script calls in events. Although it's pretty easy to make your own instant versions of certain script calls.

Author's Notes


The indexing sytem can take a bit of getting used to, which is why it's good to have the RGSS console turned on to see which event command index is currently running.

Terms of Use

Only for use in non-commercial games.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Most Mature Member2010 Favourite Staff Member
That's pretty neat TDS. It's definitely annoying to debug really long events, and this seems like it would help.