-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path视界限制.rb
194 lines (174 loc) · 7.55 KB
/
视界限制.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#==============================================================================
# ★ RGSS3_視界制限 Ver1.2
#==============================================================================
=begin
作者:tomoaky
webサイト:ひきも記 (http://hikimoki.sakura.ne.jp/)
設定した番号のマップだけ視界を制限します。
アクター、職業、武器(防具)、ステートなどのメモ欄にタグを書き込むことで
視界制限のサイズを補正することができます。
例)<視界補正 32>
視界が 32 ドット広がります。
視界補正値の計算をおこなうのは戦闘メンバーのみとなります。
ゲーム変数(初期設定では9番)を使って視界のサイズを補正できます。
実際の視界制限サイズは上記の設定値をすべて加算したものになります。
ただし、マップに視界制限値が設定されていない場合はすべて無効です。
プレイヤーの画面上の座標が常に変わるような状況(1画面分の小さなマップなど)、
視界補正値がリアルタイムに変化する状況などでは頻繁にスプライトの再描画を
実行するため処理が重くなります
動作に必要な画像
Graphics/System/sight_shadow.png
使用するゲーム変数(初期設定)
0009
2013.01.22 Ver1.2
?毎フレーム再描画をおこなっていた処理を改善
?環境によってエラー落ちの原因となる部分を修正
2012.03.07 Ver1.11
?メニューから復帰したときに視界制限が途切れる不具合を修正
2012.02.05 Ver1.1
?タイマーが隠れてしまわないようにZ座標を調整
?ゲーム変数を使って視界制限サイズを補正する機能を追加
2012.01.20 Ver1.0
公開
=end
#==============================================================================
# □ 設定項目
#==============================================================================
module TMBLSIGHT
# 何番のマップをどれだけ視界制限するか
# 例)SIGHT[3] = 128 # 3番のマップの視界を128ドット四方に制限する
SIGHT = {}
# SIGHT[1] = 200
VN_SIGHT = 20 # 視界のサイズ補正に利用するゲーム変数番号
# ADD-------------->
IF_SIGHT = 19 # 自建 是否使用
# <--------------
end
#==============================================================================
# □ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ 視界制限の補正値
#--------------------------------------------------------------------------
def sight_power
unless @sight_power
@sight_power = /<視界補正\s*(\-*\d+)\s*>/ =~ @note ? $1.to_i : 0
end
@sight_power
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor
#--------------------------------------------------------------------------
# ○ 視界制限の補正値
#--------------------------------------------------------------------------
def sight_power
feature_objects.inject(0) {|result, object| result + object.sight_power }
end
end
#==============================================================================
# □ Sprite_SightShadow
#==============================================================================
class Sprite_SightShadow < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport = nil)
super(viewport)
self.z = 199
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
@bitmap_shadow = Bitmap.new("Graphics/System/sight_shadow")
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose
@bitmap_shadow.dispose
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# Modify-------------->
if TMBLSIGHT::SIGHT[$game_map.map_id] && ($game_variables[TMBLSIGHT::IF_SIGHT]&(1<<($game_map.map_id-1)))==0
# <--------------
self.visible = true
w = TMBLSIGHT::SIGHT[$game_map.map_id] # マップに設定された補正値
w += $game_variables[TMBLSIGHT::VN_SIGHT] # ゲーム変数による補正値
$game_party.battle_members.each do |actor|
w = [w + actor.sight_power, 48].max # 戦闘メンバーの補正値
end
x = $game_player.screen_x - w / 2
y = $game_player.screen_y - w / 2 - 16
if w != @last_w || x != @last_x || y != @last_y
@last_w = w
@last_x = x
@last_y = y
self.bitmap.clear
rect = Rect.new(x, y, w, w)
self.bitmap.stretch_blt(rect, @bitmap_shadow, @bitmap_shadow.rect)
color = Color.new(0, 0, 0)
self.bitmap.fill_rect(0, 0, Graphics.width, y, color)
self.bitmap.fill_rect(0, y + w, Graphics.width, Graphics.height - y - w, color)
self.bitmap.fill_rect(0, y, x, w, color)
self.bitmap.fill_rect(x + w, y, Graphics.width - x - w, w, color)
end
else
self.visible = false
end
end
end
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias tmblsight_spriteset_map_initialize initialize
def initialize
tmblsight_spriteset_map_initialize
create_sight_shadow
end
#--------------------------------------------------------------------------
# ○ 視界制限スプライトの作成
#--------------------------------------------------------------------------
def create_sight_shadow
@sight_shadow_sprite = Sprite_SightShadow.new(@viewport2)
update_sight_shadow
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias tmblsight_spriteset_map_dispose dispose
def dispose
dispose_sight_shadow
tmblsight_spriteset_map_dispose
end
#--------------------------------------------------------------------------
# ○ 視界制限スプライトの解放
#--------------------------------------------------------------------------
def dispose_sight_shadow
@sight_shadow_sprite.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias tmblsight_spriteset_map_update update
def update
update_sight_shadow
tmblsight_spriteset_map_update
end
#--------------------------------------------------------------------------
# ○ 視界制限スプライトの更新
#--------------------------------------------------------------------------
def update_sight_shadow
@sight_shadow_sprite.update if @sight_shadow_sprite
end
end