#==============================================================================
# 天候の追加 By 貪藻矢射妥←
#------------------------------------------------------------------------------
# 天候は以下の通り。イベントのスクリプトで呼び出そう。(1〜3は省略)
#
# 吹雪 $game_screen.weather( 4, 強さ(1〜9), ウェイト)
# 血の雨 $game_screen.weather( 5, 強さ(1〜9), ウェイト)
# 血の嵐 $game_screen.weather( 6, 強さ(1〜9), ウェイト)
# 赤い雪 $game_screen.weather( 7, 強さ(1〜9), ウェイト)
# 赤い吹雪 $game_screen.weather( 8, 強さ(1〜9), ウェイト)
# 桜吹雪 $game_screen.weather( 9, 強さ(1〜9), ウェイト)
# 紅葉 $game_screen.weather(10, 強さ(1〜9), ウェイト)
# 雹 $game_screen.weather(11, 強さ(1〜9), ウェイト)
# 血の雹 $game_screen.weather(12, 強さ(1〜9), ウェイト)
# 霙 $game_screen.weather(13, 強さ(1〜9), ウェイト)
# 血の霙 $game_screen.weather(14, 強さ(1〜9), ウェイト)
# 氷雨 $game_screen.weather(15, 強さ(1〜9), ウェイト)
# 血の氷雨 $game_screen.weather(16, 強さ(1〜9), ウェイト)
# 黒い雨 $game_screen.weather(17, 強さ(1〜9), ウェイト)
# お札 $game_screen.weather(18, 強さ(1〜9), ウェイト)
#
# ※強さは実際には 0<n<=9 ならば何でもいいハズ。
#
#==============================================================================
# 更新っぽいもの
# 2005:10:27
# ・桜吹雪、紅葉を追加
#
# 2005:10:28
# ・雪を画像にするかどうかを設定可能に
# ・桜吹雪、紅葉の降らせる画像パターンを増やした
# ・無駄な行を省いてみた
#
# 2006:03:15
# ・雹、霙を追加
#
# 2006:03:22
# ・雪の画像タイプを廃棄
# ・無駄な行を省いてみた
#
# 2006:03:26
# ・氷雨、黒い雨、お札を追加
# ・無駄な行を省いてみた
# ・霙の雨の部分のアルファ値を128に修正
# ・雪の降らせ方を変更できるように修正
#
# 2008:12:24
# ・カスタマイズポイントを追加
# ・天候の画像の最大数を変更可能に
#
# 2010:12:04
# ・微修正
module W_RT
include BM
# 雪、吹雪を直線的に降らすかゆらゆらさせるか。(true:ゆらゆら false:直線)
# 霙の場合、雨で水分を含むのでゆらゆらさせないようにしてます。
# (設定が面倒ってな理由もあったり・・・)
LQD_FLG = false
# 読み込む画像
W_CG = "sakura.png"
# 雪の色
SNOW_COLOR1 = Color.new(255, 255, 255, MAX8BIT)
SNOW_COLOR2 = SNOW_COLOR1.clone
SNOW_COLOR2.alpha = HARF8BIT
# 雨の色
RAIN_COLOR1 = Color.new(192, 255, 255, MAX8BIT)
RAIN_COLOR2 = Color.new(200, 255, 255, MAX8BIT)
RAIN_COLOR3 = RAIN_COLOR1.clone
RAIN_COLOR3.alpha = HARF8BIT
# 血の雨の色
BLOOD_COLOR1 = Color.new(192, 0, 0, MAX8BIT)
BLOOD_COLOR2 = Color.new(200, 0, 0, MAX8BIT)
BLOOD_COLOR3 = BLOOD_COLOR1.clone
BLOOD_COLOR3.alpha = HARF8BIT
# 血の氷の色
C_BLOOD_COLOR1 = Color.new(200, 100, 100, MAX8BIT)
C_BLOOD_COLOR2 = C_BLOOD_COLOR1.clone
C_BLOOD_COLOR2.alpha = HARF8BIT
# 黒い雨の色
BLACK_COLOR = Color.new( 0, 0, 0, MAX8BIT)
# オブジェクトの最大値基礎
# 通常は4.0
OBJ_MAX = 12.0
# 画像の基本サイズ
CG_SIZE = 24
# 霙とかの雨/雪比率の雨の比率
RAIN_RATE = 2
# 霙とかの雨/雪比率の雪の比率
SNOW_RATE = 3
end
#==============================================================================
# ■ Game_Screen
#------------------------------------------------------------------------------
# 色調変更やフラッシュなど、画面全体に関係する処理のデータを保持するクラスで
# す。このクラスのインスタンスは $game_screen で参照されます。
#==============================================================================
class Game_Screen
include W_RT
#--------------------------------------------------------------------------
# ● 天候の設定
# type : タイプ
# power : 強さ
# duration : 時間
#--------------------------------------------------------------------------
def weather(type, power, duration)
@weather_type_target = type
if @weather_type_target != 0
@weather_type = @weather_type_target
end
if @weather_type_target == 0
@weather_max_target = 0.0
else
@weather_max_target = (power + 1) * OBJ_MAX
end
@weather_duration = duration
if @weather_duration == 0
@weather_type = @weather_type_target
@weather_max = @weather_max_target
end
end
end
module RPG
class Weather
include BM
include W_RT
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport = nil)
@type = 0
@max = 0
@ox = 0
@oy = 0
@luquid = LQD_FLG
@snowb = true
# 読み込む画像の分割
@b_re1 = Rect.new(0 * CG_SIZE, 0, CG_SIZE, CG_SIZE) # 桜の位置1
@b_re2 = Rect.new(1 * CG_SIZE, 0, CG_SIZE, CG_SIZE) # 桜の位置2
@b_re3 = Rect.new(2 * CG_SIZE, 0, CG_SIZE, CG_SIZE) # 銀杏の位置1
@b_re4 = Rect.new(3 * CG_SIZE, 0, CG_SIZE, CG_SIZE) # 銀杏の位置2
@b_re5 = Rect.new(4 * CG_SIZE, 0, CG_SIZE, CG_SIZE) # 紅葉の位置1
@b_re6 = Rect.new(5 * CG_SIZE, 0, CG_SIZE, CG_SIZE) # 紅葉の位置2
@b_re7 = Rect.new(6 * CG_SIZE, 0, CG_SIZE, CG_SIZE) # お札の位置
# 読み込む画像
@sh_c = RPG::Cache.picture(W_CG)
# 雨の場合
@rain_bitmap = Bitmap.new(7, 56)
for i in 0..6
@rain_bitmap.fill_rect(6-i, i*8, 1, 8, RAIN_COLOR1)
end
# 血の雨の場合
@bloodrain_bitmap = Bitmap.new(7, 56)
for i in 0..6
@bloodrain_bitmap.fill_rect(6-i, i*8, 1, 8, BLOOD_COLOR2)
end
# 黒い雨の場合
@blackrain_bitmap = Bitmap.new(7, 56)
for i in 0..6
@blackrain_bitmap.fill_rect(6-i, i*8, 1, 8, BLACK_COLOR)
end
# 嵐の場合
@storm_bitmap = Bitmap.new(34, 64)
for i in 0..31
@storm_bitmap.fill_rect(33-i, i*2, 1, 2, RAIN_COLOR2)
@storm_bitmap.fill_rect(32-i, i*2, 1, 2, RAIN_COLOR1)
@storm_bitmap.fill_rect(31-i, i*2, 1, 2, RAIN_COLOR2)
end
# 血の嵐の場合
@bloodstorm_bitmap = Bitmap.new(34, 64)
for i in 0..31
@bloodstorm_bitmap.fill_rect(33-i, i*2, 1, 2, BLOOD_COLOR2)
@bloodstorm_bitmap.fill_rect(32-i, i*2, 1, 2, BLOOD_COLOR1)
@bloodstorm_bitmap.fill_rect(31-i, i*2, 1, 2, BLOOD_COLOR2)
end
# 雪の場合
@snow_bitmap = Bitmap.new(6, 6)
@snow_bitmap.fill_rect(0, 1, 6, 4, SNOW_COLOR2)
@snow_bitmap.fill_rect(1, 0, 4, 6, SNOW_COLOR2)
@snow_bitmap.fill_rect(1, 2, 4, 2, SNOW_COLOR1)
@snow_bitmap.fill_rect(2, 1, 2, 4, SNOW_COLOR1)
# 赤い雪の場合
@bloodsnow_bitmap = Bitmap.new(6, 6)
@bloodsnow_bitmap.fill_rect(0, 1, 6, 4, BLOOD_COLOR3)
@bloodsnow_bitmap.fill_rect(1, 0, 4, 6, BLOOD_COLOR3)
@bloodsnow_bitmap.fill_rect(1, 2, 4, 2, BLOOD_COLOR1)
@bloodsnow_bitmap.fill_rect(2, 1, 2, 4, BLOOD_COLOR1)
# 雹の場合
@hyou_bitmap = Bitmap.new(8, 8)
@hyou_bitmap.fill_rect(0, 1, 8, 6, RAIN_COLOR3)
@hyou_bitmap.fill_rect(1, 0, 6, 8, RAIN_COLOR3)
@hyou_bitmap.fill_rect(1, 2, 6, 4, RAIN_COLOR1)
@hyou_bitmap.fill_rect(2, 1, 4, 6, RAIN_COLOR1)
# 血の雹の場合
@bloodhyou_bitmap = Bitmap.new(8, 8)
@bloodhyou_bitmap.fill_rect(0, 1, 8, 6, C_BLOOD_COLOR2)
@bloodhyou_bitmap.fill_rect(1, 0, 6, 8, C_BLOOD_COLOR2)
@bloodhyou_bitmap.fill_rect(1, 2, 6, 4, C_BLOOD_COLOR1)
@bloodhyou_bitmap.fill_rect(2, 1, 4, 6, C_BLOOD_COLOR1)
# 桜吹雪の場合
@sakurahubuki_bitmap = Bitmap.new(48, 48)
@sakurahubuki_bitmap.stretch_blt(Rect.new( 0, 0, 24, 24), @sh_c, @b_re1)
@sakurahubuki_bitmap.stretch_blt(Rect.new(15, 8, 22, 22), @sh_c, @b_re2)
@sakurahubuki_bitmap.stretch_blt(Rect.new( 6, 20, 20, 20), @sh_c, @b_re1)
@sakurahubuki_bitmap2 = Bitmap.new(48, 48)
@sakurahubuki_bitmap2.stretch_blt(Rect.new( 0, 0, 24, 24), @sh_c, @b_re1)
@sakurahubuki_bitmap2.stretch_blt(Rect.new(15, 8, 22, 22), @sh_c, @b_re2)
@sakurahubuki_bitmap3 = Bitmap.new(48, 48)
@sakurahubuki_bitmap3.stretch_blt(Rect.new( 0, 0, 24, 24), @sh_c, @b_re1)
# 紅葉の場合
@kouyou_bitmap = Bitmap.new(100, 100)
@kouyou_bitmap.stretch_blt(Rect.new( 0, 0, 32, 32), @sh_c, @b_re5)
@kouyou_bitmap2 = Bitmap.new(100, 100)
@kouyou_bitmap2.stretch_blt(Rect.new(15, 30, 30, 30), @sh_c, @b_re4)
@kouyou_bitmap3 = Bitmap.new(100, 100)
@kouyou_bitmap3.stretch_blt(Rect.new(50, 27, 30, 30), @sh_c, @b_re6)
@kouyou_bitmap4 = Bitmap.new(100, 100)
@kouyou_bitmap4.stretch_blt(Rect.new(45, 57, 26, 26), @sh_c, @b_re3)
# お札の場合
@osatu_bitmap = Bitmap.new(24, 24)
@osatu_bitmap.stretch_blt(Rect.new( 0, 0, 24, 24), @sh_c, @b_re7)
@sprites = []
for i in 1..Integer(OBJ_MAX * 10)
sprite = Sprite.new(viewport)
sprite.z = 1000
sprite.visible = false
sprite.opacity = 0
@sprites.push(sprite)
end
end
#--------------------------------------------------------------------------
# ○ 天候エフェクト解放
#--------------------------------------------------------------------------
def dispose
for sprite in @sprites
sprite.dispose
end
@rain_bitmap.dispose
@storm_bitmap.dispose
@snow_bitmap.dispose
@bloodrain_bitmap.dispose
@bloodstorm_bitmap.dispose
@bloodsnow_bitmap.dispose
@sakurahubuki_bitmap.dispose
@sakurahubuki_bitmap2.dispose
@sakurahubuki_bitmap3.dispose
@kouyou_bitmap.dispose
@kouyou_bitmap2.dispose
@kouyou_bitmap3.dispose
@kouyou_bitmap4.dispose
@hyou_bitmap.dispose
@bloodhyou_bitmap.dispose
@blackrain_bitmap.dispose
@osatu_bitmap.dispose
@sh_c.dispose
end
#--------------------------------------------------------------------------
# ○ 天候エフェクト変更
#--------------------------------------------------------------------------
def type=(type)
return if @type == type
@type = type
case @type
when 1 || 13 || 15
bitmap = @rain_bitmap
when 2
bitmap = @storm_bitmap
when 3
bitmap = @snow_bitmap
when 4
bitmap = @snow_bitmap
when 5 || 14 || 16
bitmap = @bloodrain_bitmap
when 6
bitmap = @bloodstorm_bitmap
when 7
bitmap = @bloodsnow_bitmap
when 8
bitmap = @bloodsnow_bitmap
when 9
bitmap = @sakurahubuki_bitmap
when 10
bitmap = @kouyou_bitmap
when 11
bitmap = @hyou_bitmap
when 12
bitmap = @bloodhyou_bitmap
when 17
bitmap = @blackrain_bitmap
when 18
bitmap = @osatu_bitmap
else
bitmap = nil
end
for i in 1..Integer(OBJ_MAX * 10)
sprite = @sprites[i]
if sprite != nil
sprite.visible = (i <= @max)
sprite.bitmap = bitmap
end
end
end
#--------------------------------------------------------------------------
# ○ 転送元原点の X 座標
#--------------------------------------------------------------------------
def ox=(ox)
return if @ox == ox;
@ox = ox
for sprite in @sprites
sprite.ox = @ox
end
end
#--------------------------------------------------------------------------
# ○ 転送元原点の Y 座標
#--------------------------------------------------------------------------
def oy=(oy)
return if @oy == oy;
@oy = oy
for sprite in @sprites
sprite.oy = @oy
end
end
#--------------------------------------------------------------------------
# ○ オブジェクトの最大量
#--------------------------------------------------------------------------
def max=(max)
return if @max == max;
@max = [[max, 0].max, Integer(OBJ_MAX * 10)].min
for i in 1..Integer(OBJ_MAX * 10)
sprite = @sprites[i]
if sprite != nil
sprite.visible = (i <= @max)
end
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新
#--------------------------------------------------------------------------
def update
return if @type == 0
for i in 1..@max
sprite = @sprites[i]
if sprite == nil
break
end
# 左右反転しない天候(桜吹雪、紅葉以外全部)
if (@type >= 1 && @type <= 8) || (@type >= 11 && @type <= 17)
sprite.mirror = false
end
# 雨、嵐、吹雪、雹のy移動数値
if @type == 1 || @type == 2 || (@type >= 4 && @type <= 6) || @type == 8 ||
@type == 11 || @type == 12 || @type == 17
sprite.y += 16
end
# 雨、雪、桜吹雪、紅葉、霙、氷雨、お札の消失数
if @type == 1 || @type == 3 || @type == 5 || @type == 7 ||
(@type >= 9 && @type <= 18)
sprite.opacity -= 8
end
# 雨、霙、氷雨のx移動数値
if @type == 1 || @type == 5 || (@type >= 11 && @type <= 17)
sprite.x -= 2
end
# 雪のx移動数値
if @type == 3 || @type == 7
if @snowb == true
sprite.x -= (1 + 3 * Math.cos(30 * rand(12)))
else
sprite.x -= 2
end
end
# 嵐のx移動数値+消失数
if @type == 2 || @type == 6
sprite.x -= 8
sprite.opacity -= 12
end
# 吹雪のx移動数値+消失数
if @type == 4 || @type == 8
if @snowb == true
sprite.x -= (6 + 4 * Math.cos(30 * rand(12)))
else
sprite.x -= 8
end
sprite.opacity -= 12
end
# 雪のy移動数値
if @type == 3 || @type == 7
sprite.y += 8
end
# 桜吹雪、紅葉のx、y移動数値
if @type == 9 || @type == 10 || @type == 18
sprite.x -= (2 * Math.cos(30 * rand(12)))
sprite.y += 4
end
# 霙、氷雨の場合
if (@type >= 13 && @type <= 16)
# 比率によって雨と雪(雹)に変更する
r = rand(RAIN_RATE + SNOW_RATE)
if (r > RAIN_RATE - 1)
@luquid = false
if @type == 13
sprite.y += 8
sprite.bitmap = @snow_bitmap
elsif @type == 14
sprite.y += 8
sprite.bitmap = @bloodsnow_bitmap
elsif @type == 15
sprite.y += 16
sprite.bitmap = @hyou_bitmap
else
sprite.y += 16
sprite.bitmap = @bloodhyou_bitmap
end
else
@luquid = true
sprite.y += 16
if @type == 13 || @type == 15
sprite.bitmap = @rain_bitmap
else
sprite.bitmap = @bloodrain_bitmap
end
end
end
x = sprite.x - @ox
y = sprite.y - @oy
if sprite.opacity < 64 or x < -50 or x > 750 or y < -300 or y > 500
sprite.x = rand(800) - 50 + @ox
sprite.y = rand(800) - 200 + @oy
# 雨など液体が降る場合最初の透明度を127に
if @type == 1 || @type == 2 || @type == 5 || @type == 6 ||
(@luquid == true && (@type >= 13 && @type <= 16)) || @type == 17
sprite.opacity = HARF8BIT
# 雪、雹など固体の場合最初の透明度を255に
else
sprite.opacity = MAX8BIT
end
# 桜吹雪、紅葉、お札の場合の左右反転のための処理
if (@type >= 9 && @type <= 10) || @type == 18
mi = rand(2)
if mi == 0
sprite.mirror = true
else
sprite.mirror = false
end
else
sprite.mirror = false
end
# 桜吹雪のパターン変化
if @type == 9
r = rand(3)
case r
when 0
sprite.bitmap = @sakurahubuki_bitmap
when 1
sprite.bitmap = @sakurahubuki_bitmap2
when 2
sprite.bitmap = @sakurahubuki_bitmap3
end
end
# 紅葉のパターン変化
if @type == 10
r = rand(4)
case r
when 0
sprite.bitmap = @kouyou_bitmap
when 1
sprite.bitmap = @kouyou_bitmap2
when 2
sprite.bitmap = @kouyou_bitmap3
when 3
sprite.bitmap = @kouyou_bitmap4
end
end
end
end
end
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :type
attr_reader :max
attr_reader :ox
attr_reader :oy
end
end
|