「RPGツクールXP用
簡易サイドビュー戦闘スクリプトの公開」



【概要】
RPGツクールXP用のデフォルト戦闘をサイドビューにするスクリプトです。
味方のバトラーの位置を変更しているだけですので、ほぼデフォルト戦闘と
同じ感覚で簡単にサイドビュー戦闘にする事が可能です。

【使い方】
・まず、サイドビュー戦闘用のバトラーグラフィックを自前で用意する必要があります。
・バトラーグラフィックの基本画像サイズは48x48Pixelになります。
・データベース内、アクターのバトラーグラフィックを用意した物に変更します。
・データベース内のトループを新規作成し、エネミーをサイド用にあわせて配置します。
・スクリプトエディタを開き、Mainより上の位置にスクリプトをコピペするなどして挿入します。
・導入後は基本的にデフォルト戦闘と同じようにサイドビュー戦闘が実行されます。
・他の方が公開されているスクリプトとは共存できない場合があります。

【利用規約】
・本スクリプトは有償、無償に関わらず、自由にご利用いただけます。
・年齢制限のある作品でも利用が可能です。
・スクリプトの制作者(naya)への利用報告は必要ありません。
・READMEテキスト等へのクレジットの表記も不要です。
・本スクリプトを自作した物として単独で公開、販売をすることはできません。
・本スクリプトを改造した物を公開する場合は引用元を明記した上で公開してください。
・本スクリプトを利用した事により発生するいかなる問題にも制作者(naya)は一切の責任を負いません。
・以上の規約に同意していただける方のみ当スクリプトを利用する事ができます。


# 以下がスクリプトのテキストです。
#==============================================================================
# ★SimpleSideBattle(簡易サイドビュー戦闘)Ver1.0★
#   制作者:naya
#   作成日:2024/2/15
#------------------------------------------------------------------------------
#  シンプルなサイドビュー戦闘スクリプトです。
#   処理的には味方のバトラー画像の表示位置を変えているだけです。
#   戦闘自体はデフォルトどおりに動作します。
#==============================================================================

#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    # バトラーが nil の場合
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    # ファイル名か色相が現在のものと異なる場合
    if @battler.battler_name != @battler_name or
       @battler.battler_hue != @battler_hue
      # ビットマップを取得、設定
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height
      # 戦闘不能または隠れ状態なら不透明度を 0 にする
      if @battler.dead? or @battler.hidden
        self.opacity = 0
      end
    end
    # アニメーション ID が現在のものと異なる場合
    if @battler.damage == nil and
       @battler.state_animation_id != @state_animation_id
      @state_animation_id = @battler.state_animation_id
      loop_animation($data_animations[@state_animation_id])
    end
    # 表示されるべきアクターの場合
    if @battler.is_a?(Game_Actor) and @battler_visible
      self.opacity = 255
    end
    # 明滅
    if @battler.blink
      blink_on
    else
      blink_off
    end
    # 不可視の場合
    unless @battler_visible
      # 出現
      if not @battler.hidden and not @battler.dead? and
         (@battler.damage == nil or @battler.damage_pop)
        appear
        @battler_visible = true
      end
    end
    # 可視の場合
    if @battler_visible
      # 逃走
      if @battler.hidden
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      # 白フラッシュ
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      # アニメーション
      if @battler.animation_id != 0
        animation = $data_animations[@battler.animation_id]
        animation(animation, @battler.animation_hit)
        @battler.animation_id = 0
      end
      # ダメージ
      if @battler.damage_pop
        damage(@battler.damage, @battler.critical)
        @battler.damage = nil
        @battler.critical = false
        @battler.damage_pop = false
      end
      # コラプス
      if @battler.damage == nil and @battler.dead?
        if @battler.is_a?(Game_Enemy)
          $game_system.se_play($data_system.enemy_collapse_se)
        else
          $game_system.se_play($data_system.actor_collapse_se)
        end
        collapse
        @battler_visible = false
      end
    end
    # スプライトの座標を設定
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
end

#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # ビューポートを作成
    @viewport1 = Viewport.new(0, 0, 640, 320)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport4 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 21
    @viewport3.z = 200
    @viewport4.z = 5000
    # バトルバックスプライトを作成
    @battleback_sprite = Sprite.new(@viewport1)
    # エネミースプライトを作成
    @enemy_sprites = []
    for enemy in $game_troop.enemies.reverse
      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
    end
    # アクタースプライトを作成
    @actor_sprites = []
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    # 天候を作成
    @weather = RPG::Weather.new(@viewport1)
    # ピクチャスプライトを作成
    @picture_sprites = []
    for i in 51..100
      @picture_sprites.push(Sprite_Picture.new(@viewport3,
        $game_screen.pictures[i]))
    end
    # タイマースプライトを作成
    @timer_sprite = Sprite_Timer.new
    # フレーム更新
    update
  end
end

#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標の取得
  #--------------------------------------------------------------------------
  def screen_x
    # パーティ内の並び順から X 座標を計算して返す
    if self.index != nil
      return self.index * 16 + 512
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Y 座標の取得
  #--------------------------------------------------------------------------
  def screen_y
    # パーティ内の並び順から Y 座標を計算して返す
    if self.index != nil
      return self.index * 48 + 172
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Z 座標の取得
  #--------------------------------------------------------------------------
  def screen_z
    # パーティ内の並び順から Z 座標を計算して返す
    if self.index != nil
      return self.index
    else
      return 0
    end
  end
end

2024/2/16