Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # +++ MOG - PICKUP AND THROW (v1.2) +++
- #==============================================================================
- # By Moghunter
- # https://atelierrgss.wordpress.com/
- #==============================================================================
- # Sistema de carregar e arremessar eventos, útil para criar puzzles.
- #==============================================================================
- # Para definir quais os eventos serão arremessáveis basta nomear o evento
- # da seguinte forma.
- #
- # <ThrowX>
- #
- # X é a distância que o evento pode ser arremessado.
- #
- # Exemplo
- #
- # Event01<Throw4>
- #
- #==============================================================================
- # Sprite do personagem carregando o Objeto (Opcional)
- #==============================================================================
- # É preciso ter uma imagem do personagem em posição de carregar objeto e
- # nomear a imagem da sequinte forma.
- #
- # Character_Name + _Pickup
- #
- # Exemplo
- #
- # Actor1_Pickup.png
- #==============================================================================
- #==============================================================================
- # ● Histórico (Version History)
- #==============================================================================
- # v 1.2 - Melhor codificação.
- # v 1.1 - Melhor compatibilidade com scripts de terceiros.
- #==============================================================================
- module MOG_PICK_THROW
- #Altura do sprite do objeto carregado.
- SPRITE_POSITION = 20
- #Definição do Som quando o objeto é arremessado.
- THROW_SE = "Jump2"
- #Definição do Som quando o objeto é carregado.
- PICK_UP_SE = "Jump1"
- #ID da Switch que desativa o sistema de carregar.
- DISABLE_PICKUP_SWITCH_ID = 100
- # Definição do botão de carregar(Arremeçar) objetos.
- PICKUP_BUTTON = Input::C
- end
- #==============================================================================
- # ■ Game_Temp
- #==============================================================================
- class Game_Temp
- attr_accessor :pickup_lock
- attr_accessor :pickup_lock_time
- attr_accessor :character_pre_name
- attr_accessor :can_throw
- attr_accessor :throw_position
- #--------------------------------------------------------------------------
- # ● initialize
- #--------------------------------------------------------------------------
- alias mog_pick_initialize initialize
- def initialize
- @pickup_lock = false
- @pickup_lock_time = 0
- @character_pre_name = ""
- @can_throw = true
- @throw_position = []
- mog_pick_initialize
- end
- end
- #==============================================================================
- # ■ Game_Event
- #==============================================================================
- class Game_Event < Game_Character
- attr_reader :jump_count
- attr_accessor :x
- attr_accessor :y
- attr_accessor :bush_depth
- attr_accessor :direction
- #--------------------------------------------------------------------------
- # ● initialize
- #--------------------------------------------------------------------------
- alias mog_pickup_initialize initialize
- def initialize(map_id, event)
- mog_pickup_initialize(map_id, event)
- @throw_active = false
- if event.name =~ /<Throw(\d+)>/i
- @throw = $1.to_i
- end
- end
- end
- #==============================================================================
- # ■ Game_CharacterBase
- #==============================================================================
- class Game_CharacterBase
- attr_accessor :throw_active
- attr_accessor :throw
- #--------------------------------------------------------------------------
- # ● initialize
- #--------------------------------------------------------------------------
- alias x_pickup_initialize initialize
- def initialize
- @throw_active = false
- @throw = 0
- x_pickup_initialize
- end
- end
- #==============================================================================
- # ■ Game_Character
- #==============================================================================
- class Game_Character < Game_CharacterBase
- #--------------------------------------------------------------------------
- # ● Throw Action
- #--------------------------------------------------------------------------
- def throw_action(range)
- moveto($game_player.x,$game_player.y)
- jump_range = range
- moveto($game_player.x,$game_player.y)
- range.times do
- unless jumping?
- case $game_player.direction
- when 6
- jump(jump_range,0) if throw_range?(jump_range,0,jump_range)
- when 4
- jump(-jump_range,0) if throw_range?(-jump_range,0,jump_range)
- when 2
- jump(0,jump_range) if throw_range?(0,jump_range,jump_range)
- when 8
- jump(0,-jump_range) if throw_range?(0,-jump_range,jump_range)
- end
- if @x == $game_player.x and @y == $game_player.y and jump_range == 1
- $game_temp.can_throw = false
- end
- jump_range -= 1
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● Throw Range?
- #--------------------------------------------------------------------------
- def throw_range?(x, y,range )
- x = $game_player.x
- y = $game_player.y
- case $game_player.direction
- when 2
- y += range
- when 6
- x += range
- when 4
- x -= range
- when 8
- y -= range
- end
- return false if collide_with_characters?(x, y)
- return false unless map_passable?(x, y,$game_player.direction)
- return true
- end
- end
- #==============================================================================
- # ■ Game_Player
- #==============================================================================
- class Game_Player < Game_Character
- include MOG_PICK_THROW
- #--------------------------------------------------------------------------
- # ● Update Player Before Movement
- #--------------------------------------------------------------------------
- alias pickup_update update
- def update
- pickup_update
- update_pickup_command
- end
- #--------------------------------------------------------------------------
- # ● Update Pickup Command
- #--------------------------------------------------------------------------
- def update_pickup_command
- $game_temp.pickup_lock_time -= 1 if $game_temp.pickup_lock_time > 0
- return if $game_temp.pickup_lock_time > 0
- if Input.trigger?(PICKUP_BUTTON)
- throw_event if can_check_throw_event?
- check_event_pickup([0,1,2]) if can_check_pickup_event?
- end
- end
- #--------------------------------------------------------------------------
- # ● Check Action Event
- #--------------------------------------------------------------------------
- alias mog_pickup_check_action_event check_action_event
- def check_action_event
- return if $game_temp.pickup_lock_time > 0 or $game_temp.pickup_lock
- mog_pickup_check_action_event
- end
- #--------------------------------------------------------------------------
- # ● Can Check Pickup Event
- #--------------------------------------------------------------------------
- def can_check_pickup_event?
- return false if $game_temp.pickup_lock
- return false if $game_temp.pickup_lock_time > 0
- return false if $game_map.interpreter.running?
- return false if $game_message.visible
- return false if $game_switches[DISABLE_PICKUP_SWITCH_ID]
- return true
- end
- #--------------------------------------------------------------------------
- # ● Can Check Throw Event
- #--------------------------------------------------------------------------
- def can_check_throw_event?
- return false if $game_temp.pickup_lock == false
- return false if $game_temp.pickup_lock_time > 0
- return false if $game_map.interpreter.running?
- return false if $game_message.visible
- return false if $game_switches[DISABLE_PICKUP_SWITCH_ID]
- return true
- end
- #--------------------------------------------------------------------------
- # ● Reserve Transfer
- #--------------------------------------------------------------------------
- alias mog_pickup_reserve_transfer reserve_transfer
- def reserve_transfer(map_id, x, y, direction)
- if $game_temp.pickup_lock == true
- for event in $game_map.events.values
- if event.throw_active == true
- event.throw_active = false
- event.moveto(@x,@y)
- case @direction
- when 2
- event.jump(0,-1)
- when 4
- event.jump(1,0)
- when 6
- event.jump(-1,0)
- when 8
- event.jump(0,1)
- end
- end
- end
- $game_temp.pickup_lock = false
- $game_temp.pickup_lock_time = 0
- @character_name = $game_temp.character_pre_name
- end
- mog_pickup_reserve_transfer(map_id, x, y, direction)
- end
- #--------------------------------------------------------------------------
- # ● Movable?
- #--------------------------------------------------------------------------
- alias mog_pickup_movable movable?
- def movable?
- return false if $game_temp.pickup_lock_time > 0
- mog_pickup_movable
- end
- #--------------------------------------------------------------------------
- # ● Throw Event
- #--------------------------------------------------------------------------
- def throw_event
- for event in $game_map.events.values
- if event.throw_active and not jumping?
- $game_temp.can_throw = true
- event.throw_action(event.throw)
- return if $game_temp.can_throw == false
- $game_temp.pickup_lock_time = event.jump_count
- $game_temp.throw_position[0] = event.x
- $game_temp.throw_position[1] = event.y
- event.throw_active = false
- $game_temp.pickup_lock = false
- Audio.se_play("Audio/SE/" + THROW_SE, 100, 100)
- @character_name = $game_temp.character_pre_name
- break
- end
- end
- if event == nil
- $game_map.reset_pickup
- end
- end
- #--------------------------------------------------------------------------
- # ● Check Event Pickup
- #--------------------------------------------------------------------------
- def check_event_pickup(triggers)
- front_x = $game_map.x_with_direction(@x, @direction)
- front_y = $game_map.y_with_direction(@y, @direction)
- for event in $game_map.events_xy(front_x, front_y)
- if event.throw > 0 and not jumping?
- event.throw_active = true
- $game_temp.pickup_lock = true
- event.jump(0,0)
- $game_temp.pickup_lock_time = event.jump_count
- event.x = $game_player.x
- event.y = $game_player.y
- Audio.se_play("Audio/SE/" + PICK_UP_SE, 100, 100)
- $game_temp.character_pre_name = @character_name
- make_pickup_pose
- break
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● Img Pickup Exist?
- #--------------------------------------------------------------------------
- def img_pickup_exist?
- Cache.character(@character_name + "_Pickup") rescue return false
- end
- #--------------------------------------------------------------------------
- # ● Make Pickup Pose
- #--------------------------------------------------------------------------
- def make_pickup_pose
- @character_name = @character_name + "_Pickup" if img_pickup_exist?
- end
- end
- #==============================================================================
- # ■ Sprite_Character
- #==============================================================================
- class Sprite_Character < Sprite_Base
- include MOG_PICK_THROW
- #--------------------------------------------------------------------------
- # ● Update X Effects
- #--------------------------------------------------------------------------
- alias mog_pickup_update_position update_position
- def update_position
- mog_pickup_update_position
- update_pickup_position if can_pickup_position?
- end
- #--------------------------------------------------------------------------
- # ● Can Pickup Position
- #--------------------------------------------------------------------------
- def can_pickup_position?
- return false if $game_temp.pickup_lock_time > 0
- return false if $game_temp.pickup_lock == false
- return false if @character.throw_active == false
- return false if @character.is_a?(Game_Player)
- return false if @character.jumping?
- return true
- end
- #--------------------------------------------------------------------------
- # ● Update Pickup Position
- #--------------------------------------------------------------------------
- def update_pickup_position
- @character.x = $game_player.x
- @character.y = $game_player.y
- @character.bush_depth = 0
- unless @character.direction_fix
- @character.direction = $game_player.direction
- end
- self.x = $game_player.screen_x
- self.y = $game_player.screen_y - SPRITE_POSITION
- self.z = $game_player.screen_z + 1
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- class Scene_Map < Scene_Base
- #--------------------------------------------------------------------------
- # ● Call Menu
- #--------------------------------------------------------------------------
- alias mog_pickup_call_menu call_menu
- def call_menu
- return if $game_temp.pickup_lock == true
- mog_pickup_call_menu
- end
- end
- #==============================================================================
- # ■ Game Interpreter
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # ● Command 352
- #--------------------------------------------------------------------------
- alias mog_pickup_command_352 command_352
- def command_352
- return if $game_temp.pickup_lock == true
- mog_pickup_command_352
- end
- end
- #==============================================================================
- # ■ Game_Map
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ● Setup
- #--------------------------------------------------------------------------
- alias mog_pickup_setup setup
- def setup(map_id)
- mog_pickup_setup(map_id)
- reset_pickup
- end
- #--------------------------------------------------------------------------
- # ● Reset Pickup
- #--------------------------------------------------------------------------
- def reset_pickup
- for i in $game_map.events.values
- if i.throw_active
- i.throw_active = false
- i.moveto($game_player.x,$game_player.y)
- i.jump(0,0)
- i.move_backward
- $game_player.character_name = $game_temp.character_pre_name
- end
- end
- $game_temp.pickup_lock_time = 0
- $game_temp.pickup_lock = false
- end
- end
- $mog_rgss3_pickup_and_throw = true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement