Advertisement
LiTTleDRAgo

[RGSS] Event Size

Jan 31st, 2012
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.05 KB | None | 0 0
  1. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  2. # [Xp] Event Size
  3. # Version: 1.00
  4. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  5. #
  6. # Special Thanks to Toby Zerner
  7. #
  8. # Explanation :
  9. #
  10. #    Do you think it's strange for big creatures can walk in small alley?
  11. #
  12. #
  13. #  How to use :
  14. #
  15. #    Just place the script above main
  16. #
  17. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  18. if true
  19. #==============================================================================
  20. # ** Game_Character
  21. #------------------------------------------------------------------------------
  22. #  This class deals with characters. It's used as a superclass for the
  23. #  Game_Player and Game_Event classes.
  24. #==============================================================================
  25. class Game_Character
  26.   #--------------------------------------------------------------------------
  27.   # * Public Instance Variables
  28.   #--------------------------------------------------------------------------
  29.   attr_accessor :size_x, :size_y, :tiles_left, :tiles_right            
  30.   #--------------------------------------------------------------------------
  31.   # * Object Initialization
  32.   #--------------------------------------------------------------------------
  33.   alias event_size_init initialize
  34.   def initialize
  35.     event_size_init
  36.     setup_event_size
  37.   end  
  38.   #--------------------------------------------------------------------------
  39.   # * Setup Event Size
  40.   #--------------------------------------------------------------------------
  41.   def setup_event_size
  42.     @size_x, @size_y, @tiles_left, @tiles_right = 1, 1, 0, 0
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # * Size
  46.   #--------------------------------------------------------------------------
  47.   def size(x, y)
  48.     @size_x, @size_y, tiles_x = x, y, (x-1)/2
  49.     @tiles_left, @tiles_right  = tiles_x.floor, tiles_x.ceil
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # * Passable
  53.   #--------------------------------------------------------------------------
  54.   alias passable_size passable?
  55.   def passable?(x, y, d)
  56.     result = passable_size(x, y, d)
  57.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  58.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  59.     return false  unless $game_map.valid?(new_x, new_y)
  60.     return result if @through
  61.     @tiles_left = 0 if @tiles_left.nil?
  62.     @tiles_right = 0 if @tiles_right.nil?
  63.     (0...@size_x.to_i).each {|i|
  64.       return false unless $game_map.passable?(x-@tiles_left+i,y,d,self) &&
  65.              $game_map.passable?(new_x - @tiles_left + i, new_y, 10 - d)
  66.       (0...@size_y.to_i).each {|j|
  67.         return false unless $game_map.passable?(x, y - j, d, self) &&
  68.              $game_map.passable?(new_x, new_y - j, 10 - d) &&
  69.              $game_map.passable?(x - @tiles_left + i, y - j, d, self) &&
  70.              $game_map.passable?(new_x - @tiles_left + i, new_y - j, 10 - d)
  71.       }}
  72.     $game_map.events.each_value {|event|
  73.       return false if event_collide?(self, event, new_x, new_y)}
  74.     if event_collide?(self, $game_player, new_x, new_y)
  75.       return false if self.is_a?(Game_Event)
  76.     end
  77.     return result
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # * Passable
  81.   #--------------------------------------------------------------------------
  82.   def event_collide?(event1, event2, new_x, new_y)
  83.     return false if event1.id == event2.id
  84.     collision = false
  85.     event1.size_y = 1 if event1.size_y.nil?
  86.     event2.size_y = 1 if event2.size_y.nil?
  87.     event1.size_x = 1 if event1.size_x.nil?
  88.     event2.size_x = 1 if event2.size_x.nil?
  89.     event1.tiles_left  = 0 if event1.tiles_left.nil?
  90.     event2.tiles_left  = 0 if event2.tiles_left.nil?
  91.     event1.tiles_right = 0 if event1.tiles_right.nil?
  92.     event2.tiles_right = 0 if event2.tiles_right.nil?
  93.     ((new_y - (event1.size_y - 1))..new_y).each {|i|
  94.     ((event2.y - (event2.size_y - 1))..event2.y).each {|j|
  95.         if i == j && event1.character_name != "" && event2.character_name != ""
  96.           collision = true unless event1.through or event2.through
  97.         end }}
  98.     ((new_x - event1.tiles_left)..(new_x + event1.tiles_right)).each {|i|
  99.     ((event2.x - event2.tiles_left)..(event2.x + event2.tiles_right)).each {|j|
  100.         if i == j && event1.character_name != "" && event2.character_name != ""
  101.            return true unless event1.through or event2.through
  102.         end}} if collision
  103.     return false
  104.   end
  105. end
  106.  
  107. class Game_Player
  108. #==============================================================================
  109. # ** Game_Player
  110. #------------------------------------------------------------------------------
  111. #  This class handles the player. Its functions include event starting
  112. #  determinants and map scrolling. Refer to "$game_player" for the one
  113. #  instance of this class.
  114. #==============================================================================
  115.   #--------------------------------------------------------------------------
  116.   # * Same Position Starting Determinant
  117.   #--------------------------------------------------------------------------
  118.   alias check_size_here check_event_trigger_here
  119.   def check_event_trigger_here(triggers)
  120.     result = check_size_here(triggers) #false
  121.     return result if $game_system.map_interpreter.running?
  122.     $game_map.events.each_value {|event|
  123.       if @x >= event.x - event.tiles_left &&
  124.         @x <= event.x + event.tiles_right &&
  125.         @y >= event.y - (event.size_y - 1) && @y <= event.y &&
  126.         triggers.include?(event.trigger)
  127.         if !event.jumping? && event.over_trigger?
  128.           event.start
  129.           result = true
  130.         end
  131.       end }
  132.     return result
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # * Front Event Starting Determinant
  136.   #--------------------------------------------------------------------------
  137.   alias check_size_there check_event_trigger_there
  138.   def check_event_trigger_there(triggers)
  139.     result = check_size_there(triggers) #false
  140.     return result if $game_system.map_interpreter.running?
  141.     new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  142.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  143.     $game_map.events.each_value {|event|
  144.       if new_x >= event.x - event.tiles_left &&
  145.         new_x <= event.x + event.tiles_right &&
  146.         new_y >= event.y - (event.size_y - 1) && new_y <= event.y &&
  147.         triggers.include?(event.trigger)
  148.         if !event.jumping? && !event.over_trigger?
  149.           event.start
  150.           result = true
  151.         end
  152.       end }
  153.     if result == false
  154.       if $game_map.counter?(new_x, new_y)
  155.         new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  156.         new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  157.         $game_map.events.each_value {|event|
  158.           if new_x >= event.x - event.tiles_left &&
  159.             new_x <= event.x + event.tiles_right &&
  160.              new_y >= event.y - (event.size_y - 1) && new_y <= event.y &&
  161.              triggers.include?(event.trigger)
  162.             if !event.jumping? && !event.over_trigger?
  163.               event.start
  164.               result = true
  165.             end
  166.           end }
  167.       end
  168.     end
  169.     return result
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # * Touch Event Starting Determinant
  173.   #--------------------------------------------------------------------------
  174.   alias check_size_touch check_event_trigger_touch
  175.   def check_event_trigger_touch(x, y)
  176.     result = check_size_touch(x, y)# false
  177.     return result if $game_system.map_interpreter.running?
  178.     $game_map.events.each_value {|event|
  179.       if x >= event.x-event.tiles_left && x <= event.x+event.tiles_right &&
  180.          y >= event.y-(event.size_y - 1) && y <= event.y &&
  181.          [1,2].include?(event.trigger)
  182.         event.start
  183.         result = true
  184.       end }
  185.     return result
  186.   end
  187. end
  188. #==============================================================================
  189. # ** Sprite_Character
  190. #------------------------------------------------------------------------------
  191. #  This sprite is used to display the character.It observes the Game_Character
  192. #  class and automatically changes sprite conditions.
  193. #==============================================================================
  194. class Sprite_Character
  195.   #--------------------------------------------------------------------------
  196.   # * Frame Update
  197.   #--------------------------------------------------------------------------
  198.   alias update_size update
  199.   def update
  200.     update_size
  201.     update_size_events
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # * Update Size Events
  205.   #--------------------------------------------------------------------------
  206.   def update_size_events
  207.     return unless @character.size_x == 1 && @character.size_y == 1
  208.     @character.size(self.bitmap.width/128, self.bitmap.height/160)
  209.   end
  210. end
  211. end
  212.  
  213. $event_size = true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement