#============================================================================== # ** TDS Lock Character Movement # Ver: 1.0 #------------------------------------------------------------------------------ # * Description: # This script allows you to lock the movement of an event or character to a # specific region or terrain ID. #------------------------------------------------------------------------------ # * Features: # Restricting the movement of the Player or Events to Terrains or Regions. #------------------------------------------------------------------------------ # * Instructions: # To lock the movement of an event to a Region or Terrain put this in a note # in the event: # # <Movement_Region_Lock: ID> # <Movement_Terrain_Lock: ID> # # ID = Region or Terrain ID. (Can be multiple ones separated by ",".) # # Example: # # <Movement_Region_Lock: 1> or <Movement_Region_Lock: 1, 2, 3, 4> # <Movement_Terrain_Lock: 4> or <Movement_Terrain_Lock: 1, 2, 3, 5> # # # To lock the movement of the player to a Region or Terrain use this in a # script call: # # add_player_move_lock_region(ID) # add_player_move_lock_terrain(ID) # # ID = Region or Terrain ID. # # Example: # # add_player_move_lock_region(1) # add_player_move_lock_terrain(5) # # To remove the Region or Terrain movement lock of the player use this in a # script call: # # remove_player_move_lock_region(ID) # remove_player_move_lock_terrain(ID) # # ID = Region or Terrain ID. # # Example: # # remove_player_move_lock_region(1) # remove_player_move_lock_terrain(3) # # To completely clear all movement locks use this: # # clear_player_move_lock_region # clear_player_move_lock_terrain #------------------------------------------------------------------------------ # * Notes: # None. #------------------------------------------------------------------------------ # 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_Lock_Character_Movement] = true #============================================================================== # ** Game_CharacterBase #------------------------------------------------------------------------------ # This base class handles characters. It retains basic information, such as # coordinates and graphics, shared by all characters. #============================================================================== class Game_CharacterBase #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :move_lock_terrains, :move_lock_regions # Move Lock ID Arrays #-------------------------------------------------------------------------- # * Alias Listing #-------------------------------------------------------------------------- alias tds_lock_character_movement_game_characterbase_init_public_members init_public_members alias tds_lock_character_movement_game_characterbase_passable? passable? #-------------------------------------------------------------------------- # * Initialize Public Member Variables #-------------------------------------------------------------------------- def init_public_members(*args, &block) # Run Original Method tds_lock_character_movement_game_characterbase_init_public_members(*args, &block) # Initialize Move Lock Terrain & Region Arrays @move_lock_terrains = [] ; @move_lock_regions = [] end #-------------------------------------------------------------------------- # * Determine if Passable # d : Direction (2,4,6,8) #-------------------------------------------------------------------------- def passable?(x, y, d) x2 = $game_map.round_x_with_direction(x, d) y2 = $game_map.round_y_with_direction(y, d) # Return False if Movement at Coordinates is not lock passable return false if !debug_through? and !movement_lock_passable?(x2, y2) # Run Original Method tds_lock_character_movement_game_characterbase_passable?(x, y, d) end #-------------------------------------------------------------------------- # * Determine if Movement is locked by Terrain or Region #-------------------------------------------------------------------------- def movement_locked? ; (!@move_lock_terrains.empty? or !@move_lock_regions.empty?) end #-------------------------------------------------------------------------- # * Determine if Coordinates are Passable if movement is locked #-------------------------------------------------------------------------- def movement_lock_passable?(x = @x, y = @y) return true if !movement_locked? return false if !@move_lock_regions.empty? and !@move_lock_regions.include?($game_map.region_id(x, y)) return false if !@move_lock_terrains.empty? and !@move_lock_terrains.include?($game_map.terrain_tag(x, y)) return true end #-------------------------------------------------------------------------- # * Add Movement Lock Region #-------------------------------------------------------------------------- def add_move_lock_region(region_id) ; @move_lock_regions.push(region_id).uniq! end #-------------------------------------------------------------------------- # * Remove Movement Lock Region #-------------------------------------------------------------------------- def remove_move_lock_region(region_id) ; @move_lock_regions.delete(region_id) end #-------------------------------------------------------------------------- # * Add Movement Locked Terrain #-------------------------------------------------------------------------- def add_move_lock_terrain(terrain_id) ; @move_lock_terrains.push(terrain_id).uniq! end #-------------------------------------------------------------------------- # * Remove Movement Locked Terrain #-------------------------------------------------------------------------- def remove_move_lock_terrain(terrain_id) ; @move_lock_terrains.delete(terrain_id) end end #============================================================================== # ** Game_Event #------------------------------------------------------------------------------ # This class handles events. Functions include event page switching via # condition determinants and running parallel process events. Used within the # Game_Map class. #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # * Alias Listing #-------------------------------------------------------------------------- alias tds_lock_character_movement_game_event_clear_page_settings clear_page_settings alias tds_lock_character_movement_game_event_setup_page_settings setup_page_settings #-------------------------------------------------------------------------- # * Set Up Event Page Settings #-------------------------------------------------------------------------- def setup_page_settings(*args, &block) # Run Original Method tds_lock_character_movement_game_event_setup_page_settings(*args, &block) # Run Original Method setup_page_movement_lock_settings end #-------------------------------------------------------------------------- # * Clear Event Page Settings #-------------------------------------------------------------------------- def clear_page_settings(*args, &block) # Run Original Method tds_lock_character_movement_game_event_clear_page_settings(*args, &block) # Initialize Move Lock Terrain & Region Arrays @move_lock_terrains = [] ; @move_lock_regions = [] end #-------------------------------------------------------------------------- # * Set Up Event Page Movement Lock Settings #-------------------------------------------------------------------------- def setup_page_movement_lock_settings # Initialize Move Lock Terrain & Region Arrays @move_lock_terrains = [] ; @move_lock_regions = [] # Get All Page Comment Text comment_text = @list.select {|c| [108, 408].include? (c.code)}.collect {|c| c.parameters}.join # Return if Comment Text is empty return if comment_text.empty? # Scan Comment Text for Movement Region Lock comment_text.scan(/<Movement_Region_lock: (.+?)>/i).each {|m,i| # Add Matched Region ID's to Move Lock Region m.split(/,/).each {|id| add_move_lock_region(id.to_i)} } # Scan Comment Text for Movement Terrain Lock comment_text.scan(/<Movement_Terrain_lock: (.+?)>/i).each {|m,i| # Add Matched Terrain ID's to Move Lock Region m.split(/,/).each {|id| add_move_lock_terrain(id.to_i)} } 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 #-------------------------------------------------------------------------- # * Add Player Move Lock Region #-------------------------------------------------------------------------- def add_player_move_lock_region(id) ; $game_player.add_move_lock_region(id) end #-------------------------------------------------------------------------- # * Remove Player Move Lock Region #-------------------------------------------------------------------------- def remove_player_move_lock_region(id) ; $game_player.remove_move_lock_region(id) end #-------------------------------------------------------------------------- # * Clear All Player Move Lock Region #-------------------------------------------------------------------------- def clear_player_move_lock_region ; $game_player.move_lock_regions.clear end #-------------------------------------------------------------------------- # * Add Player Move Lock Terrain #-------------------------------------------------------------------------- def add_player_move_lock_terrain(id) ; $game_player.add_move_lock_terrain(id) end #-------------------------------------------------------------------------- # * Remove Player Move Lock Terrain #-------------------------------------------------------------------------- def remove_player_move_lock_terrain(id) ; $game_player.remove_move_lock_terrain(id) end #-------------------------------------------------------------------------- # * Clear All Player Move Lock Terrain #-------------------------------------------------------------------------- def clear_player_move_lock_terrain ; $game_player.move_lock_terrains.clear end end