#◆◇◆◇◆ ☆ バトラーバックアニメ RTAB ver 1.01 ◇◆◇◆◇ # ☆ マスタースクリプト ver 2.00 以降専用 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと # リアルタイム・アクティブバトル(RTAB) ver 1.16 # 配布元・サポートURL(歯車の城) # http://members.jcom.home.ne.jp/cogwheel/ # by ショウ =begin 更新履歴 ver 1.01 1度回転が行われていたミスを修正 セクション指定上下関係 A・C・A・システム ↓ 自動反転アニメ ↓ このスクリプト 説明 デフォルトでは、 全てのアニメはバトラーの上に重なって表示されますが、 セルの回転度が 1 の場合、 バトラーの背後にそのセルのアニメを表示します。 1でない場合は通常通りの処理を実行します。 その際、アニメーションエディタ上では、 1度回転が実行されていますが、 ゲーム上での実際の処理では、 1度回転は無視され、回転無しとして扱われます。 魔法陣や、ビーム攻撃などに向いているかもしれません。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # バトラーバックアニメを有効化 ( true で有効 / false で無効 ) RGSS["バトラーバックアニメ"] = true end if MINTO::RGSS["バトラーバックアニメ"] #============================================================================= # ■ RPG::Sprite #----------------------------------------------------------------------------- # ゲーム中のスプライトを扱うクラスです。 #============================================================================= module RPG class Sprite < ::Sprite #----------------------------------------------------------------------- # ● アニメーション #----------------------------------------------------------------------- def animation(animation, hit) return if animation == nil num = @_animation.size @_animation.push([animation, hit, animation.frame_max, []]) bitmap = RPG::Cache.animation(animation.animation_name, animation.animation_hue) if @@_reference_count.include?(bitmap) @@_reference_count[bitmap] += 1 else @@_reference_count[bitmap] = 1 end if @_animation[num][0].position != 3 or not @@_animations.include?(animation) for i in 0..15 sprite = ::Sprite.new(self.viewport) sprite.bitmap = bitmap sprite.visible = false @_animation[num][3].push(sprite) end unless @@_animations.include?(animation) @@_animations.push(animation) end end update_animation(@_animation[num]) end #----------------------------------------------------------------------- # ● アニメーション・セットスプライト # sprites : アニメのスプライト # cell_data : アニメセルのデータ # position : アニメの位置 #----------------------------------------------------------------------- def animation_set_sprites(sprites, cell_data, position) # 各アニメをセット animation_set(sprites, cell_data, position, 0) animation_set(sprites, cell_data, position, 1) animation_set(sprites, cell_data, position, 2) animation_set(sprites, cell_data, position, 3) animation_set(sprites, cell_data, position, 4) animation_set(sprites, cell_data, position, 5) animation_set(sprites, cell_data, position, 6) animation_set(sprites, cell_data, position, 7) animation_set(sprites, cell_data, position, 8) animation_set(sprites, cell_data, position, 9) animation_set(sprites, cell_data, position, 10) animation_set(sprites, cell_data, position, 11) animation_set(sprites, cell_data, position, 12) animation_set(sprites, cell_data, position, 13) animation_set(sprites, cell_data, position, 14) animation_set(sprites, cell_data, position, 15) end #----------------------------------------------------------------------- # ● アニメーション・セット # sprites : アニメのスプライト # cell_data : アニメセルのデータ # position : アニメの位置 #----------------------------------------------------------------------- def animation_set(sprites, cell_data, position, i) sprite = sprites[i] pattern = cell_data[i, 0] if sprite == nil or pattern == nil or pattern == -1 sprite.visible = false if sprite != nil return end sprite.visible = true sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192) if position == 3 if self.viewport != nil sprite.x = self.viewport.rect.width / 2 if $game_temp.in_battle and self.battler.is_a?(Game_Enemy) sprite.y = self.viewport.rect.height - 320 else sprite.y = self.viewport.rect.height - 160 end else sprite.x = 320 sprite.y = 240 end else sprite.x = self.x + self.viewport.rect.x - self.ox + self.src_rect.width / 2 if $game_temp.in_battle and self.battler.is_a?(Game_Enemy) sprite.y = self.y - self.oy * self.zoom_y / 2 + self.viewport.rect.y if position == 0 sprite.y -= self.src_rect.height * self.zoom_y / 4 elsif position == 2 sprite.y += self.src_rect.height * self.zoom_y / 4 end else sprite.y = self.y + self.viewport.rect.y - self.oy + self.src_rect.height / 2 sprite.y -= self.src_rect.height / 4 if position == 0 sprite.y += self.src_rect.height / 4 if position == 2 end end sprite.x += cell_data[i, 1] sprite.y += cell_data[i, 2] sprite.z = cell_data[i, 4] == 1 ? 0 : 2000 sprite.ox = 96 sprite.oy = 96 sprite.zoom_x = cell_data[i, 3] / 100.0 sprite.zoom_y = cell_data[i, 3] / 100.0 if position != 3 sprite.zoom_x *= self.zoom_x sprite.zoom_y *= self.zoom_y end sprite.angle = cell_data[i, 4] == 1 ? 0 : cell_data[i, 4] sprite.mirror = (cell_data[i, 5] == 1) sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 sprite.blend_type = cell_data[i, 7] end end end end