# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x - $fineness).floor, (@y - $fineness).floor)
end
# Augmentation des pas
@step_count_decimal += $fineness if stepped
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers la diagonale haut-droite
#--------------------------------------------------------------------------
def move_upper_right
# 向き固定でない場合
unless @direction_fix
# 左向きだった場合は右を、下向きだった場合は上を向く
@direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
end
# Si le déplacement est possible
if xc_passable?(@x, @y, 9)
# Renouvellement des coordonnées
@x += $fineness
@y -= $fineness
stepped = true
elsif xc_passable?(@x, @y, 6)
@x += $fineness
stepped = true
elsif xc_passable?(@x, @y,
@y -= $fineness
stepped = true
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x + $fineness).ceil, (@y - $fineness).floor)
end
# Augmentation des pas
@step_count_decimal += $fineness if stepped
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
end
end
#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 同位置のイベント起動判定
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
result = false
# イベント実行中の場合
if $game_system.map_interpreter.running?
return result
end
# 全イベントのループ
for event in $game_map.events.values
# イベントの座標とトリガーが一致した場合
if event.x == @x.round and event.y == @y.round and triggers.include?(event.trigger)
# ジャンプ中以外で、起動判定が同位置のイベントなら
if not event.jumping? and event.over_trigger?
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# ● 正面のイベント起動判定
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
result = false
# イベント実行中の場合
if $game_system.map_interpreter.running?
return result
end
# 正面の座標を計算
new_x = @x.round + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y = @y.round + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 全イベントのループ
for event in $game_map.events.values
# イベントの座標とトリガーが一致した場合
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# ジャンプ中以外で、起動判定が正面のイベントなら
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
# 該当するイベントが見つからなかった場合
if result == false
# 正面のタイルがカウンターなら
if $game_map.counter?(new_x, new_y)
# 1 タイル奥の座標を計算
new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 全イベントのループ
for event in $game_map.events.values
# イベントの座標とトリガーが一致した場合
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# ジャンプ中以外で、起動判定が正面のイベントなら
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ローカル変数に移動中かどうかを記憶
last_moving = moving?
# 移動の細かさ(基本的に固定、変更した場合は歩数増加部分も変更のこと)
if @x%1 == 0.00 and @y%1 == 0.00
case @move_speed
when 4..6
$fineness = 2.00 ** (@move_speed - 6)
else
$fineness = 0.25
end
end
# 移動中、イベント実行中、移動ルート強制中、
# メッセージウィンドウ表示中のいずれでもない場合
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# 方向ボタンが押されていれば、その方向へプレイヤーを移動
case Input.dir8
when 2
move_down(@direction_fix)
when 4
move_left(@direction_fix)
when 6
move_right(@direction_fix)
when 8
move_up(@direction_fix)
when 1
move_lower_left
when 3
move_lower_right
when 7
move_upper_left
when 9
move_upper_right
end
end
# ローカル変数に座標を記憶
last_real_x = @real_x
last_real_y = @real_y
super
# キャラクターが下に移動し、かつ画面上の位置が中央より下の場合
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
# マップを下にスクロール
$game_map.scroll_down(@real_y - last_real_y)
end
# キャラクターが左に移動し、かつ画面上の位置が中央より左の場合
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
# マップを左にスクロール
$game_map.scroll_left(last_real_x - @real_x)
end
# キャラクターが右に移動し、かつ画面上の位置が中央より右の場合
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
# マップを右にスクロール
$game_map.scroll_right(@real_x - last_real_x)
end
# キャラクターが上に移動し、かつ画面上の位置が中央より上の場合
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
# マップを上にスクロール
$game_map.scroll_up(last_real_y - @real_y)
end
# 移動中ではない場合
unless moving?
# 前回プレイヤーが移動中だった場合
if last_moving
# 同位置のイベントとの接触によるイベント起動判定
result = check_event_trigger_here([1,2])
# 起動したイベントがない場合
if result == false
# デバッグモードが ON かつ CTRL キーが押されている場合を除き
unless $DEBUG and Input.press?(Input::CTRL)
# エンカウント カウントダウン
if @encounter_count > 0
@encounter_count -= $fineness
end
end
end
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 同位置および正面のイベント起動判定
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end