Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

RTAB compatible with Japanese still-side view system

Kaoii

Member

This is the Japanese still side view system. It uses your heros' sprites as battle animations instead of a battler.

Code:
module SDVA

X_LINE = 500 # 横位置のバトラー表示座標
Y_LINE = 200 # 縦位置のバトラー表示座標
X_SPACE = 15 # 横位置のバトラー同士の間隔
Y_SPACE = 40 # 縦位置のバトラー同士の間隔
X_POSITION = 25 # 隊列[前衛・中衛・後衛]の横間隔
Y_POSITION = 0 # 隊列[前衛・中衛・後衛]の縦間隔

ATTACK_MOVE = true # 攻撃時に前へ踏み出すか( true / false )
SKILL_MOVE = true # スキル使用時に前へ踏み出すか( true / false )
ITEM_MOVE = false # アイテム使用時に前へ踏み出すか( true / false )
MOVE_STEP = 1 # 移動歩数
MOVE_PIXEL = 10 # 一歩あたりのピクセル数

PARTY_POS = 1 # キャラクターの向き( 0:下 / 1:左 / 2:右 / 3:上 )

WINDOWPOS_CHANGE = true # コマンドウインドウをバトラーの横に表示するか( true / false )

end

#==============================================================================
# â–  Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def screen_x
if self.index != nil
# 隊列を取得
pos = $data_classes[self.class_id].position
x_pos = pos * SDVA::X_POSITION
scr_x = self.index * SDVA::X_SPACE + SDVA::X_LINE + x_pos
# 移動アクションのとき
if self.current_action.move_action == true
# 横に移動
scr_x += @shift_x
end
return scr_x
else
return 0
end
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y
if self.index != nil
# 隊列を取得
pos = $data_classes[self.class_id].position
y_pos = pos * SDVA::Y_POSITION
scr_y = self.index * SDVA::Y_SPACE + SDVA::Y_LINE + y_pos
# 移動アクションのとき
if self.current_action.move_action == true
# 縦に移動
scr_y += @shift_y
end
return scr_y
else
return 0
end
end
#--------------------------------------------------------------------------
# ● バトル画面 Z 座標の取得
#--------------------------------------------------------------------------
def screen_z
if self.index != nil
return self.index
else
return 0
end
end
end

#==============================================================================
# ■ Game_Battler (分割定義 1)
#==============================================================================

class Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :pattern # 歩行パターン
attr_reader :trans_x # X方向の移動距離
attr_reader :moving # 移動中フラグ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_sdva initialize
def initialize
initialize_sdva
move_reset
end
#--------------------------------------------------------------------------
# ○ 移動カウント
#--------------------------------------------------------------------------
def move
@moving = 1
if @step < SDVA::MOVE_STEP
# 歩数を満たすまで移動
@pattern = (@pattern + 1) % 4
@step += 1
move_step
else
# 移動終了
@pattern = 1
@moving = 2
end
end
#--------------------------------------------------------------------------
# ○ 移動処理
#--------------------------------------------------------------------------
def move_step
# パーティの向きによって移動座標を変える
case SDVA::PARTY_POS
when 0
@shift_y = @step * SDVA::MOVE_PIXEL
when 1
@shift_x = -(@step * SDVA::MOVE_PIXEL)
when 2
@shift_x = @step * SDVA::MOVE_PIXEL
when 3
@shift_y = -(@step * SDVA::MOVE_PIXEL)
end
end
#--------------------------------------------------------------------------
# ○ 移動のリセット
#--------------------------------------------------------------------------
def move_reset
@moving = 0
@pattern = 0
@step = 0
@shift_x = 0
@shift_y = 0
end
end

#==============================================================================
# â–  Game_BattleAction
#==============================================================================

class Game_BattleAction
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :move_action # 移動するアクションか
#--------------------------------------------------------------------------
# ● クリア
#--------------------------------------------------------------------------
alias clear_sdva clear
def clear
clear_sdva
@move_action = false
end
end

#==============================================================================
# â–  Sprite_Battler
#==============================================================================

class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_sdva update
def update
# バトラーがアクターに含まれるとき
if @battler.is_a?(Game_Actor)
# ファイル名か色相が現在のものと異なる場合
# 行動中の場合
if @battler.battler_name != @battler_name or
@battler.battler_hue != @battler_hue or
@battler.current_action.basic == 0 or
@battler.current_action.kind != 3
# ビットマップを取得、設定
@character_name = @battler.character_name
@character_hue = @battler.character_hue
# 歩行グラフィックを描画
self.bitmap = RPG::Cache.character(@character_name, @character_hue)
cw = self.bitmap.width / 4
ch = self.bitmap.height / 4
@width = cw
@height = ch
if @battler.current_action.move_action == true
# 歩かせる
@battler.move
else
@battler.move_reset
end
# 転送元の矩形を設定
sx = @battler.pattern * cw
sy = SDVA::PARTY_POS * ch
self.src_rect.set(sx, sy, cw, ch)
self.ox = @width / 2
self.oy = @height
# 隠れ状態なら不透明度を 0 にする
if @battler.hidden
self.opacity = 0
end
end
end
update_sdva
end
end

#==============================================================================
# â–  Scene_Battle
#==============================================================================

class Scene_Battle
#--------------------------------------------------------------------------
# ● アクターコマンドウィンドウのセットアップ
#--------------------------------------------------------------------------
alias phase3_setup_command_window_sdva phase3_setup_command_window
def phase3_setup_command_window
phase3_setup_command_window_sdva
if SDVA::WINDOWPOS_CHANGE
# アクターコマンドウィンドウの位置を設定
case SDVA::PARTY_POS
when 0
x_pos = @active_battler.screen_x - (@actor_command_window.width/2)
y_pos = @active_battler.screen_y
when 1
x_pos = @active_battler.screen_x - @actor_command_window.width - 16
y_pos = @active_battler.screen_y - @actor_command_window.height
when 2
x_pos = @active_battler.screen_x + 16
y_pos = @active_battler.screen_y - @actor_command_window.height
when 3
x_pos = @active_battler.screen_x - (@actor_command_window.width/2)
y_pos = @active_battler.screen_y - @actor_command_window.height - 48
end
@actor_command_window.x = x_pos >= 0 ? x_pos : 0
@actor_command_window.x = x_pos+@actor_command_window.width <= 640 ? x_pos : 640-@actor_command_window.width
@actor_command_window.y = y_pos >= 0 ? y_pos : 0
@actor_command_window.y = y_pos+@actor_command_window.height <= 480 ? y_pos : 480-@actor_command_window.height
# ステータスウインドウに隠れないように
@actor_command_window.z = 9999
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
#--------------------------------------------------------------------------
alias update_phase4_step3_sdva update_phase4_step3
def update_phase4_step3
if SDVA::ATTACK_MOVE
if @active_battler.current_action.basic == 0
@active_battler.current_action.move_action = true
end
end
if SDVA::SKILL_MOVE
if @active_battler.current_action.kind == 1
@active_battler.current_action.move_action = true
end
end
if SDVA::ITEM_MOVE
if @active_battler.current_action.kind == 2
@active_battler.current_action.move_action = true
end
end
# バトラーがアクターに含まれ、移動アクション中
if @active_battler.is_a?(Game_Actor) and
@active_battler.current_action.move_action
# 移動終了時
if @active_battler.moving == 2
update_phase4_step3_sdva
end
elsif @active_battler.moving == 0
update_phase4_step3_sdva
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
#--------------------------------------------------------------------------
alias update_phase4_step6_sdva update_phase4_step6
def update_phase4_step6
@active_battler.current_action.move_action = false
@active_battler.move_reset
update_phase4_step6_sdva
end
end

#==============================================================================
# â–  Spriteset_Battle
#==============================================================================

class Spriteset_Battle
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_sdva initialize
def initialize
initialize_sdva
@viewport2.z = 1
end
end

#==============================================================================
# â–  Arrow_Actor
#==============================================================================

class Arrow_Actor < Arrow_Base
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_sdva update
def update
update_sdva
# カーソル下
if Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
@index += 1
@index %= $game_party.actors.size
end
# カーソル上
if Input.repeat?(Input::UP)
$game_system.se_play($data_system.cursor_se)
@index += $game_party.actors.size - 1
@index %= $game_party.actors.size
end
end
end

#==============================================================================
# â–  Arrow_Enemy
#==============================================================================

class Arrow_Enemy < Arrow_Base
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_sdva update
def update
update_sdva
# カーソル下
if Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
end
# カーソル上
if Input.repeat?(Input::UP)
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += $game_troop.enemies.size - 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
end
end
end

When using this in combination with RTAB, lots of errors crop up. I do not want to use animated battlers, I would prefer to use these still battlers in combination with RTAB.

Here are some of the errors. When placed directly under RTAB in the script database, I can get in the battle and everything works, but when I attack this is the error I get:

"Script 'Real Time Active Battle (RTAB)' line 1555: ArgumentError occurred.

wrong number of arguments (1 for 0)"

When placed underneath RTAB and my few RTAB plug-ins, this is the error I get upon preparing to attack:

"Script 'Jap Battle System' line 226: NoMethodError occurred.

undefined method `screen_x' for nil:NilClass"

I appreciate everyone who tries to help.
 
Try this :D :
Code:
module SDVA
  X_LINE = 500 # 横位置のバトラー表示座標
  Y_LINE = 200 # 縦位置のバトラー表示座標
  X_SPACE = 15 # 横位置のバトラー同士の間隔
  Y_SPACE = 40 # 縦位置のバトラー同士の間隔
  X_POSITION = 25 # 隊列[前衛・中衛・後衛]の横間隔
  Y_POSITION = 0 # 隊列[前衛・中衛・後衛]の縦間隔
  ATTACK_MOVE = true # 攻撃時に前へ踏み出すか( true / false )
  SKILL_MOVE = true # スキル使用時に前へ踏み出すか( true / false )
  ITEM_MOVE = false # アイテム使用時に前へ踏み出すか( true / false )
  MOVE_STEP = 1 # 移動歩数
  MOVE_PIXEL = 10 # 一歩あたりのピクセル数
  PARTY_POS = 1 # キャラクターの向き( 0:下 / 1:左 / 2:右 / 3:上 )
  WINDOWPOS_CHANGE = true # コマンドウインドウをバトラーの横に表示するか( true / false )
end

#==============================================================================
# â–  Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標の取得
  #--------------------------------------------------------------------------
  def screen_x
    if self.index != nil
      # 隊列を取得
      pos = $data_classes[self.class_id].position
      x_pos = pos * SDVA::X_POSITION
      scr_x = self.index * SDVA::X_SPACE + SDVA::X_LINE + x_pos
      # 移動アクションのとき
      if self.current_action.move_action == true
        # 横に移動
        scr_x += @shift_x
      end
      return scr_x
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Y 座標の取得
  #--------------------------------------------------------------------------
  def screen_y
    if self.index != nil
      # 隊列を取得
      pos = $data_classes[self.class_id].position
      y_pos = pos * SDVA::Y_POSITION
      scr_y = self.index * SDVA::Y_SPACE + SDVA::Y_LINE + y_pos
      # 移動アクションのとき
      if self.current_action.move_action == true
        # 縦に移動
        scr_y += @shift_y
      end
      return scr_y
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Z 座標の取得
  #--------------------------------------------------------------------------
  def screen_z
    if self.index != nil
      return self.index
    else
      return 0
    end
  end
end

#==============================================================================
# ■ Game_Battler (分割定義 1)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader :pattern # 歩行パターン
  attr_reader :trans_x # X方向の移動距離
  attr_reader :moving # 移動中フラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_sdva initialize
  def initialize
    initialize_sdva
    move_reset
  end
  #--------------------------------------------------------------------------
  # ○ 移動カウント
  #--------------------------------------------------------------------------
  def move
    @moving = 1
    if @step < SDVA::MOVE_STEP
      # 歩数を満たすまで移動
      @pattern = (@pattern + 1) % 4
      @step += 1
      move_step
    else
      # 移動終了
      @pattern = 1
      @moving = 2
    end
  end
  #--------------------------------------------------------------------------
  # ○ 移動処理
  #--------------------------------------------------------------------------
  def move_step
    # パーティの向きによって移動座標を変える
    case SDVA::PARTY_POS
    when 0
      @shift_y = @step * SDVA::MOVE_PIXEL
    when 1
      @shift_x = -(@step * SDVA::MOVE_PIXEL)
    when 2
      @shift_x = @step * SDVA::MOVE_PIXEL
    when 3
      @shift_y = -(@step * SDVA::MOVE_PIXEL)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 移動のリセット
  #--------------------------------------------------------------------------
  def move_reset
    @moving = 0
    @pattern = 0
    @step = 0
    @shift_x = 0
    @shift_y = 0
  end
end

#==============================================================================
# â–  Game_BattleAction
#==============================================================================

class Game_BattleAction
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :move_action # 移動するアクションか
  #--------------------------------------------------------------------------
  # ● クリア
  #--------------------------------------------------------------------------
  alias clear_sdva clear
  def clear
    clear_sdva
    @move_action = false
  end
end

#==============================================================================
# â–  Sprite_Battler
#==============================================================================

class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_sdva update
  def update
    # バトラーがアクターに含まれるとき
    if @battler.is_a?(Game_Actor)
      # ファイル名か色相が現在のものと異なる場合
      # 行動中の場合
      if @battler.battler_name != @battler_name or
        @battler.battler_hue != @battler_hue or
        @battler.current_action.basic == 0 or
        @battler.current_action.kind != 3
        # ビットマップを取得、設定
        @character_name = @battler.character_name
        @character_hue = @battler.character_hue
        # 歩行グラフィックを描画
        self.bitmap = RPG::Cache.character(@character_name, @character_hue)
        cw = self.bitmap.width / 4
        ch = self.bitmap.height / 4
        @width = cw
        @height = ch
        if @battler.current_action.move_action == true
          # 歩かせる
          @battler.move
        else
          @battler.move_reset
        end
        # 転送元の矩形を設定
        sx = @battler.pattern * cw
        sy = SDVA::PARTY_POS * ch
        self.src_rect.set(sx, sy, cw, ch)
        self.ox = @width / 2
        self.oy = @height
        # 隠れ状態なら不透明度を 0 にする
        if @battler.hidden
          self.opacity = 0
        end
      end
    end
    update_sdva
  end
end

#==============================================================================
# â–  Scene_Battle
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● アクターコマンドウィンドウのセットアップ
  #--------------------------------------------------------------------------
  
  alias phase3_setup_command_window_sdva phase3_setup_command_window
  def phase3_setup_command_window
    phase3_setup_command_window_sdva
    if SDVA::WINDOWPOS_CHANGE
      # アクターコマンドウィンドウの位置を設定
      case SDVA::PARTY_POS
      when 0
        x_pos = @active_actor.screen_x - (@actor_command_window.width/2)
        y_pos = @active_actor.screen_y
      when 1
        x_pos = @active_actor.screen_x - @actor_command_window.width - 16
        y_pos = @active_actor.screen_y - @actor_command_window.height
      when 2
        x_pos = @active_actor.screen_x + 16
        y_pos = @active_actor.screen_y - @actor_command_window.height
      when 3
        x_pos = @active_actor.screen_x - (@actor_command_window.width/2)
        y_pos = @active_actor.screen_y - @actor_command_window.height - 48
      end
      @actor_command_window.x = x_pos >= 0 ? x_pos : 0
      @actor_command_window.x = x_pos+@actor_command_window.width <= 640 ? x_pos : 640-@actor_command_window.width
      @actor_command_window.y = y_pos >= 0 ? y_pos : 0
      @actor_command_window.y = y_pos+@actor_command_window.height <= 480 ? y_pos : 480-@actor_command_window.height
      # ステータスウインドウに隠れないように
      @actor_command_window.z = 9999
    end
  end

  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  #--------------------------------------------------------------------------
  alias update_phase4_step3_sdva update_phase4_step3
  def update_phase4_step3(battler)
    if SDVA::ATTACK_MOVE
      if battler.current_action.basic == 0
        battler.current_action.move_action = true
      end
    end
    if SDVA::SKILL_MOVE
      if battler.current_action.kind == 1
        battler.current_action.move_action = true
      end
    end
    if SDVA::ITEM_MOVE
      if battler.current_action.kind == 2
        battler.current_action.move_action = true
      end
    end
    # バトラーがアクターに含まれ、移動アクション中
    if battler.is_a?(Game_Actor) and
      battler.current_action.move_action
      # 移動終了時
      if battler.moving == 2
        update_phase4_step3_sdva(battler)
      end
    elsif battler.moving == 0
      update_phase4_step3_sdva(battler)
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  #--------------------------------------------------------------------------
  alias update_phase4_step6_sdva update_phase4_step6
  def update_phase4_step6(battler)
    battler.current_action.move_action = false
    battler.move_reset
    update_phase4_step6_sdva(battler)
  end
end

#==============================================================================
# â–  Spriteset_Battle
#==============================================================================

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_sdva initialize
  def initialize
    initialize_sdva
    @viewport2.z = 1
  end
end

#==============================================================================
# â–  Arrow_Actor
#==============================================================================

  class Arrow_Actor < Arrow_Base
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_sdva update
  def update
    update_sdva
    # カーソル下
    if Input.repeat?(Input::DOWN)
      $game_system.se_play($data_system.cursor_se)
      @index += 1
      @index %= $game_party.actors.size
    end
    # カーソル上
    if Input.repeat?(Input::UP)
      $game_system.se_play($data_system.cursor_se)
      @index += $game_party.actors.size - 1
      @index %= $game_party.actors.size
    end
  end
end

#==============================================================================
# â–  Arrow_Enemy
#==============================================================================

class Arrow_Enemy < Arrow_Base
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_sdva update
  def update
    update_sdva
    # カーソル下
    if Input.repeat?(Input::DOWN)
      $game_system.se_play($data_system.cursor_se)
      $game_troop.enemies.size.times do
      @index += 1
      @index %= $game_troop.enemies.size
      break if self.enemy.exist?
      end
    end
    # カーソル上
    if Input.repeat?(Input::UP)
      $game_system.se_play($data_system.cursor_se)
      $game_troop.enemies.size.times do
      @index += $game_troop.enemies.size - 1
      @index %= $game_troop.enemies.size
      break if self.enemy.exist?
      end
    end
  end
end
I merely added the (battler) argument to certain defs and changed the @active_battler values in the Scene_Battle defs to battler or @active_actor (when positioning the command window).
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top