lunariafantasia/Scripts/_.66.rb
2024-01-12 03:12:38 -06:00

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