I think this is one. Credit
http://members.jcom.home.ne.jp/cogwheel/, i.e. cogwheel
[code]
# ‘S•ûŒüƒhƒbƒgˆÚ“® Ver ƒÆ
# ”z•zŒ³EƒTƒ|[ƒgURL
#
http://members.jcom.home.ne.jp/cogwheel/#==============================================================================
# ¡ Game_Player
#------------------------------------------------------------------------------
# @ƒvƒŒƒCƒ„[‚ðˆµ‚¤ƒNƒ‰ƒX‚Å‚·BƒCƒxƒ“ƒg‚Ì‹N“®”»’è‚âAƒ}ƒbƒv‚̃XƒNƒ[ƒ‹‚È‚Ç‚Ì
# ‹@”\‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚±‚̃Nƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX‚Í $game_player ‚ÅŽQÆ‚³‚ê‚Ü‚·B
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# œ ’è”
#--------------------------------------------------------------------------
UP = 0 # ã•ûŒü‚Ì—]—T(0 <= UP <= 63)
SIDE = 0 # ¶‰E•ûŒü‚Ì—]—T(0 <= SIDE <= 63)
SLANT = false # ˆÚ“®ƒ‹[ƒg‚̎΂߈ړ®ŽžA‘¬“xC³
#--------------------------------------------------------------------------
# œ ŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
#--------------------------------------------------------------------------
attr_reader :walk # ƒvƒŒ[ƒ„[ˆÚ“®‘¬“x
attr_reader :event # ƒCƒxƒ“ƒgŽžˆÚ“®‘¬“x
attr_accessor :move_speed # ˆÚ“®‘¬“x
#--------------------------------------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
#--------------------------------------------------------------------------
def initialize
super
# @walk:•às‘¬“x @dash:ƒ_ƒbƒVƒ…ŽžˆÚ“®‘¬“x
# @event:ƒCƒxƒ“ƒgŽžˆÚ“®‘¬“xi0‚ÌŽž‚ÍAƒCƒxƒ“ƒgŽž‚É‘¬“x•ÏX‚ð‚µ‚È‚¢j
@walk = 4
@dash = 5
@event = 4
@dot_m = true
@revise_x = 0
@revise_y = 0
@move == false
@anime_count = 18 - @walk * 2
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#--------------------------------------------------------------------------
alias :update_original :update
def update
#ƒ_ƒbƒVƒ…‹@”\BƒGƒ“ƒ^[ƒL[‚ª‰Ÿ‚³‚ê‚Ä‚¢‚éŠÔAˆÚ“®‘¬“x‚ð•ÏX‚·‚éB
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
if @walk != @dash
if Input.press?(Input::C)
if @move_speed != @dash
@move_speed = @dash
end
else
if @move_speed != @walk
@move_speed = @walk
end
end
end
end
if @revise_x == nil and @revise_y == nil
@revise_x = 0
@revise_y = 0
end
unless @dot_m
update_original
return
end
if @move_route_forcing
# ƒ[ƒJƒ‹•Ï”‚Ɉړ®’†‚©‚Ç‚¤‚©‚ð‹L‰¯
last_moving = moving?
# ƒ[ƒJƒ‹•Ï”‚ÉÀ•W‚ð‹L‰¯
last_real_x = @real_x
last_real_y = @real_y
# À•W‚ª‚¸‚ê‚Ä‚¢‚éê‡
if (@revise_x != 0 or @revise_y != 0) and not jumping? and @move == true
if @revise_x != @real_x - @x * 128 or @revise_y != @real_y - @y * 128
@revise_x = @real_x - @x * 128
@revise_y = @real_y - @y * 128
end
# ˆÚ“®‹——£distance1‚Æ–Ú•W‹——£distance2‚ðÝ’è
distance1 = 2 ** @move_speed
distance2 = Math.sqrt(@revise_x ** 2 + @revise_y ** 2)
# ˆÚ“®‹——£‚ª–Ú•W‹——£‚ð‰z‚¦‚½ê‡
if distance1 > distance2
# ‹§“I‚É•â³À•W‚ð—ë‚É‚·‚é
@real_x = @real_x - @revise_x
@real_y = @real_y - @revise_y
@revise_x = 0
@revise_y = 0
step_anime
# ˆÚ“®‹——£‚ª–Ú•W‹——£‚É’B‚µ‚È‚¢ê‡
else
# ˆÚ“®‹——£•ª–Ú•W‹——£‚ɋ߂Â
@real_x -= (distance1 * @revise_x / distance2).round
@real_y -= (distance1 * @revise_y / distance2).round
@revise_x = @real_x - @x * 128
@revise_y = @real_y - @y * 128
step_anime
end
else
super
end
else
@move = false
# ˆÚ“®’†AƒCƒxƒ“ƒgŽÀs’†AˆÚ“®ƒ‹[ƒg‹§’†A
# ƒƒbƒZ[ƒWƒEƒBƒ“ƒhƒE•\Ž¦’†‚Ì‚¢‚¸‚ê‚Å‚à‚È‚¢ê‡
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
@event_run = false
# •ûŒüƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ê‚Ä‚¢‚ê‚ÎA‚»‚Ì•ûŒü‚ÖƒvƒŒƒCƒ„[‚ðˆÚ“®
case Input.dir8
when 1
move_lower_left_p
when 2
move_down_p
when 3
move_lower_right_p
when 4
move_left_p
when 6
move_right_p
when 7
move_upper_left_p
when 8
move_up_p
when 9
move_upper_right_p
end
end
# ƒ[ƒJƒ‹•Ï”‚ÉÀ•W‚ð‹L‰¯
last_real_x = @real_x
last_real_y = @real_y
# ˆÚ“®ˆ—
@real_x = @x * 128 + @revise_x
@real_y = @y * 128 + @revise_y
# ƒ[ƒJƒ‹•Ï”‚Ɉړ®’†‚©‚Ç‚¤‚©‚ð‹L‰¯
last_moving = moving?
# À•WXV
move_on
# Œ»Ý‚ÌÀ•W‚ƈȑO‚ÌÀ•W‚ªˆÙ‚È‚éê‡
if (last_real_x != @real_x or last_real_y != @real_y)
@move_distance = 0 if @move_distance == nil
@move_distance += Math.sqrt((last_real_x - @real_x) ** 2 +
(last_real_y - @real_y) ** 2)
if @move_distance >= 128
@move_distance %= 128
increase_steps
end
# ƒAƒjƒ[ƒVƒ‡ƒ“‚ðXV
step_anime
else
stop_anime
end
end
# ƒLƒƒƒ‰ƒNƒ^[‚ª‰º‚Ɉړ®‚µA‚©‚‰æ–Êã‚̈ʒu‚ª’†‰›‚æ‚艺‚Ìê‡
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
# ƒ}ƒbƒv‚ð‰º‚ÉƒXƒNƒ[ƒ‹
$game_map.scroll_down(@real_y - last_real_y)
end
# ƒLƒƒƒ‰ƒNƒ^[‚ª¶‚Ɉړ®‚µA‚©‚‰æ–Êã‚̈ʒu‚ª’†‰›‚æ‚趂Ìê‡
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
# ƒ}ƒbƒv‚ð¶‚ɃXƒNƒ[ƒ‹
$game_map.scroll_left(last_real_x - @real_x)
end
# ƒLƒƒƒ‰ƒNƒ^[‚ª‰E‚Ɉړ®‚µA‚©‚‰æ–Êã‚̈ʒu‚ª’†‰›‚æ‚è‰E‚Ìê‡
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
# ƒ}ƒbƒv‚ð‰E‚ɃXƒNƒ[ƒ‹
$game_map.scroll_right(@real_x - last_real_x)
end
# ƒLƒƒƒ‰ƒNƒ^[‚ªã‚Ɉړ®‚µA‚©‚‰æ–Êã‚̈ʒu‚ª’†‰›‚æ‚èã‚Ìê‡
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
# ƒ}ƒbƒv‚ðã‚ɃXƒNƒ[ƒ‹
$game_map.scroll_up(last_real_y - @real_y)
end
# ‘O‰ñƒvƒŒƒCƒ„[‚ªˆÚ“®’†‚¾‚Á‚½ê‡
if last_moving
# “¯ˆÊ’u‚̃Cƒxƒ“ƒg‚Æ‚ÌÚG‚É‚æ‚éƒCƒxƒ“ƒg‹N“®”»’è
result = check_event_trigger_here([1,2])
if result == true
if (last_real_x / 128.0).round != @x and
(last_real_y / 128.0).round != @y
if @direction == 2 or @direction == 8
if (last_real_x / 128.0).round > @x
turn_left
else
turn_right
end
else
if (last_real_y / 128.0).round > @y
turn_up
else
turn_down
end
end
elsif (last_real_x / 128.0).round > @x
turn_left
elsif (last_real_x / 128.0).round < @x
turn_right
elsif (last_real_y / 128.0).round > @y
turn_up
elsif (last_real_y / 128.0).round < @y
turn_down
end
end
# ‹N“®‚µ‚½ƒCƒxƒ“ƒg‚ª‚È‚¢ê‡
if result == false
# ƒfƒoƒbƒOƒ‚[ƒh‚ª ON ‚©‚ CTRL ƒL[‚ª‰Ÿ‚³‚ê‚Ä‚¢‚éꇂ𜂫
unless $DEBUG and Input.press?(Input::CTRL)
# ƒGƒ“ƒJƒEƒ“ƒg ƒJƒEƒ“ƒgƒ_ƒEƒ“
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
# C ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.trigger?(Input::C)
# “¯ˆÊ’u‚¨‚æ‚ѳ–ʂ̃Cƒxƒ“ƒg‹N“®”»’è
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
#--------------------------------------------------------------------------
# œ ˆÚ“®”»’è
#--------------------------------------------------------------------------
def moving?
unless @dot_m
result = super
return result
end
# ‹§ˆÚ“®‚ÌꇃIƒŠƒWƒiƒ‹‚Ì”»’è‚ð‚³‚¹‚é
if @move_route_forcing
if @move == false
return false
end
super
# ’Ê펞‚ÍŒ»À•W‚ªŽÀÀ•W‚ƈقȂéꇂ݈̂ړ®’†‚Æ”»’è
else
return (@x != (@real_x / 128.0).round or @y != (@real_y / 128.0).round)
end
end
#--------------------------------------------------------------------------
# œ ˆÚ“®”»’è
#--------------------------------------------------------------------------
def moving_a?
if @move == false
if (@move_route.list[@move_route_index].code <= 14 or
@move_route.list[@move_route_index].code == 25)
@move = true
end
return false
end
moving?
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV (ƒWƒƒƒ“ƒv)
#--------------------------------------------------------------------------
def update_jump
# ƒWƒƒƒ“ƒvƒJƒEƒ“ƒg‚ð 1 Œ¸‚ç‚·
@jump_count -= 1
# V‚µ‚¢À•W‚ðŒvŽZ
@real_x = (@real_x * @jump_count + @x * 128) / (@jump_count + 1)
@real_y = (@real_y * @jump_count + @y * 128) / (@jump_count + 1)
if @jump_count == 0
@revise_x = 0
@revise_y = 0
end
end
#--------------------------------------------------------------------------
# œ ˆÚ“®ƒ^ƒCƒv : ƒJƒXƒ^ƒ€
#--------------------------------------------------------------------------
def move_type_custom
unless @dot_m
super
return
end
# ’âŽ~’†‚Å‚È‚¯‚ê‚Î’†’f
if jumping? or moving_a?
return
end
# ˆÚ“®ƒRƒ}ƒ“ƒh‚̃ŠƒXƒg‚ÌÅŒã‚É“ž’B‚·‚é‚܂Ń‹[ƒv
while @move_route_index < @move_route.list.size
# ˆÚ“®ƒRƒ}ƒ“ƒh‚ðŽæ“¾
command = @move_route.list[@move_route_index]
# ƒRƒ}ƒ“ƒhƒR[ƒh 0 ”Ô (ƒŠƒXƒg‚ÌÅŒã) ‚Ìê‡
if command.code == 0
# ƒIƒvƒVƒ‡ƒ“ [“®ì‚ðŒJ‚è•Ô‚·] ‚ª ON ‚Ìê‡
if @move_route.repeat
# ˆÚ“®ƒ‹[ƒg‚̃Cƒ“ƒfƒbƒNƒX‚ðʼn‚É–ß‚·
@move_route_index = 0
end
# ƒIƒvƒVƒ‡ƒ“ [“®ì‚ðŒJ‚è•Ô‚·] ‚ª OFF ‚Ìê‡
unless @move_route.repeat
# ˆÚ“®ƒ‹[ƒg‹§’†‚Ìê‡
if @move_route_forcing and not @move_route.repeat
# ˆÚ“®ƒ‹[ƒg‚Ì‹§‚ð‰ðœ
@move_route_forcing = false
# ƒIƒŠƒWƒiƒ‹‚̈ړ®ƒ‹[ƒg‚𕜋A
@move_route = @original_move_route
@move_route_index = @original_move_route_index
@original_move_route = nil
end
# ’âŽ~ƒJƒEƒ“ƒg‚ðƒNƒŠƒA
@stop_count = 0
end
return
end
# ˆÚ“®ŒnƒRƒ}ƒ“ƒh (‰º‚Ɉړ®`ƒWƒƒƒ“ƒv) ‚Ìê‡
if command.code <= 14
# ƒRƒ}ƒ“ƒhƒR[ƒh‚Å•ªŠò
case command.code
when 1 # ‰º‚Ɉړ®
move_down
when 2 # ¶‚Ɉړ®
move_left
when 3 # ‰E‚Ɉړ®
move_right
when 4 # ã‚Ɉړ®
move_up
when 5 # ¶‰º‚Ɉړ®
move_lower_left
when 6 # ‰E‰º‚Ɉړ®
move_lower_right
when 7 # ¶ã‚Ɉړ®
move_upper_left
when 8 # ‰Eã‚Ɉړ®
move_upper_right
when 9 # ƒ‰ƒ“ƒ_ƒ€‚Ɉړ®
move_random
when 10 # ƒvƒŒƒCƒ„[‚ɋ߂Â
move_toward_player
when 11 # ƒvƒŒƒCƒ„[‚©‚牓‚´‚©‚é
move_away_from_player
when 12 # ˆê•à‘Oi
move_forward
when 13 # ˆê•àŒã‘Þ
move_backward
when 14 # ƒWƒƒƒ“ƒv
jump(command.parameters[0], command.parameters[1])
end
# ƒIƒvƒVƒ‡ƒ“ [ˆÚ“®‚Å‚«‚È‚¢ê‡‚Í–³Ž‹] ‚ª OFF ‚ÅAˆÚ“®Ž¸”s‚Ìê‡
if not @move_route.skippable and not moving? and not jumping?
return
end
@move_route_index += 1
return
end
# ƒEƒFƒCƒg‚Ìê‡
if command.code == 15
# ƒEƒFƒCƒgƒJƒEƒ“ƒg‚ðÝ’è
@wait_count = command.parameters[0] * 2 - 1
@move_route_index += 1
return
end
# Œü‚«•ÏXŒn‚̃Rƒ}ƒ“ƒh‚Ìê‡
if command.code >= 16 and command.code <= 26
# ƒRƒ}ƒ“ƒhƒR[ƒh‚Å•ªŠò
case command.code
when 16 # ‰º‚ðŒü‚
turn_down
when 17 # ¶‚ðŒü‚
turn_left
when 18 # ‰E‚ðŒü‚
turn_right
when 19 # ã‚ðŒü‚
turn_up
when 20 # ‰E‚É 90 “x‰ñ“]
turn_right_90
when 21 # ¶‚É 90 “x‰ñ“]
turn_left_90
when 22 # 180 “x‰ñ“]
turn_180
when 23 # ‰E‚©¶‚É 90 “x‰ñ“]
turn_right_or_left_90
when 24 # ƒ‰ƒ“ƒ_ƒ€‚É•ûŒü“]Š·
turn_random
when 25 # ƒvƒŒƒCƒ„[‚Ì•û‚ðŒü‚
turn_toward_player
when 26 # ƒvƒŒƒCƒ„[‚Ì‹t‚ðŒü‚
turn_away_from_player
end
@move_route_index += 1
return
end
# ‚»‚Ì‘¼‚̃Rƒ}ƒ“ƒh‚Ìê‡
if command.code >= 27
# ƒRƒ}ƒ“ƒhƒR[ƒh‚Å•ªŠò
case command.code
when 27 # ƒXƒCƒbƒ` ON
$game_switches[command.parameters[0]] = true
$game_map.need_refresh = true
when 28 # ƒXƒCƒbƒ` OFF
$game_switches[command.parameters[0]] = false
$game_map.need_refresh = true
when 29 # ˆÚ“®‘¬“x‚Ì•ÏX
@move_speed = command.parameters[0]
when 30 # ˆÚ“®•p“x‚Ì•ÏX
@move_frequency = command.parameters[0]
when 31 # ˆÚ“®ŽžƒAƒjƒ ON
@walk_anime = true
when 32 # ˆÚ“®ŽžƒAƒjƒ OFF
@walk_anime = false
when 33 # ’âŽ~ŽžƒAƒjƒ ON
@step_anime = true
when 34 # ’âŽ~ŽžƒAƒjƒ OFF
@step_anime = false
when 35 # Œü‚«ŒÅ’è ON
@direction_fix = true
when 36 # Œü‚«ŒÅ’è OFF
@direction_fix = false
when 37 # ‚·‚蔲‚¯ ON
@through = true
when 38 # ‚·‚蔲‚¯ OFF
@through = false
when 39 # Å‘O–Ê‚É•\Ž¦ ON
@always_on_top = true
when 40 # Å‘O–Ê‚É•\Ž¦ OFF
@always_on_top = false
when 41 # ƒOƒ‰ƒtƒBƒbƒN•ÏX
@tile_id = 0
@character_name = command.parameters[0]
@character_hue = command.parameters[1]
if @original_direction != command.parameters[2]
@direction = command.parameters[2]
@original_direction = @direction
@prelock_direction = 0
end
if @original_pattern != command.parameters[3]
@pattern = command.parameters[3]
@original_pattern = @pattern
end
when 42 # •s“§–¾“x‚Ì•ÏX
@opacity = command.parameters[0]
when 43 # ‡¬•û–@‚Ì•ÏX
@blend_type = command.parameters[0]
when 44 # SE ‚̉‰‘t
$game_system.se_play(command.parameters[0])
when 45 # ƒXƒNƒŠƒvƒg
result = eval(command.parameters[0])
end
@move_route_index += 1
return
end
end
end
#--------------------------------------------------------------------------
# œ ‰º‚Ɉړ®
#--------------------------------------------------------------------------
def move_down_p
# ‰º‚ðŒü‚
turn_down
# ˆÚ“®‹——£‚ðŽZo
distance = 2 ** @move_speed
down1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance, true)
end
#--------------------------------------------------------------------------
# œ ‰º‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚P
#--------------------------------------------------------------------------
def down1(x, y, distance, down = false)
result = down2(x, y, distance)
if result == false
@event_run = check_event_trigger_touch(x, y+1)
return result
end
if @revise_x < -SIDE
result = down2(x, y + 1, distance, 4)
result &= down2(x - 1, y, distance)
if result == false
if down
move_lower_right_p
if @revise_x > SIDE
@revise_x = SIDE
end
end
return result
end
elsif @revise_x > SIDE
result = down2(x, y + 1, distance, 6)
result &= down2(x + 1, y, distance)
if result == false
if down
move_lower_left_p
if @revise_x < -SIDE
@revise_x = -SIDE
end
end
return result
end
end
# ‰º‚Ɉړ®‰Â”\‚È‚ç‚΋——£•ªˆÚ“®
@revise_y += distance
return result
end
#--------------------------------------------------------------------------
# œ ‰º‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚Q
#--------------------------------------------------------------------------
def down2(x, y, distance, d = 2)
if @revise_y + distance > 0
unless passable?(x, y, d)
if @revise_y < 0
@revise_y = 0
end
return false
end
end
return true
end
#--------------------------------------------------------------------------
# œ ¶‚Ɉړ®
#--------------------------------------------------------------------------
def move_left_p
# ¶‚ðŒü‚
turn_left
distance = 2 ** @move_speed
left1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance, true)
end
#--------------------------------------------------------------------------
# œ ¶‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚P
#--------------------------------------------------------------------------
def left1(x, y, distance, left = false)
result = left2(x, y, distance)
if result == false
@event_run = check_event_trigger_touch(x-1, y)
return result
end
if @revise_y < -UP
result = left2(x - 1, y, distance,
result &= left2(x, y - 1, distance)
if result == false
if left
move_lower_left_p
if @revise_y > 0
@revise_y = 0
end
end
return result
end
elsif @revise_y > 0
result = left2(x - 1, y, distance, 2)
result &= left2(x, y + 1, distance)
if result == false
if left
move_upper_left_p
if @revise_y < -UP
@revise_y = -UP
end
end
return result
end
end
@revise_x -= distance
return result
end
#--------------------------------------------------------------------------
# œ ¶‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚Q
#--------------------------------------------------------------------------
def left2(x, y, distance, d = 4)
if @revise_x - distance < -SIDE
unless passable?(x, y, d)
if @revise_x > -SIDE
@revise_x = -SIDE
end
return false
end
end
return true
end
#--------------------------------------------------------------------------
# œ ‰E‚Ɉړ®
#--------------------------------------------------------------------------
def move_right_p
# ‰E‚ðŒü‚
turn_right
distance = 2 ** @move_speed
right1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance, true)
end
#--------------------------------------------------------------------------
# œ ‰E‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚P
#--------------------------------------------------------------------------
def right1(x, y, distance, right = false)
result = right2(x, y, distance)
if result == false
@event_run = check_event_trigger_touch(x+1, y)
return result
end
if @revise_y < -UP
result = right2(x + 1, y, distance,
result &= right2(x, y - 1, distance)
if result == false
if right
move_lower_right_p
if @revise_y > 0
@revise_y = 0
end
end
return result
end
elsif @revise_y > 0
result = right2(x + 1, y, distance, 2)
result &= right2(x, y + 1, distance)
if result == false
if right
move_upper_right_p
if @revise_y < -UP
@revise_y = -UP
end
end
return result
end
end
@revise_x += distance
return result
end
#--------------------------------------------------------------------------
# œ ‰E‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚Q
#--------------------------------------------------------------------------
def right2(x, y, distance, d = 6)
if @revise_x + distance > SIDE
unless passable?(x, y, d)
if @revise_x < SIDE
@revise_x = SIDE
end
return false
end
end
return true
end
#--------------------------------------------------------------------------
# œ ã‚Ɉړ®
#--------------------------------------------------------------------------
def move_up_p
# ã‚ðŒü‚
turn_up
# ‰º‚Ɉړ®
distance = 2 ** @move_speed
up1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance, true)
end
#--------------------------------------------------------------------------
# œ ã‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚P
#--------------------------------------------------------------------------
def up1(x, y, distance, up = false)
result = up2(x, y, distance)
if result == false
@event_run = check_event_trigger_touch(x, y-1)
return result
end
if @revise_x < -SIDE
result = up2(x, y - 1, distance, 4)
result &= up2(x - 1, y, distance)
if result == false
if up
move_upper_right_p
if @revise_x > SIDE
@revise_x = SIDE
end
end
return result
end
elsif @revise_x > SIDE
result = up2(x, y - 1, distance, 6)
result &= up2(x + 1, y, distance)
if result == false
if up
move_upper_left_p
if @revise_x < -SIDE
@revise_x = -SIDE
end
end
return result
end
end
@revise_y -= distance
return result
end
#--------------------------------------------------------------------------
# œ ã‚Ɉړ®‰Â”\‚©‚Ç‚¤‚©‚Ì”»’è‚Q
#--------------------------------------------------------------------------
def up2(x, y, distance, d =
if @revise_y - distance < -UP
unless passable?(x, y, d)
if @revise_y > -UP
@revise_y = -UP
end
return false
end
end
return true
end
#--------------------------------------------------------------------------
# œ ¶‰º‚Ɉړ®
#--------------------------------------------------------------------------
def move_lower_left_p
# Œü‚«ŒÅ’è‚Å‚È‚¢ê‡
unless @direction_fix
# ‰EŒü‚«‚¾‚Á‚½ê‡‚Ͷ‚ðAãŒü‚«‚¾‚Á‚½ê‡‚͉º‚ðŒü‚
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
end
# ¶‰º‚Ɉړ®
distance = (2 ** @move_speed) / Math.sqrt(2)
if @direction == 2
turn_left unless down1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_down if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 2, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_y > 0 and -UP > @revise_y - distance
@revise_y = 0
end
turn_down unless left1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_left if @event_run
end
else
turn_down unless left1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_left if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 4, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_x + distance> SIDE and -SIDE > @revise_x
@revise_x = -SIDE
end
turn_left unless down1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_down if @event_run
end
end
end
#--------------------------------------------------------------------------
# œ ‰E‰º‚Ɉړ®
#--------------------------------------------------------------------------
def move_lower_right_p
# Œü‚«ŒÅ’è‚Å‚È‚¢ê‡
unless @direction_fix
# ¶Œü‚«‚¾‚Á‚½ê‡‚͉E‚ðAãŒü‚«‚¾‚Á‚½ê‡‚͉º‚ðŒü‚
@direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
end
# ‰E‰º‚Ɉړ®
distance = (2 ** @move_speed) / Math.sqrt(2)
if @direction == 2
turn_right unless down1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_down if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 2, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_y > 0 and -UP > @revise_y - distance
@revise_y = 0
end
turn_down unless right1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_right if @event_run
end
else
turn_down unless right1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_right if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 6, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_x > SIDE and -SIDE > @revise_x - distance
@revise_x = SIDE
end
turn_right unless down1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_down if @event_run
end
end
end
#--------------------------------------------------------------------------
# œ ¶ã‚Ɉړ®
#--------------------------------------------------------------------------
def move_upper_left_p
# Œü‚«ŒÅ’è‚Å‚È‚¢ê‡
unless @direction_fix
# ‰EŒü‚«‚¾‚Á‚½ê‡‚Ͷ‚ðA‰ºŒü‚«‚¾‚Á‚½ê‡‚Íã‚ðŒü‚
@direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
end
# ¶ã‚Ɉړ®
distance = (2 ** @move_speed) / Math.sqrt(2)
if @direction == 8
turn_left unless up1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_up if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 8, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_y + distance > 0 and -UP > @revise_y
@revise_y = -UP
end
turn_up unless left1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_left if @event_run
end
else
turn_up unless left1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_left if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 4, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_x > SIDE and -SIDE > @revise_x - distance
@revise_x = SIDE
end
turn_left unless up1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_up if @event_run
end
end
end
#--------------------------------------------------------------------------
# œ ‰Eã‚Ɉړ®
#--------------------------------------------------------------------------
def move_upper_right_p
# Œü‚«ŒÅ’è‚Å‚È‚¢ê‡
unless @direction_fix
# ¶Œü‚«‚¾‚Á‚½ê‡‚͉E‚ðA‰ºŒü‚«‚¾‚Á‚½ê‡‚Íã‚ðŒü‚
@direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
end
# ‰Eã‚Ɉړ®
distance = (2 ** @move_speed) / Math.sqrt(2)
if @direction == 8
turn_right unless up1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_up if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 8, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_y + distance > 0 and -UP > @revise_y
@revise_y = -UP
end
turn_up unless right1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_right if @event_run
end
else
turn_up unless right1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_right if @event_run
unless @event_run
if last_move?(@real_x, @real_y, 6, distance)
result = check_event_trigger_here([1,2], false)
if result == true
return
end
end
move_on
if @revise_x > SIDE and -SIDE > @revise_x - distance
@revise_x = SIDE
end
turn_right unless up1(((@x * 128 + @revise_x) / 128.0).round,
((@y * 128 + @revise_y) / 128.0).round, distance)
turn_up if @event_run
end
end
end
#--------------------------------------------------------------------------
# œ “¯ˆÊ’u‚̃Cƒxƒ“ƒg‹N“®”»’è
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers, run = true)
result = false
# ƒCƒxƒ“ƒgŽÀs’†‚Ìê‡
if $game_system.map_interpreter.running?
return result
end
# ‘SƒCƒxƒ“ƒg‚̃‹[ƒv
for event in $game_map.events.values
# ƒCƒxƒ“ƒg‚ÌÀ•W‚ƃgƒŠƒK[‚ªˆê’v‚µ‚½ê‡
if event.x == ((@x * 128 + @revise_x) / 128.0).round and
event.y == ((@y * 128 + @revise_y) / 128.0).round and
triggers.include?(event.trigger)
# ƒWƒƒƒ“ƒv’†ˆÈŠO‚ÅA‹N“®”»’肪“¯ˆÊ’u‚̃Cƒxƒ“ƒg‚È‚ç
if not event.jumping? and event.over_trigger?
if event.list.size > 1
if run == true
event.start
end
result = true
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# œ À•WC³
#--------------------------------------------------------------------------
def move_on
if @y < (@y + @revise_y / 128.0).round
@y += 1
@revise_y -= 128
end
if @x > (@x + @revise_x / 128.0).round
@x -= 1
@revise_x += 128
end
if @x < (@x + @revise_x / 128.0).round
@x += 1
@revise_x -= 128
end
if @y > (@y + @revise_y / 128.0).round
@y -= 1
@revise_y += 128
end
end
#--------------------------------------------------------------------------
# œ ˆÚ“®Žž‚̃Aƒjƒ[ƒVƒ‡ƒ“
#--------------------------------------------------------------------------
def step_anime
# ˆÚ“®ŽžƒAƒjƒ‚ª ON ‚Ìê‡
if @walk_anime
# ƒAƒjƒƒJƒEƒ“ƒg‚ð 1.5 ‘‚â‚·
@anime_count += 1.5
# ˆÚ“®ŽžƒAƒjƒ‚ª OFF ‚ÅA’âŽ~ŽžƒAƒjƒ‚ª ON ‚Ìê‡
elsif @step_anime
# ƒAƒjƒƒJƒEƒ“ƒg‚ð 1 ‘‚â‚·
@anime_count += 1
end
anime_update
end
#--------------------------------------------------------------------------
# œ ’âŽ~Žž‚̃Aƒjƒ[ƒVƒ‡ƒ“
#--------------------------------------------------------------------------
def stop_anime
# ’âŽ~ŽžƒAƒjƒ‚ª ON ‚Ìê‡
if @step_anime
# ƒAƒjƒƒJƒEƒ“ƒg‚ð 1 ‘‚â‚·
@anime_count += 1
# ’âŽ~ŽžƒAƒjƒ‚ª OFF ‚¾‚ªAŒ»Ý‚̃pƒ^[ƒ“‚ªƒIƒŠƒWƒiƒ‹‚ƈقȂéê‡
elsif @pattern != @original_pattern
# ƒAƒjƒƒJƒEƒ“ƒg‚ð 1.5 ‘‚â‚·
@anime_count += 1.5
else
# ƒAƒjƒƒJƒEƒ“ƒgXV’¼‘O‚É•ÏX
@anime_count = 18 - @move_speed * 2
end
# ƒCƒxƒ“ƒgŽÀs‘Ò‹@’†‚Ü‚½‚̓ƒbƒNó‘Ô‚Å‚Í‚È‚¢ê‡
# ¦ƒƒbƒN‚ÍAŽÀs’†‚̃Cƒxƒ“ƒg‚ª—§‚¿Ž~‚܂鈗
unless @starting or lock?
# ’âŽ~ƒJƒEƒ“ƒg‚ð 1 ‘‚â‚·
@stop_count += 1
end
anime_update
end
#--------------------------------------------------------------------------
# œ ƒAƒjƒ[ƒVƒ‡ƒ“ƒAƒbƒvƒf[ƒg
#--------------------------------------------------------------------------
def anime_update
# ƒAƒjƒƒJƒEƒ“ƒg‚ªÅ‘å’l‚ð’´‚¦‚½ê‡
# ¦Å‘å’l‚ÍAŠî–{’l 18 ‚©‚çˆÚ“®‘¬“x * 1 ‚ðˆø‚¢‚½’l
if @anime_count > 18 - @move_speed * 2
# ’âŽ~ŽžƒAƒjƒ‚ª OFF ‚©‚ ’âŽ~’†‚Ìê‡
if not @step_anime and @stop_count > 0
# ƒpƒ^[ƒ“‚ðƒIƒŠƒWƒiƒ‹‚É–ß‚·
@pattern = @original_pattern
# ’âŽ~ŽžƒAƒjƒ‚ª ON ‚Ü‚½‚Í ˆÚ“®’†‚Ìê‡
else
# ƒpƒ^[ƒ“‚ðXV
@pattern = (@pattern + 1) % 4
end
# ƒAƒjƒƒJƒEƒ“ƒg‚ðƒNƒŠƒA
@anime_count = 0
end
end
#--------------------------------------------------------------------------
# œ Žw’èˆÊ’u‚Ɉړ®
#--------------------------------------------------------------------------
# ƒIƒŠƒWƒiƒ‹‚̃Cƒxƒ“ƒg‚ð‰ü–¼
alias :moveto_original :moveto
def moveto(x, y)
# •â³À•W‚ð‰Šú‰»
@revise_x = 0
@revise_y = 0
# ƒIƒŠƒWƒiƒ‹‚̃Cƒxƒ“ƒg‚ðŒÄ‚Ño‚µ
moveto_original(x, y)
end
#--------------------------------------------------------------------------
# œ ˆÚ“®‚µ‚½‚©‚Ç‚¤‚©‚Ì”»’è
#--------------------------------------------------------------------------
def last_move?(x, y, direction, distance)
if direction == 2 or direction == 6
distance *= -1
end
if (direction == 2 or direction ==
and
(y / 128.0).round != ((y - distance) / 128.0).round
return true
end
if (direction == 4 or direction == 6) and
(x / 128.0).round != ((x - distance) / 128.0).round
return true
end
return false
end
end
#==============================================================================
# ¡ Game_Character (•ªŠ„’è‹` 1)
#------------------------------------------------------------------------------
# @ƒLƒƒƒ‰ƒNƒ^[‚ðˆµ‚¤ƒNƒ‰ƒX‚Å‚·B‚±‚̃Nƒ‰ƒX‚Í Game_Player ƒNƒ‰ƒX‚Æ Game_Event
# ƒNƒ‰ƒX‚̃X[ƒp[ƒNƒ‰ƒX‚Æ‚µ‚ÄŽg—p‚³‚ê‚Ü‚·B
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# œ ‰æ–Ê X À•W‚̎擾
#--------------------------------------------------------------------------
def screen_x
# ŽÀÀ•W‚ƃ}ƒbƒv‚Ì•\Ž¦ˆÊ’u‚©‚ç‰æ–ÊÀ•W‚ð‹‚ß‚é
return ((@real_x - $game_map.display_x) / 4).ceil + 16
end
#--------------------------------------------------------------------------
# œ ‰æ–Ê Y À•W‚̎擾
#--------------------------------------------------------------------------
def screen_y
# ŽÀÀ•W‚ƃ}ƒbƒv‚Ì•\Ž¦ˆÊ’u‚©‚ç‰æ–ÊÀ•W‚ð‹‚ß‚é
y = ((@real_y - $game_map.display_y) / 4).ceil + 32
# ƒWƒƒƒ“ƒvƒJƒEƒ“ƒg‚ɉž‚¶‚Ä Y À•W‚𬂳‚‚·‚é
if @jump_count >= @jump_peak
n = @jump_count - @jump_peak
else
n = @jump_peak - @jump_count
end
return y - (@jump_peak * @jump_peak - n * n) / 2
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV (ˆÚ“®)
#--------------------------------------------------------------------------
def update_move
# ˆÚ“®‘¬“x‚©‚çƒ}ƒbƒvÀ•WŒn‚ł̈ړ®‹——£‚É•ÏŠ·
distance = 2 ** @move_speed
if @x * 128 != @real_x and @y * 128 != @real_y and Game_Player::SLANT
distance /= Math.sqrt(2)
end
# ˜_—À•W‚ªŽÀÀ•W‚æ‚艺‚Ìê‡
if @y * 128 > @real_y
# ‰º‚Ɉړ®
@real_y = [@real_y + distance, @y * 128].min
end
# ˜_—À•W‚ªŽÀÀ•W‚æ‚趂Ìê‡
if @x * 128 < @real_x
# ¶‚Ɉړ®
@real_x = [@real_x - distance, @x * 128].max
end
# ˜_—À•W‚ªŽÀÀ•W‚æ‚è‰E‚Ìê‡
if @x * 128 > @real_x
# ‰E‚Ɉړ®
@real_