Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- # [Xp] Event Size
- # Version: 1.00
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- #
- # Special Thanks to Toby Zerner
- #
- # Explanation :
- #
- # Do you think it's strange for big creatures can walk in small alley?
- #
- #
- # How to use :
- #
- # Just place the script above main
- #
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- if true
- #==============================================================================
- # ** Game_Character
- #------------------------------------------------------------------------------
- # This class deals with characters. It's used as a superclass for the
- # Game_Player and Game_Event classes.
- #==============================================================================
- class Game_Character
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :size_x, :size_y, :tiles_left, :tiles_right
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- alias event_size_init initialize
- def initialize
- event_size_init
- setup_event_size
- end
- #--------------------------------------------------------------------------
- # * Setup Event Size
- #--------------------------------------------------------------------------
- def setup_event_size
- @size_x, @size_y, @tiles_left, @tiles_right = 1, 1, 0, 0
- end
- #--------------------------------------------------------------------------
- # * Size
- #--------------------------------------------------------------------------
- def size(x, y)
- @size_x, @size_y, tiles_x = x, y, (x-1)/2
- @tiles_left, @tiles_right = tiles_x.floor, tiles_x.ceil
- end
- #--------------------------------------------------------------------------
- # * Passable
- #--------------------------------------------------------------------------
- alias passable_size passable?
- def passable?(x, y, d)
- result = passable_size(x, y, d)
- new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
- new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
- return false unless $game_map.valid?(new_x, new_y)
- return result if @through
- @tiles_left = 0 if @tiles_left.nil?
- @tiles_right = 0 if @tiles_right.nil?
- (0...@size_x.to_i).each {|i|
- return false unless $game_map.passable?(x-@tiles_left+i,y,d,self) &&
- $game_map.passable?(new_x - @tiles_left + i, new_y, 10 - d)
- (0...@size_y.to_i).each {|j|
- return false unless $game_map.passable?(x, y - j, d, self) &&
- $game_map.passable?(new_x, new_y - j, 10 - d) &&
- $game_map.passable?(x - @tiles_left + i, y - j, d, self) &&
- $game_map.passable?(new_x - @tiles_left + i, new_y - j, 10 - d)
- }}
- $game_map.events.each_value {|event|
- return false if event_collide?(self, event, new_x, new_y)}
- if event_collide?(self, $game_player, new_x, new_y)
- return false if self.is_a?(Game_Event)
- end
- return result
- end
- #--------------------------------------------------------------------------
- # * Passable
- #--------------------------------------------------------------------------
- def event_collide?(event1, event2, new_x, new_y)
- return false if event1.id == event2.id
- collision = false
- event1.size_y = 1 if event1.size_y.nil?
- event2.size_y = 1 if event2.size_y.nil?
- event1.size_x = 1 if event1.size_x.nil?
- event2.size_x = 1 if event2.size_x.nil?
- event1.tiles_left = 0 if event1.tiles_left.nil?
- event2.tiles_left = 0 if event2.tiles_left.nil?
- event1.tiles_right = 0 if event1.tiles_right.nil?
- event2.tiles_right = 0 if event2.tiles_right.nil?
- ((new_y - (event1.size_y - 1))..new_y).each {|i|
- ((event2.y - (event2.size_y - 1))..event2.y).each {|j|
- if i == j && event1.character_name != "" && event2.character_name != ""
- collision = true unless event1.through or event2.through
- end }}
- ((new_x - event1.tiles_left)..(new_x + event1.tiles_right)).each {|i|
- ((event2.x - event2.tiles_left)..(event2.x + event2.tiles_right)).each {|j|
- if i == j && event1.character_name != "" && event2.character_name != ""
- return true unless event1.through or event2.through
- end}} if collision
- return false
- end
- end
- class Game_Player
- #==============================================================================
- # ** Game_Player
- #------------------------------------------------------------------------------
- # This class handles the player. Its functions include event starting
- # determinants and map scrolling. Refer to "$game_player" for the one
- # instance of this class.
- #==============================================================================
- #--------------------------------------------------------------------------
- # * Same Position Starting Determinant
- #--------------------------------------------------------------------------
- alias check_size_here check_event_trigger_here
- def check_event_trigger_here(triggers)
- result = check_size_here(triggers) #false
- return result if $game_system.map_interpreter.running?
- $game_map.events.each_value {|event|
- if @x >= event.x - event.tiles_left &&
- @x <= event.x + event.tiles_right &&
- @y >= event.y - (event.size_y - 1) && @y <= event.y &&
- triggers.include?(event.trigger)
- if !event.jumping? && event.over_trigger?
- event.start
- result = true
- end
- end }
- return result
- end
- #--------------------------------------------------------------------------
- # * Front Event Starting Determinant
- #--------------------------------------------------------------------------
- alias check_size_there check_event_trigger_there
- def check_event_trigger_there(triggers)
- result = check_size_there(triggers) #false
- return result if $game_system.map_interpreter.running?
- new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
- new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
- $game_map.events.each_value {|event|
- if new_x >= event.x - event.tiles_left &&
- new_x <= event.x + event.tiles_right &&
- new_y >= event.y - (event.size_y - 1) && new_y <= event.y &&
- triggers.include?(event.trigger)
- if !event.jumping? && !event.over_trigger?
- event.start
- result = true
- end
- end }
- if result == false
- if $game_map.counter?(new_x, new_y)
- new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
- new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
- $game_map.events.each_value {|event|
- if new_x >= event.x - event.tiles_left &&
- new_x <= event.x + event.tiles_right &&
- new_y >= event.y - (event.size_y - 1) && new_y <= event.y &&
- triggers.include?(event.trigger)
- if !event.jumping? && !event.over_trigger?
- event.start
- result = true
- end
- end }
- end
- end
- return result
- end
- #--------------------------------------------------------------------------
- # * Touch Event Starting Determinant
- #--------------------------------------------------------------------------
- alias check_size_touch check_event_trigger_touch
- def check_event_trigger_touch(x, y)
- result = check_size_touch(x, y)# false
- return result if $game_system.map_interpreter.running?
- $game_map.events.each_value {|event|
- if x >= event.x-event.tiles_left && x <= event.x+event.tiles_right &&
- y >= event.y-(event.size_y - 1) && y <= event.y &&
- [1,2].include?(event.trigger)
- event.start
- result = true
- end }
- return result
- end
- end
- #==============================================================================
- # ** Sprite_Character
- #------------------------------------------------------------------------------
- # This sprite is used to display the character.It observes the Game_Character
- # class and automatically changes sprite conditions.
- #==============================================================================
- class Sprite_Character
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- alias update_size update
- def update
- update_size
- update_size_events
- end
- #--------------------------------------------------------------------------
- # * Update Size Events
- #--------------------------------------------------------------------------
- def update_size_events
- return unless @character.size_x == 1 && @character.size_y == 1
- @character.size(self.bitmap.width/128, self.bitmap.height/160)
- end
- end
- end
- $event_size = true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement