molegato

Side/Top Characters

Feb 6th, 2012
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.80 KB | None | 0 0
  1. #==============================================================================
  2. # SIDE/TOP CHARACTERS
  3. # Author Molegato
  4. # Version 2.2
  5. # (V1 was called 'Lateral Characters')
  6. #------------------------------------------------------------------------------
  7. # Only characters with @ in their name will be sideview
  8. # Only characters with # in their name will be topview
  9. # A character with both in the name will be sideview, but will rotate
  10. # when moving diagonally. Great for flying/diving sideview
  11. #==============================================================================
  12.  
  13. module SIDETOP_CHARS
  14.   USE_8_DIR = true
  15. end
  16.  
  17. #==============================================================================
  18. # ■ Game_CharacterBase
  19. #==============================================================================
  20.  
  21. class Game_CharacterBase
  22.   attr_accessor :custom
  23.   attr_accessor :sideview
  24.   attr_accessor :topview
  25.   attr_reader   :direction
  26.  
  27.   alias sideviewinitialize initialize
  28.   def initialize
  29.     @sideview=false
  30.     @topview=false
  31.     @top_direction=0
  32.     sideviewinitialize
  33.   end
  34.  
  35.   alias sideviewupdate_anime_count update_anime_count
  36.   def update_anime_count  
  37.     if @sideview or @topview
  38.       @anime_count += 2
  39.     else
  40.       sideviewupdate_anime_count
  41.     end
  42.   end
  43.  
  44.   alias sideviewupdate_anime_pattern update_anime_pattern
  45.   def update_anime_pattern
  46.     if @sideview or @topview
  47.       if !@step_anime && @stop_count > 0
  48.         @pattern = @original_pattern
  49.       else
  50.         @pattern += 1
  51.         if @pattern>=8
  52.           @pattern=1
  53.         end
  54.       end
  55.     else
  56.       sideviewupdate_anime_pattern
  57.     end
  58.   end
  59.  
  60. end
  61.  
  62. #==============================================================================
  63. # ■ Game_CharacterBase
  64. #==============================================================================
  65. class Game_CharacterBase
  66.     def movedirection
  67.       return @angledirection
  68.     end
  69.    
  70.     alias sideviewset_direction set_direction
  71.     def set_direction(d)
  72.       sideviewset_direction(d)
  73.       @angledirection = @direction
  74.     end
  75.    
  76.     alias sideviewmove_straight move_straight
  77.     def move_straight(d, turn_ok = true)
  78.       sideviewmove_straight(d, turn_ok)
  79.       @angledirection = @direction
  80.     end
  81.    
  82.     alias sideviewmove_diagonal move_diagonal
  83.     def move_diagonal(horz, vert)
  84.       sideviewmove_diagonal(horz, vert)
  85.       if horz==4 and vert==2
  86.         @angledirection=1
  87.       end
  88.       if horz==6 and vert==2
  89.         @angledirection=3
  90.       end
  91.       if horz==4 and vert==8
  92.         @angledirection=7
  93.       end
  94.       if horz==6 and vert==8
  95.         @angledirection=9
  96.       end
  97.     end
  98.  
  99. end
  100.  
  101. #==============================================================================
  102. # ■ Game_Player
  103. #==============================================================================
  104. class Game_Player < Game_Character
  105.  
  106.   alias sideviewmove_by_input move_by_input
  107.   def move_by_input
  108.     if SIDETOP_CHARS::USE_8_DIR
  109.       return if !movable? || $game_map.interpreter.running?
  110.       if Input.dir8 > 0
  111.         if Input.dir8==2 or Input.dir8==4 or Input.dir8==6 or Input.dir8==8
  112.           move_straight(Input.dir4)
  113.         else
  114.           if Input.dir8==1
  115.             move_diagonal(4, 2)
  116.           end
  117.           if Input.dir8==3
  118.             move_diagonal(6, 2)
  119.           end
  120.           if Input.dir8==7
  121.             move_diagonal(4, 8)
  122.           end
  123.           if Input.dir8==9
  124.             move_diagonal(6, 8)
  125.           end
  126.         end
  127.       end
  128.     else
  129.       sideviewmove_by_input
  130.     end
  131.   end
  132. end
  133.  
  134. #==============================================================================
  135. # ■ Sprite_Character
  136. #==============================================================================
  137.  
  138. class Sprite_Character < Sprite_Base
  139.   alias sideviewinitialize initialize
  140.   def initialize(viewport, character = nil)
  141.     @moving_time = 5
  142.     sideviewinitialize(viewport, character)
  143.   end
  144.  
  145.   alias sideviewset_character_bitmap set_character_bitmap
  146.   def set_character_bitmap
  147.     sideviewset_character_bitmap
  148.     if @character_name.include?('@')
  149.       @cw = bitmap.width / 8
  150.       @ch = bitmap.height / 2
  151.       @sideview=true
  152.     else
  153.       @sideview=false
  154.     end
  155.     if @character_name.include?('#')
  156.       @cw = bitmap.width / 8
  157.       @ch = bitmap.height / 2
  158.       @topview=true
  159.     else
  160.       @topview=false
  161.     end
  162.     self.ox = @cw / 2
  163.     if @topview==true and @sideview==false
  164.       self.oy = @ch / 2
  165.     else
  166.       self.oy = @ch
  167.     end
  168.     @character.sideview=@sideview
  169.     @character.topview=@topview
  170.   end
  171.  
  172.   alias sideviewupdate_src_rect update_src_rect
  173.   def update_src_rect
  174.     @character.custom=@sideview
  175.     if @sideview==false and @topview==false
  176.       sideviewupdate_src_rect
  177.       self.mirror=false
  178.     else
  179.       if @character.moving?
  180.         @moving_time=5
  181.       else
  182.         @moving_time-=1
  183.       end
  184.       index = @character.character_index
  185.       pattern = @character.pattern < 8 ? @character.pattern : 1
  186.       sx = pattern*@cw
  187.       sy = 0
  188.       if @moving_time>0
  189.         sy+=@ch
  190.       end
  191.      
  192.       #mirror
  193.       if @sideview
  194.         if @character.direction==4 or @character.movedirection==7 or @character.movedirection==1
  195.           self.mirror=false
  196.         end
  197.         if @character.direction==6 or @character.movedirection==9 or @character.movedirection==3
  198.           self.mirror=true
  199.         end
  200.       end
  201.       #angle
  202.       if @topview
  203.         update_angle
  204.       end
  205.      
  206.       self.src_rect.set(sx, sy, @cw, @ch)
  207.     end
  208.   end
  209.  
  210.  
  211.   def update_angle
  212.       if not @angle
  213.         @angle = 0
  214.       end
  215.      
  216.       if @character.movedirection==2
  217.         @angle=270
  218.       end
  219.       if @character.movedirection==4
  220.         @angle=180
  221.       end
  222.       if @character.movedirection==6
  223.         @angle=0
  224.       end
  225.       if @character.movedirection==8
  226.         @angle=90
  227.       end
  228.  
  229.       if @character.movedirection==9
  230.         @angle=45
  231.       end
  232.       if @character.movedirection==7
  233.         @angle=135
  234.       end
  235.       if @character.movedirection==1
  236.         @angle=225
  237.       end
  238.       if @character.movedirection==3
  239.         @angle=315
  240.       end
  241.      
  242.       if @sideview
  243.         @angle=0
  244.         if @character.movedirection==9 or @character.movedirection==1
  245.           @angle=45
  246.         end
  247.         if @character.movedirection==7 or @character.movedirection==3
  248.           @angle=315
  249.         end
  250.       end
  251.      
  252.       if not @current_angle
  253.         @current_angle=@angle
  254.       end
  255.      
  256.       if [@angle,@current_angle].max-[@angle,@current_angle].min>180
  257.         if @angle>@current_angle
  258.           @angle-=360
  259.         else
  260.           @angle+=360
  261.         end
  262.       end
  263.      
  264.       @current_angle=(@current_angle*9+@angle)/10
  265.      
  266.       self.angle=@current_angle
  267.   end
  268. end
Advertisement
Add Comment
Please, Sign In to add comment