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.
Lufia II Enemy movement

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
Lufia II Enemy movement
Version: 1.0
Author: TDS
Date: April 23, 2011

Version History


  • Version 1.0 04.23.2011 - Public release.

Planned Future Versions

If requested I will improve the movement methods for the events that move with the player.

Description


This script replicates the enemy movement alongside the player on map from the game "Lufia II".
It makes events move with the player.

Features

  • Makes events on map move with the player.
  • Allows you to stun events for such situations as escapes or others.

Screenshots

Example Image:

Instructions

To make an event move with the player add this to the event's name.

Code: [Select]
PLAYER_MOVE: STEPS_MOVE STEPS_TO

STEPS_MOVE = Steps to move once the player moves.
STEPS_TO   = Steps the player needs to make before this event can move.

Example:
Code: [Select]
PLAYER_MOVE: 1 1

To stun an event so it will not move with the character use this in a call script.

Code: [Select]
player_move_stun(#)
# = Number of steps to stun the event for.


Script

Code: [Select]
#==============================================================================
# ** TDS Lufia II Enemy Move
#    Ver: 1.0
#------------------------------------------------------------------------------
#  * Description:
#  This script replicates the enemy movement alongside the player on map from
#  the game "Lufia II".
#------------------------------------------------------------------------------
#  * Features:
#  Makes events on map move with the player.
#
#  Allows you to stun events for such situations as escapes or others.
#------------------------------------------------------------------------------
#  * Instructions:
#  To make an event move with the player add this to the event's name.
#
#  PLAYER_MOVE: STEPS_MOVE STEPS_TO
#
#  STEPS_MOVE = Steps to move once the player moves.
#  STEPS_TO   = Steps the player needs to make before this event can move.
#
#  Example:
#
#  PLAYER_MOVE: 1 1
#------------------------------------------------------------------------------
#  * Notes:
#   The script will work with the default movement type of the event.
#   (Random, Approach, Custom).
#
#   For enemies that move more than once, it would be a good idea to increase
#   their normal walking speed.
#------------------------------------------------------------------------------
#  * New Methods:
#  Game_Map:
#  - update_player_move_events
#    ^ Method used to update events in the player move events array.
#
#  Game_Event:
#  - player_move_stun(step_duration = 5)
#    ^ Method used to "stun" and prevent event movement by an amount of steps.
#  - decrease_player_move_counter(value = 1)
#    ^ Method used to decrease event move counter by a value.
#  - update_self_movement
#    ^ Added counter and movement with player. If the event is not an event that
#      moves with the player it does nothing to it.
#
#  Game_Interpreter:
#  - player_move_stun(step_duration = 5)
#    ^ Method added to allow easier use by a call script from the event.
#------------------------------------------------------------------------------
#  * Aliased Methods:
#  Game_Map:
#  - setup(map_id)
#    ^ Aliased to intialize the player moves events array.
#
#  Game_Event:
#  - initialize(map_id, event)
#    ^ Aliased to add move with player values, if applicable.
#
#  Game_Player:
#  - increase_steps
#    ^ Aliased to update events that move with the player.
#------------------------------------------------------------------------------
# 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.
#==============================================================================

#==============================================================================
# ** 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
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor   :player_move_events     # Events that move with player array 
  #--------------------------------------------------------------------------
  # * Alias Listings
  #-------------------------------------------------------------------------- 
  alias tds_lufia_enemy_move_game_map_setup          setup          unless $@       
  #--------------------------------------------------------------------------
  # * Setup
  #     map_id : map ID
  #--------------------------------------------------------------------------
  def setup(map_id)
    # Events that move with player array
    @player_move_events = []
    # Run Original Method
    tds_lufia_enemy_move_game_map_setup(map_id)   
  end 
  #--------------------------------------------------------------------------
  # * Update Player Move Events
  #--------------------------------------------------------------------------
  def update_player_move_events
    # Update Player Move Events and decrease their move counter   
    @player_move_events.each do |event| event.decrease_player_move_counter end
  end
end

#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
#  This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # * Alias Listings
  #-------------------------------------------------------------------------- 
  alias tds_lufia_enemy_move_game_event_initialize     initialize   unless $@   
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :player_based_movement           # Player Based Movement Flag
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     map_id : map ID
  #     event  : event (RPG::Event)
  #--------------------------------------------------------------------------
  def initialize(map_id, event)
    # Run Original Method
    tds_lufia_enemy_move_game_event_initialize(map_id, event)
    # Check for Player Based Movement flag
    @player_based_movement = @event.name.include?("PLAYER_MOVE")
    # If Player Based Movement
    if @player_based_movement
      # Check for Player Move values
      @event.name[/PLAYER_MOVE: ([0-9]+) ([-0-9]+)/]
      # Steps to move for player move
      @move_per_steps = $1 ==  nil ? 1 : $1.to_i
      # Completed step moves counter
      @completed_step_moves = 0
      # Steps counter max value
      @steps_counter_max = $2 == nil ?  1: $2.to_i
      # Steps counter current value
      @steps_counter = @steps_counter_max
      # Add this event to the array of events that move with the player
      $game_map.player_move_events << self
    end
  end
  #--------------------------------------------------------------------------
  # * Decrease Player Move Counter
  #--------------------------------------------------------------------------
  def player_move_stun(step_duration = 5)
    # Set Step Counter to Max plus step duration
    @steps_counter = @steps_counter_max + step_duration
  end
  #--------------------------------------------------------------------------
  # * Decrease Player Move Counter
  #    value : value to which decrease the steps counter
  #--------------------------------------------------------------------------
  def decrease_player_move_counter(value = 1)
    # Decrease step Counter
    @steps_counter -= value
    # Update Self Movement
    update_self_movement
  end
  #--------------------------------------------------------------------------
  # * Update During Self movement
  #--------------------------------------------------------------------------
  def update_self_movement
    # If Event self movement is based on players movement
    if @player_based_movement
      # If Steps Counter is 0 or less
      if @steps_counter <= 0
        # If not moving and completed move steps is the same as max move per steps         
        if !moving? and (@completed_step_moves != @move_per_steps)
          # Move Type Case
          case @move_type
          when 1;  move_random
          when 2;  move_toward_player
          when 3
            # If Move Route list code is 0 (Do nothing)
            if @move_route.list[@move_route_index].code == 0
              # Reduce completed steps by one (It will make it take an extra step)
              @completed_step_moves -= 1
            end
            # Move Type: Custom
            move_type_custom           
          end
          # Increase completed move steps value by 1
          @completed_step_moves += 1
        end       
        # If completed move steps is the same as move per steps
        if @completed_step_moves == @move_per_steps
          # Reset Step counter
          @steps_counter = @steps_counter_max
          # Reset completed step moves
          @completed_step_moves = 0
          return         
        end       
      end     
    else
      super
    end   
  end
end

#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
#  This class handles maps. It includes event starting determinants and map
# scrolling functions. The instance of this class is referenced by $game_map.
#==============================================================================

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # * Alias Listings
  #-------------------------------------------------------------------------- 
  alias tds_lufia_enemy_move_game_player_increase_steps increase_steps unless $@ 
  #--------------------------------------------------------------------------
  # * Increase Steps
  #--------------------------------------------------------------------------
  def increase_steps
    # Run Original Method
    tds_lufia_enemy_move_game_player_increase_steps
    # If Player is not being moved by an event
    if !@move_route_forcing
      # Update Player Move Events
      $game_map.update_player_move_events
    end   
  end
end

#==============================================================================
# ** 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
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     step_duration : duration of steps to stun for
  #--------------------------------------------------------------------------
  def player_move_stun(step_duration = 5)
    # Stun Event for duration of steps
    $game_map.events[@event_id].player_move_stun(step_duration)
  end
end

Credit


  • TDS

Support


On this topic.

Known Compatibility Issues

None that I'm aware of so far.

Author's Notes


For enemies that move more than once with the player it's suggested to increase their movement speed, that way they can keep up with the player.

Since this script uses the default movement settings for events it does not offer improvement in those areas. If requested I could improve the movements of player moved based events so they will move in more logical ways.

Restrictions

Only for use in non-commercial games. Also do not post this script anywhere else.

*
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
Great to see you releasing public scripts again TDS! You're too good to keep them all to yourself :P