Advertisement
DrDhoom

[RGSS2] DIR8

Feb 8th, 2015
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.84 KB | None | 0 0
  1. module Dhoom
  2.   module DIR8
  3.     Filename = "%s_1"
  4.   end
  5. end
  6.  
  7. class Game_Character
  8.   attr_accessor :diagonal
  9.  
  10.   alias dhoom_dir8_gmplayer_initialize initialize
  11.   def initialize
  12.     dhoom_dir8_gmplayer_initialize
  13.     @diagonal = false
  14.   end
  15. end
  16.  
  17. class Game_Player < Game_Character  
  18.  
  19.   def move_by_input
  20.     return unless movable?
  21.     return if $game_map.interpreter.running?
  22.     case Input.dir8
  23.     when 2;  move_down
  24.     when 4;  move_left
  25.     when 6;  move_right
  26.     when 8;  move_up
  27.     when 7;  move_upper_left
  28.     when 9;  move_upper_right
  29.     when 1;  move_lower_left
  30.     when 3;  move_lower_right
  31.     end
  32.   end
  33.  
  34.   alias dhoom_dir8_gmplayer_set_direction set_direction
  35.   def set_direction(dir)
  36.     dhoom_dir8_gmplayer_set_direction(dir)
  37.     @diagonal = [1,3,7,9].include?(dir)
  38.   end
  39.  
  40.   def move_lower_left    
  41.     set_direction(1)
  42.     if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
  43.        (passable?(@x-1, @y) and passable?(@x-1, @y+1))
  44.       @x -= 1
  45.       @y += 1
  46.       increase_steps
  47.       @move_failed = false
  48.     else
  49.       @move_failed = true
  50.     end
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # * Move Lower Right
  54.   #--------------------------------------------------------------------------
  55.   def move_lower_right
  56.     set_direction(3)
  57.     if (passable?(@x, @y+1) and passable?(@x+1, @y+1)) or
  58.        (passable?(@x+1, @y) and passable?(@x+1, @y+1))
  59.       @x += 1
  60.       @y += 1
  61.       increase_steps
  62.       @move_failed = false
  63.     else
  64.       @move_failed = true
  65.     end
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # * Move Upper Left
  69.   #--------------------------------------------------------------------------
  70.   def move_upper_left
  71.     set_direction(7)
  72.     if (passable?(@x, @y-1) and passable?(@x-1, @y-1)) or
  73.        (passable?(@x-1, @y) and passable?(@x-1, @y-1))
  74.       @x -= 1
  75.       @y -= 1
  76.       increase_steps
  77.       @move_failed = false
  78.     else
  79.       @move_failed = true
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # * Move Upper Right
  84.   #--------------------------------------------------------------------------
  85.   def move_upper_right
  86.     set_direction(9)
  87.     if (passable?(@x, @y-1) and passable?(@x+1, @y-1)) or
  88.        (passable?(@x+1, @y) and passable?(@x+1, @y-1))
  89.       @x += 1
  90.       @y -= 1
  91.       increase_steps
  92.       @move_failed = false
  93.     else
  94.       @move_failed = true
  95.     end
  96.   end
  97. end
  98.  
  99. class Sprite_Character < Sprite_Base  
  100.   def update
  101.     super
  102.     update_bitmap
  103.     self.visible = (not @character.transparent)
  104.     update_src_rect
  105.     self.x = @character.screen_x
  106.     self.y = @character.screen_y
  107.     self.z = @character.screen_z
  108.     self.opacity = @character.opacity
  109.     self.blend_type = @character.blend_type
  110.     self.bush_depth = @character.bush_depth
  111.     update_balloon
  112.     if @character.animation_id != 0
  113.       animation = $data_animations[@character.animation_id]
  114.       start_animation(animation)
  115.       @character.animation_id = 0
  116.     end
  117.     if @character.balloon_id != 0
  118.       @balloon_id = @character.balloon_id
  119.       start_balloon
  120.       @character.balloon_id = 0
  121.     end
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # * Get tile set image that includes the designated tile
  125.   #     tile_id : Tile ID
  126.   #--------------------------------------------------------------------------
  127.   def tileset_bitmap(tile_id)
  128.     set_number = tile_id / 256
  129.     return Cache.system("TileB") if set_number == 0
  130.     return Cache.system("TileC") if set_number == 1
  131.     return Cache.system("TileD") if set_number == 2
  132.     return Cache.system("TileE") if set_number == 3
  133.     return nil
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # * Update Transfer Origin Bitmap
  137.   #--------------------------------------------------------------------------
  138.   def update_bitmap
  139.     if @tile_id != @character.tile_id or
  140.        @character_name != @character.character_name or
  141.        @character_index != @character.character_index or
  142.        @character_diagonal != @character.diagonal      
  143.       @tile_id = @character.tile_id
  144.       @character_name = @character.character_name
  145.       @character_index = @character.character_index
  146.       @character_diagonal = @character.diagonal
  147.       if @tile_id > 0
  148.         sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
  149.         sy = @tile_id % 256 / 8 % 16 * 32;
  150.         self.bitmap = tileset_bitmap(@tile_id)
  151.         self.src_rect.set(sx, sy, 32, 32)
  152.         self.ox = 16
  153.         self.oy = 32
  154.       else
  155.         if @character_diagonal
  156.           self.bitmap = Cache.character(sprintf(Dhoom::DIR8::Filename, @character_name))
  157.         else
  158.           self.bitmap = Cache.character(@character_name)
  159.         end
  160.         sign = @character_name[/^[\!\$]./]
  161.         if sign != nil and sign.include?('$')
  162.           @cw = bitmap.width / 3
  163.           @ch = bitmap.height / 4
  164.         else
  165.           @cw = bitmap.width / 12
  166.           @ch = bitmap.height / 8
  167.         end
  168.         self.ox = @cw / 2
  169.         self.oy = @ch
  170.       end
  171.     end
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # * Update Transfer Origin Rectangle
  175.   #--------------------------------------------------------------------------
  176.   def update_src_rect
  177.     if @tile_id == 0
  178.       index = @character.character_index
  179.       pattern = @character.pattern < 3 ? @character.pattern : 1
  180.       sx = (index % 4 * 3 + pattern) * @cw
  181.       if @character_diagonal
  182.         d = @character.direction
  183.         d -= 2 if @character.direction > 5
  184.         sy = (index / 4 * 4 + (d - 1) / 2) * @ch
  185.       else
  186.         sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  187.       end
  188.       self.src_rect.set(sx, sy, @cw, @ch)
  189.     end
  190.   end
  191. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement