66 lines
2.7 KiB
Ruby
66 lines
2.7 KiB
Ruby
#==============================================================================
|
|
# ■ Game_Map
|
|
#------------------------------------------------------------------------------
|
|
# マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
|
|
# このクラスのインスタンスは $game_map で参照されます。
|
|
#==============================================================================
|
|
|
|
class Game_Map
|
|
#--------------------------------------------------------------------------
|
|
# ●
|
|
#--------------------------------------------------------------------------
|
|
alias ladder_event_setup setup
|
|
def setup(map_id)
|
|
ladder_event_setup(map_id)
|
|
ladder_set
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ○ 指定座標にあるイベントを配列で取得
|
|
#--------------------------------------------------------------------------
|
|
def event_tiles(x, y)
|
|
tile_events_xy(x, y).collect {|ev| ev.tile_id }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ○ 指定座標の全レイヤーのフラグ取得
|
|
#--------------------------------------------------------------------------
|
|
def all_tiles_flag?(x, y, bit)
|
|
(layered_tiles(x, y) + event_tiles(x, y)).any? {|tile_id| tileset.flags[tile_id] & bit != 0 }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ○ 指定座標のトップレイヤーのフラグ取得
|
|
#--------------------------------------------------------------------------
|
|
def top_tiles_flag?(x, y, bit)
|
|
top = (event_tiles(x, y) + layered_tiles(x, y))
|
|
top.delete(0)
|
|
tileset.flags[top[0]] & bit != 0
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ○
|
|
#--------------------------------------------------------------------------
|
|
def ladder_set
|
|
@ladder = note =~ /\<梯子上書き\>/ ? true : false
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 梯子判定 ※エイリアス
|
|
#--------------------------------------------------------------------------
|
|
alias event_ladder? ladder?
|
|
def ladder?(x, y)
|
|
if @ladder
|
|
valid?(x, y) && all_tiles_flag?(x, y, 0x20)
|
|
else
|
|
event_ladder?(x, y)
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ダメージ床判定 ※エイリアス
|
|
#--------------------------------------------------------------------------
|
|
alias event_damage_floor? damage_floor?
|
|
def damage_floor?(x, y)
|
|
if @ladder
|
|
valid?(x, y) && top_tiles_flag?(x, y, 0x100)
|
|
else
|
|
event_damage_floor?(x, y)
|
|
end
|
|
end
|
|
end
|
|
|