RPGツクールXP/VX用のRGSS素材です。
一部英語版対応です。
(A few materials can be used for English RPG MAKER XP/VX.)
競合率はルファーの独断と偏見なのでたまにハズレます。
↑スクリーンショット (クリックで拡大)
#==============================================================================
# ■ マップの暗闇効果
#------------------------------------------------------------------------------
# プレイヤーキャラクターの周辺を黒っぽくできるようにします。
# (C) ルファー
# WebSite https://tkoolerlufar.pages.dev/
#==============================================================================
=begin
=対応RGSS
1 2
=必要なライブラリ
ルファー作スクリプト素材共通ライブラリ
=他の素材との競合の可能性
!.. 多分大丈夫
=RPGツクールXPでの導入方法
Spriteset_Map より下に新セクションを作成して、
このプログラムをそこにコピーする
=使い方
ゲーム中に、イベントコマンド「スクリプト」で、
$game_screen.lufar_blind_depth = n # n は整数 #
という処理を入れると、プレイヤーの周辺 n マス分しかマップが見えなくなります。
-1 など、負の数にすると暗くなくなります。
=テクニック
$game_screen.lufar_blind_xxxx の値を変更すると、
プレイヤー周辺の明かりのつき方が変化します。
$game_screen.lufar_blind_shape・・・明かりの形
文法) $game_screen.lufar_blind_shape = 0
0・・・ひし形 (初期状態)
1・・・円形
2・・・正方形
3・・・楕円形
$game_screen.lufar_blind_color・・・暗闇の色
文法) $game_screen.lufar_blind_color = Color.new(0.0, 0.0, 0.0, 255)
Color.new(赤成分, 緑成分, 青成分, 濃さ)で指定します。
それぞれ最大値は 255.0 です。小数点以下は切り捨てるようです。
$game_screen.lufar_blind_blend_type・・・合成方法
文法) $game_screen.lufar_blind_blend_type = 0
1 にすると加算合成、2 にすると減算合成になります。
通常合成は 0 です。
=上級テクニック
Game_Screen#_Lufar_DarkMap_xxxx メソッドを書き換えれば、
どんなタイミングでどんな暗闇エフェクトを適用するかを
自動で判断するようにできます。
=注意
RPGツクールVXでご利用の際は、
上記の説明文にある「$game_screen」を「$game_map.screen」と読み替えてください。
例えば、
$game_screen.lufar_blind_depth = 7
は、RPGツクールVXだと
$game_map.screen.lufar_blind_depth = 7
となります。
=更新履歴
2013/06/05 lufar_blind_depth に非負の数をセットした後にマップイベントで
負の数をセットすると暗闇が晴れないバグを修正した
_Lufar_DarkMap_draw_blind の名前を _Lufar_DarkMap_refresh_blind に
変更した
2010/04/01 公開
=再定義しているメソッド (いずれもエイリアス使用)
Game_Screen#initialize
Spriteset_Map#initialize
Spriteset_Map#dispose
Spriteset_Map#update
=新規定義しているメソッド
Game_Screen#_Lufar_DarkMap_need_refresh
Game_Screen#_Lufar_DarkMap_need_refresh=
Game_Screen#_Lufar_DarkMap_depth
Game_Screen#_Lufar_DarkMap_shape
Game_Screen#_Lufar_DarkMap_color
Game_Screen#_Lufar_DarkMap_blend_type
Game_Screen#lufar_blind_depth=
Game_Screen#lufar_blind_shape=
Game_Screen#lufar_blind_color=
Game_Screen#lufar_blind_blend_type=
Spriteset_Map#_Lufar_DarkMap_update_blind
Spriteset_Map#_Lufar_DarkMap_refresh_blind
=end
#----------------------------------------------------------------------------
# ◆ Game_Screen クラス
#----------------------------------------------------------------------------
class Game_Screen
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :_Lufar_DarkMap_need_refresh # 要リフレッシュフラグ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias _Lufar_DarkMap_PrototypeOfInitialization initialize
def initialize(*args)
_Lufar_DarkMap_PrototypeOfInitialization(*args)
@_Lufar_DarkMap_depth = -1
@_Lufar_DarkMap_shape = 0
@_Lufar_DarkMap_color = Color.new(0.0, 0.0, 0.0)
@_Lufar_DarkMap_blend_type = 0
@_Lufar_DarkMap_need_refresh = false
end
#--------------------------------------------------------------------------
# ○ マップの暗さの取得
#--------------------------------------------------------------------------
def _Lufar_DarkMap_depth
@_Lufar_DarkMap_depth
end
#--------------------------------------------------------------------------
# ○ マップの暗さの設定
# val : マップの暗さ
#--------------------------------------------------------------------------
def lufar_blind_depth=(val)
return unless val.kind_of?(Integer)
return val if @_Lufar_DarkMap_depth == val
@_Lufar_DarkMap_need_refresh = true
@_Lufar_DarkMap_depth = val
end
#--------------------------------------------------------------------------
# ○ 暗闇の形の取得
#--------------------------------------------------------------------------
def _Lufar_DarkMap_shape
@_Lufar_DarkMap_shape
end
#--------------------------------------------------------------------------
# ○ 暗闇の形の設定
# val : 形
#--------------------------------------------------------------------------
def lufar_blind_shape=(val)
return unless val.kind_of?(Integer)
return val if @_Lufar_DarkMap_shape == val
@_Lufar_DarkMap_need_refresh = true
@_Lufar_DarkMap_shape = val
end
#--------------------------------------------------------------------------
# ○ 暗闇の色の取得
#--------------------------------------------------------------------------
def _Lufar_DarkMap_color
@_Lufar_DarkMap_color
end
#--------------------------------------------------------------------------
# ○ 暗闇の色の設定
# val : 暗闇の色
#--------------------------------------------------------------------------
def lufar_blind_color=(val)
return unless val.instance_of?(Color)
return val if @_Lufar_DarkMap_color == val
@_Lufar_DarkMap_need_refresh = true
@_Lufar_DarkMap_color = val
end
#--------------------------------------------------------------------------
# ○ 暗闇の合成方法の取得
#--------------------------------------------------------------------------
def _Lufar_DarkMap_blend_type
@_Lufar_DarkMap_blend_type
end
#--------------------------------------------------------------------------
# ○ 暗闇の合成方法の設定
# val : 合成方法
#--------------------------------------------------------------------------
def lufar_blind_blend_type=(val)
return unless val.kind_of?(Integer)
return val if @_Lufar_DarkMap_blend_type == val
@_Lufar_DarkMap_need_refresh = true
@_Lufar_DarkMap_blend_type = val
end
end
#----------------------------------------------------------------------------
# ◆ Spriteset_Map クラス
#----------------------------------------------------------------------------
class Spriteset_Map
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# args : 引数
#--------------------------------------------------------------------------
alias _Lufar_DarkMap_PrototypeOfInitialization initialize
def initialize(*args)
_Lufar_DarkMap_PrototypeOfInitialization(*args)
@game_screen = rpgxp? ? $game_screen : $game_map.screen
@_Lufar_DarkMap_blind_sprite = Sprite.new(@viewport1)
@_Lufar_DarkMap_blind_sprite.bitmap = Bitmap.new(41, 374)
@_Lufar_DarkMap_blind_sprite.z = 5000
@_Lufar_DarkMap_blind_sprite.zoom_x =
@_Lufar_DarkMap_blind_sprite.zoom_y = 32.0
@_Lufar_DarkMap_blind_sprite.ox = 20
@_Lufar_DarkMap_blind_sprite.oy = 14
@game_screen._Lufar_DarkMap_need_refresh = true
_Lufar_DarkMap_update_blind
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias _Lufar_DarkMap_PrototypeOfDisposition dispose
def dispose(*args)
_Lufar_DarkMap_PrototypeOfDisposition(*args)
@_Lufar_DarkMap_blind_sprite.bitmap.dispose
@_Lufar_DarkMap_blind_sprite.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias _Lufar_DarkMap_PrototypeOfUpdating update
def update(*args)
_Lufar_DarkMap_PrototypeOfUpdating(*args)
_Lufar_DarkMap_update_blind
end
#--------------------------------------------------------------------------
# ○ 暗闇の更新
#--------------------------------------------------------------------------
def _Lufar_DarkMap_update_blind
return unless defined? @_Lufar_DarkMap_blind_sprite
_Lufar_DarkMap_refresh_blind if @game_screen._Lufar_DarkMap_need_refresh
@_Lufar_DarkMap_blind_sprite.color.set(
@game_screen._Lufar_DarkMap_color.red,
@game_screen._Lufar_DarkMap_color.green,
@game_screen._Lufar_DarkMap_color.blue)
@_Lufar_DarkMap_blind_sprite.opacity =
@game_screen._Lufar_DarkMap_color.alpha
@_Lufar_DarkMap_blind_sprite.blend_type =
@game_screen._Lufar_DarkMap_blend_type
@_Lufar_DarkMap_blind_sprite.x =
$game_player.screen_x - 16 - @game_screen.shake
@_Lufar_DarkMap_blind_sprite.y = $game_player.screen_y - 32
end
#--------------------------------------------------------------------------
# ○ 暗闇のリフレッシュ
#--------------------------------------------------------------------------
def _Lufar_DarkMap_refresh_blind
depth = @game_screen._Lufar_DarkMap_depth
if depth <= 0
@_Lufar_DarkMap_blind_sprite.bitmap.clear
return
end
bitmap = @_Lufar_DarkMap_blind_sprite.bitmap
center_x = @_Lufar_DarkMap_blind_sprite.ox
center_y = @_Lufar_DarkMap_blind_sprite.oy
color = Color.new(0.0, 0.0, 0.0, 0.0)
bitmap.height.times do |y|
bitmap.width.times do |x|
px = x - center_x
py = y - center_y
distance = case @game_screen._Lufar_DarkMap_shape
when 0 then px.abs + py.abs
when 1 then Math.hypot(px, py)
when 2 then [px.abs, py.abs].max
when 3
Math.hypot(
px.to_f / (screen_width / 32 - 1),
py.to_f / (screen_height / 32 - 1)
) * ([screen_width, screen_height].min / 32 - 1)
end
color.alpha = [distance * 255.0 / depth, 255.0].min
bitmap.set_pixel(x, y, color)
end
end
@game_screen._Lufar_DarkMap_need_refresh = false
end
end
戻る