388 lines
16 KiB
Ruby
388 lines
16 KiB
Ruby
#==============================================================================
|
|
# ■ Spriteset_Battle
|
|
#------------------------------------------------------------------------------
|
|
# バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ
|
|
# スの内部で使用されます。
|
|
#==============================================================================
|
|
|
|
class Spriteset_Battle
|
|
#--------------------------------------------------------------------------
|
|
# ● オブジェクト初期化
|
|
#--------------------------------------------------------------------------
|
|
def initialize
|
|
create_viewports
|
|
create_battleback1
|
|
create_battleback2
|
|
create_enemies
|
|
create_actors
|
|
create_pictures
|
|
create_timer
|
|
update
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ビューポートの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_viewports
|
|
@viewport1 = Viewport.new
|
|
@viewport2 = Viewport.new
|
|
@viewport3 = Viewport.new
|
|
@viewport2.z = 50
|
|
@viewport3.z = 100
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(床)スプライトの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_battleback1
|
|
@back1_sprite = Sprite.new(@viewport1)
|
|
@back1_sprite.bitmap = battleback1_bitmap
|
|
@back1_sprite.z = 0
|
|
center_sprite(@back1_sprite)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(壁)スプライトの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_battleback2
|
|
@back2_sprite = Sprite.new(@viewport1)
|
|
@back2_sprite.bitmap = battleback2_bitmap
|
|
@back2_sprite.z = 1
|
|
center_sprite(@back2_sprite)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(床)ビットマップの取得
|
|
#--------------------------------------------------------------------------
|
|
def battleback1_bitmap
|
|
if battleback1_name
|
|
Cache.battleback1(battleback1_name)
|
|
else
|
|
create_blurry_background_bitmap
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(壁)ビットマップの取得
|
|
#--------------------------------------------------------------------------
|
|
def battleback2_bitmap
|
|
if battleback2_name
|
|
Cache.battleback2(battleback2_name)
|
|
else
|
|
Bitmap.new(1, 1)
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● マップ画面を加工した戦闘背景用ビットマップの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_blurry_background_bitmap
|
|
source = SceneManager.background_bitmap
|
|
bitmap = Bitmap.new(640, 480)
|
|
bitmap.stretch_blt(bitmap.rect, source, source.rect)
|
|
bitmap.radial_blur(120, 16)
|
|
bitmap
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(床)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def battleback1_name
|
|
if $BTEST
|
|
$data_system.battleback1_name
|
|
elsif $game_map.battleback1_name
|
|
$game_map.battleback1_name
|
|
elsif $game_map.overworld?
|
|
overworld_battleback1_name
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(壁)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def battleback2_name
|
|
if $BTEST
|
|
$data_system.battleback2_name
|
|
elsif $game_map.battleback2_name
|
|
$game_map.battleback2_name
|
|
elsif $game_map.overworld?
|
|
overworld_battleback2_name
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フィールド 戦闘背景(床)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def overworld_battleback1_name
|
|
$game_player.vehicle ? ship_battleback1_name : normal_battleback1_name
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フィールド 戦闘背景(壁)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def overworld_battleback2_name
|
|
$game_player.vehicle ? ship_battleback2_name : normal_battleback2_name
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 通常時 戦闘背景(床)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def normal_battleback1_name
|
|
terrain_battleback1_name(autotile_type(1)) ||
|
|
terrain_battleback1_name(autotile_type(0)) ||
|
|
default_battleback1_name
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 通常時 戦闘背景(壁)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def normal_battleback2_name
|
|
terrain_battleback2_name(autotile_type(1)) ||
|
|
terrain_battleback2_name(autotile_type(0)) ||
|
|
default_battleback2_name
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 地形に対応する戦闘背景(床)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def terrain_battleback1_name(type)
|
|
case type
|
|
when 24,25 # 荒れ地
|
|
"Wasteland"
|
|
when 26,27 # 土肌
|
|
"DirtField"
|
|
when 32,33 # 砂漠
|
|
"Desert"
|
|
when 34 # 岩地
|
|
"Lava1"
|
|
when 35 # 岩地(溶岩)
|
|
"Lava2"
|
|
when 40,41 # 雪原
|
|
"Snowfield"
|
|
when 42 # 雲
|
|
"Clouds"
|
|
when 4,5 # 毒の沼
|
|
"PoisonSwamp"
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 地形に対応する戦闘背景(壁)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def terrain_battleback2_name(type)
|
|
case type
|
|
when 20,21 # 森
|
|
"Forest1"
|
|
when 22,30,38 # 低い山
|
|
"Cliff"
|
|
when 24,25,26,27 # 荒れ地、土肌
|
|
"Wasteland"
|
|
when 32,33 # 砂漠
|
|
"Desert"
|
|
when 34,35 # 岩地
|
|
"Lava"
|
|
when 40,41 # 雪原
|
|
"Snowfield"
|
|
when 42 # 雲
|
|
"Clouds"
|
|
when 4,5 # 毒の沼
|
|
"PoisonSwamp"
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● デフォルト 戦闘背景(床)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def default_battleback1_name
|
|
"Grassland"
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● デフォルト 戦闘背景(壁)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def default_battleback2_name
|
|
"Grassland"
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 乗船時 戦闘背景(床)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def ship_battleback1_name
|
|
"Ship"
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 乗船時 戦闘背景(壁)ファイル名の取得
|
|
#--------------------------------------------------------------------------
|
|
def ship_battleback2_name
|
|
"Ship"
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● プレイヤーの足元にあるオートタイルの種類を取得
|
|
#--------------------------------------------------------------------------
|
|
def autotile_type(z)
|
|
$game_map.autotile_type($game_player.x, $game_player.y, z)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● スプライトを画面中央に移動
|
|
#--------------------------------------------------------------------------
|
|
def center_sprite(sprite)
|
|
sprite.ox = sprite.bitmap.width / 2
|
|
sprite.oy = sprite.bitmap.height / 2
|
|
sprite.x = Graphics.width / 2
|
|
sprite.y = Graphics.height / 2
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 敵キャラスプライトの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_enemies
|
|
@enemy_sprites = $game_troop.members.reverse.collect do |enemy|
|
|
Sprite_Battler.new(@viewport1, enemy)
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● アクタースプライトの作成
|
|
# デフォルトではアクター側の画像は表示しないが、便宜上、敵と味方を同じ
|
|
# ように扱うためにダミーのスプライトを作成する。
|
|
#--------------------------------------------------------------------------
|
|
def create_actors
|
|
@actor_sprites = Array.new(4) { Sprite_Battler.new(@viewport1) }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ピクチャスプライトの作成
|
|
# 初期状態では空の配列だけ作っておき、必要になった時点で追加する。
|
|
#--------------------------------------------------------------------------
|
|
def create_pictures
|
|
@picture_sprites = []
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● タイマースプライトの作成
|
|
#--------------------------------------------------------------------------
|
|
def create_timer
|
|
@timer_sprite = Sprite_Timer.new(@viewport2)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose
|
|
dispose_battleback1
|
|
dispose_battleback2
|
|
dispose_enemies
|
|
dispose_actors
|
|
dispose_pictures
|
|
dispose_timer
|
|
dispose_viewports
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(床)スプライトの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_battleback1
|
|
@back1_sprite.bitmap.dispose
|
|
@back1_sprite.dispose
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(壁)スプライトの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_battleback2
|
|
@back2_sprite.bitmap.dispose
|
|
@back2_sprite.dispose
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 敵キャラスプライトの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_enemies
|
|
@enemy_sprites.each {|sprite| sprite.dispose }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● アクタースプライトの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_actors
|
|
@actor_sprites.each {|sprite| sprite.dispose }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ピクチャスプライトの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_pictures
|
|
@picture_sprites.compact.each {|sprite| sprite.dispose }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● タイマースプライトの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_timer
|
|
@timer_sprite.dispose
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ビューポートの解放
|
|
#--------------------------------------------------------------------------
|
|
def dispose_viewports
|
|
@viewport1.dispose
|
|
@viewport2.dispose
|
|
@viewport3.dispose
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● フレーム更新
|
|
#--------------------------------------------------------------------------
|
|
def update
|
|
update_battleback1
|
|
update_battleback2
|
|
update_enemies
|
|
update_actors
|
|
update_pictures
|
|
update_timer
|
|
update_viewports
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(床)スプライトの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_battleback1
|
|
@back1_sprite.update
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘背景(壁)スプライトの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_battleback2
|
|
@back2_sprite.update
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 敵キャラスプライトの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_enemies
|
|
@enemy_sprites.each {|sprite| sprite.update }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● アクタースプライトの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_actors
|
|
@actor_sprites.each_with_index do |sprite, i|
|
|
sprite.battler = $game_party.members[i]
|
|
sprite.update
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ピクチャスプライトの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_pictures
|
|
$game_troop.screen.pictures.each do |pic|
|
|
@picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
|
|
@picture_sprites[pic.number].update
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● タイマースプライトの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_timer
|
|
@timer_sprite.update
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ビューポートの更新
|
|
#--------------------------------------------------------------------------
|
|
def update_viewports
|
|
@viewport1.tone.set($game_troop.screen.tone)
|
|
@viewport1.ox = $game_troop.screen.shake
|
|
@viewport2.color.set($game_troop.screen.flash_color)
|
|
@viewport3.color.set(0, 0, 0, 255 - $game_troop.screen.brightness)
|
|
@viewport1.update
|
|
@viewport2.update
|
|
@viewport3.update
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 敵キャラとアクターのスプライトを取得
|
|
#--------------------------------------------------------------------------
|
|
def battler_sprites
|
|
@enemy_sprites + @actor_sprites
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● アニメーション表示中判定
|
|
#--------------------------------------------------------------------------
|
|
def animation?
|
|
battler_sprites.any? {|sprite| sprite.animation? }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● エフェクト実行中判定
|
|
#--------------------------------------------------------------------------
|
|
def effect?
|
|
battler_sprites.any? {|sprite| sprite.effect? }
|
|
end
|
|
end
|