#==============================================================================
#Advance Moving script - Quarter ver. 1.0
#Script by Kurama
#http://www.anime.tym.sk/
#------------------------------------------------------------------------------
# Graphics/Characters
# Scene_Quarter
# 001-Fighter01_quarter
#==============================================================================
#==============================================================================
# ? Game_Player
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias update_para_quarter update
def update
update_para_quarter
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# ???????????????????????????
case Input.dir8
when 1 # ?????
move_lower_left
when 3 # ?????
move_lower_right
when 7 # ?????
move_upper_left
when 9 # ?????
move_upper_right
end
end
end
end
#==============================================================================
# ? Sprite_Character
#==============================================================================
class Sprite_Character < RPG::Sprite
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias update_para_quarter update
def update
update_para_quarter
if @tile_id == 0
if (@character.direction - 2) % 2 == 1
# ????????????
if quarter_graphic_exist?(@character)
# ????????
if character.dash_on and dash_quarter_graphic_exist?(@character)
@character_name = @character.character_name + "_dash_quarter"
else
@character_name = @character.character_name + "_quarter"
end
self.bitmap = RPG::Cache.character(@character_name,
@character.character_hue)
# ?????
case @character.direction
when 1
n = 0
when 3
n = 2
when 7
n = 1
when 9
n = 3
end
else
@character.direction = @character.sub_direction
# ???????????????
n = (@character.direction - 2) / 2
end
# ?????????
sx = @character.pattern * @cw
sy = n * @ch
self.src_rect.set(sx, sy, @cw, @ch)
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
# ?????????
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
end
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def quarter_graphic_exist?(character)
# ???????
begin
RPG::Cache.character(character.character_name.to_s + "_quarter", character.character_hue)
rescue
return false
end
return true
end
#--------------------------------------------------------------------------
# ? ????????????????
#--------------------------------------------------------------------------
def dash_quarter_graphic_exist?(character)
# ???????
begin
RPG::Cache.character(character.character_name.to_s + "_dash_quarter", character.character_hue)
rescue
return false
end
return true
end
end
#==============================================================================
# ? Game_Character
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_accessor :direction # ??
attr_accessor :sub_direction # ???????????????
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def move_lower_left
# ?????????
unless @direction_fix
@sub_direction = @direction
@direction = 1
# ?????????????????????????
@sub_direction = (@sub_direction == 6 ? 4 : @sub_direction == 8 ? 2 : @sub_direction)
end
# ??????? ?????????????????
if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) or
(passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# ?????
@x -= 1
@y += 1
# ????
increase_steps
end
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def move_lower_right
# ?????????
unless @direction_fix
@sub_direction = @direction
@direction = 3
# ?????????????????????????
@sub_direction = (@sub_direction == 4 ? 6 : @sub_direction == 8 ? 2 : @sub_direction)
end
# ??????? ?????????????????
if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 6)) or
(passable?(@x, @y, 6) and passable?(@x + 1, @y, 2))
# ?????
@x += 1
@y += 1
# ????
increase_steps
end
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def move_upper_left
# ?????????
unless @direction_fix
@sub_direction = @direction
@direction = 7
# ?????????????????????????
@sub_direction = (@sub_direction == 6 ? 4 : @sub_direction == 2 ? 8 : @sub_direction)
end
# ??????? ?????????????????
if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 4)) or
(passable?(@x, @y, 4) and passable?(@x - 1, @y, 8))
# ?????
@x -= 1
@y -= 1
# ????
increase_steps
end
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def move_upper_right
# ?????????
unless @direction_fix
@sub_direction = @direction
@direction = 9
# ?????????????????????????
@sub_direction = (@sub_direction == 4 ? 6 : @sub_direction == 2 ? 8 : @sub_direction)
end
# ??????? ?????????????????
if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 6)) or
(passable?(@x, @y, 6) and passable?(@x + 1, @y, 8))
# ?????
@x += 1
@y -= 1
# ????
increase_steps
end
end
#--------------------------------------------------------------------------
# ? ?????????????
#--------------------------------------------------------------------------
def dash_on
if @dash_on != nil
return @dash_on
else
return false
end
end
end