Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # SIDE/TOP CHARACTERS
- # Author Molegato
- # Version 2.2
- # (V1 was called 'Lateral Characters')
- #------------------------------------------------------------------------------
- # Only characters with @ in their name will be sideview
- # Only characters with # in their name will be topview
- # A character with both in the name will be sideview, but will rotate
- # when moving diagonally. Great for flying/diving sideview
- #==============================================================================
- module SIDETOP_CHARS
- USE_8_DIR = true
- end
- #==============================================================================
- # ■ Game_CharacterBase
- #==============================================================================
- class Game_CharacterBase
- attr_accessor :custom
- attr_accessor :sideview
- attr_accessor :topview
- attr_reader :direction
- alias sideviewinitialize initialize
- def initialize
- @sideview=false
- @topview=false
- @top_direction=0
- sideviewinitialize
- end
- alias sideviewupdate_anime_count update_anime_count
- def update_anime_count
- if @sideview or @topview
- @anime_count += 2
- else
- sideviewupdate_anime_count
- end
- end
- alias sideviewupdate_anime_pattern update_anime_pattern
- def update_anime_pattern
- if @sideview or @topview
- if !@step_anime && @stop_count > 0
- @pattern = @original_pattern
- else
- @pattern += 1
- if @pattern>=8
- @pattern=1
- end
- end
- else
- sideviewupdate_anime_pattern
- end
- end
- end
- #==============================================================================
- # ■ Game_CharacterBase
- #==============================================================================
- class Game_CharacterBase
- def movedirection
- return @angledirection
- end
- alias sideviewset_direction set_direction
- def set_direction(d)
- sideviewset_direction(d)
- @angledirection = @direction
- end
- alias sideviewmove_straight move_straight
- def move_straight(d, turn_ok = true)
- sideviewmove_straight(d, turn_ok)
- @angledirection = @direction
- end
- alias sideviewmove_diagonal move_diagonal
- def move_diagonal(horz, vert)
- sideviewmove_diagonal(horz, vert)
- if horz==4 and vert==2
- @angledirection=1
- end
- if horz==6 and vert==2
- @angledirection=3
- end
- if horz==4 and vert==8
- @angledirection=7
- end
- if horz==6 and vert==8
- @angledirection=9
- end
- end
- end
- #==============================================================================
- # ■ Game_Player
- #==============================================================================
- class Game_Player < Game_Character
- alias sideviewmove_by_input move_by_input
- def move_by_input
- if SIDETOP_CHARS::USE_8_DIR
- return if !movable? || $game_map.interpreter.running?
- if Input.dir8 > 0
- if Input.dir8==2 or Input.dir8==4 or Input.dir8==6 or Input.dir8==8
- move_straight(Input.dir4)
- else
- if Input.dir8==1
- move_diagonal(4, 2)
- end
- if Input.dir8==3
- move_diagonal(6, 2)
- end
- if Input.dir8==7
- move_diagonal(4, 8)
- end
- if Input.dir8==9
- move_diagonal(6, 8)
- end
- end
- end
- else
- sideviewmove_by_input
- end
- end
- end
- #==============================================================================
- # ■ Sprite_Character
- #==============================================================================
- class Sprite_Character < Sprite_Base
- alias sideviewinitialize initialize
- def initialize(viewport, character = nil)
- @moving_time = 5
- sideviewinitialize(viewport, character)
- end
- alias sideviewset_character_bitmap set_character_bitmap
- def set_character_bitmap
- sideviewset_character_bitmap
- if @character_name.include?('@')
- @cw = bitmap.width / 8
- @ch = bitmap.height / 2
- @sideview=true
- else
- @sideview=false
- end
- if @character_name.include?('#')
- @cw = bitmap.width / 8
- @ch = bitmap.height / 2
- @topview=true
- else
- @topview=false
- end
- self.ox = @cw / 2
- if @topview==true and @sideview==false
- self.oy = @ch / 2
- else
- self.oy = @ch
- end
- @character.sideview=@sideview
- @character.topview=@topview
- end
- alias sideviewupdate_src_rect update_src_rect
- def update_src_rect
- @character.custom=@sideview
- if @sideview==false and @topview==false
- sideviewupdate_src_rect
- self.mirror=false
- else
- if @character.moving?
- @moving_time=5
- else
- @moving_time-=1
- end
- index = @character.character_index
- pattern = @character.pattern < 8 ? @character.pattern : 1
- sx = pattern*@cw
- sy = 0
- if @moving_time>0
- sy+=@ch
- end
- #mirror
- if @sideview
- if @character.direction==4 or @character.movedirection==7 or @character.movedirection==1
- self.mirror=false
- end
- if @character.direction==6 or @character.movedirection==9 or @character.movedirection==3
- self.mirror=true
- end
- end
- #angle
- if @topview
- update_angle
- end
- self.src_rect.set(sx, sy, @cw, @ch)
- end
- end
- def update_angle
- if not @angle
- @angle = 0
- end
- if @character.movedirection==2
- @angle=270
- end
- if @character.movedirection==4
- @angle=180
- end
- if @character.movedirection==6
- @angle=0
- end
- if @character.movedirection==8
- @angle=90
- end
- if @character.movedirection==9
- @angle=45
- end
- if @character.movedirection==7
- @angle=135
- end
- if @character.movedirection==1
- @angle=225
- end
- if @character.movedirection==3
- @angle=315
- end
- if @sideview
- @angle=0
- if @character.movedirection==9 or @character.movedirection==1
- @angle=45
- end
- if @character.movedirection==7 or @character.movedirection==3
- @angle=315
- end
- end
- if not @current_angle
- @current_angle=@angle
- end
- if [@angle,@current_angle].max-[@angle,@current_angle].min>180
- if @angle>@current_angle
- @angle-=360
- else
- @angle+=360
- end
- end
- @current_angle=(@current_angle*9+@angle)/10
- self.angle=@current_angle
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment