Главный скрипт.
class Game_Party
Battle_Party_Size = 5
Max_Party_Size = 10
def max_party_size
return Max_Party_Size
end
def max_party
return Battle_Party_Size
end
def placement_correctment
if @actors.size = Battle_Party_Size
return @actors.size
else
return Battle_Party_Size
end
end
def add_actor(actor_id)
actor = $game_actors[actor_id]
if not @actors.include?(actor) and $game_party.actors.size Max_Party_Size
@actors.push(actor)
$game_player.refresh
end
end
def all_dead?
if $game_party.actors.size == 0
return false
end
for actor in @actors
if actor.hp 0
return false
end
if actor.index = 4
return true
end
end
return true
end
end
class Window_BattleStatus Window_Base
def initialize
super(0, 320, 640, 160)
self.contents = Bitmap.new(width - 32, height - 32)
unless $game_party.actors.size 4
@level_up_flags = [false, false, false, false]
else
@level_up_flags = []
for i in 0...$game_party.placement_correctment
@level_up_flags.push(false)
end
end
refresh
end
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
unless $game_party.actors.size 4
actor_x = i * 160 + 4
else
actor_x = i * (4 + (640/ $game_party.placement_correctment))
end
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, LEVEL UP! )
else
draw_actor_state(actor, actor_x, 96)
end
end
end
end
class Game_Actor Game_Battler
def screen_x
if self.index != nil
unless $game_party.actors.size 4
return self.index * 160 + 80
else
return self.index * (640/ $game_party.placement_correctment) + (80/($game_party.placement_correctment/2))
end
else
return 0
end
end
end
class Scene_Battle
def phase3_next_actor
begin
if @active_battler != nil
@active_battler.blink = false
end
if @actor_index == $game_party.placement_correctment-1
start_phase4
return
end
@actor_index += 1
@active_battler = $game_party.actors[@actor_index]
@active_battler.blink = true
end until @active_battler.inputable?
phase3_setup_command_window
end
def phase3_setup_command_window
@party_command_window.active = false
@party_command_window.visible = false
@actor_command_window.active = true
@actor_command_window.visible = true
unless $game_party.actors.size 4
@actor_command_window.x = @actor_index * 160
else
@actor_command_window.x = @actor_index * (640/$game_party.placement_correctment)
if @actor_command_window.x 480
@actor_command_window.x = 480
end
end
@actor_command_window.index = 0
end
end
class Scene_Menu
alias party_swap_update_command update_command
def update_command
party_swap_update_command
if Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@previous_index = @command_window.index
@command_window.index = -1
@command_window.active = false
@status_window.active = true
@status_window.index = @status_window.top_row
return
end
end
alias party_swap_update_status update_status
def update_status
if Input.trigger?(Input::B)
unless @swapee != nil
$game_system.se_play($data_system.cancel_se)
if @command_window.index == -1
@command_window.index = @previous_index
end
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
@swapee = nil
return
end
if Input.trigger?(Input::C) and @command_window.index == -1
unless @swapee != nil
@swapee = @status_window.index
$game_system.se_play($data_system.decision_se)
return
end
if @swapee == @status_window.index
$game_system.se_play($data_system.decision_se)
@swapee = nil
return
end
$game_system.se_play($data_system.decision_se)
party_ids = []
for actor in $game_party.actors
party_ids.push(actor.id)
end
swapee2 = @status_window.index
if @swapee swapee2
for i in @swapee...party_ids.size
$game_party.remove_actor(party_ids[i])
end
$game_party.add_actor(party_ids[swapee2])
for i in (@swapee + 1)...party_ids.size
unless i == swapee2
$game_party.add_actor(party_ids[i])
else
$game_party.add_actor(party_ids[@swapee])
end
end
else
for i in swapee2...party_ids.size
$game_party.remove_actor(party_ids[i])
end
$game_party.add_actor(party_ids[@swapee])
for i in (swapee2 + 1)...party_ids.size
unless i == @swapee
$game_party.add_actor(party_ids[i])
else
$game_party.add_actor(party_ids[swapee2])
end
end
end
@swapee = nil
@status_window.refresh
return
end
if Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT)
if @swapee == nil and @command_window.index == -1
$game_system.se_play($data_system.cursor_se)
@command_window.index = @previous_index
@command_window.active = true
@status_window.active = false
@status_window.index = -1
end
end
party_swap_update_status
end
end
class Window_MenuStatus Window_Selectable
def initialize
unless $game_party.actors.size 4
super(0, 0, 480, 480)
else
super(0, 0, 480, 160 * $game_party.actors.size)
end
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.active = false
self.index = -1
end
alias large_refresh refresh
def refresh
large_refresh
self.height = 480
end
def update_cursor_rect
if @index 0
self.cursor_rect.empty
return
end
row = @index / @column_max
if row self.top_row
self.top_row = row
end
if row self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
cursor_width = self.width / @column_max - 32
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 116 - self.oy
self.cursor_rect.set(x, y, cursor_width, 96)
end
def top_row
return self.oy / 116
end
def top_row=(row)
if row 0
row = 0
end
if row row_max - 1
row = row_max - 1
end
self.oy = row * 116
end
def page_row_max
return 4
end
end
class Game_Actor Game_Battler
def exist?
return super == self.index 4
end
end
Теперь, создайте скрипт выше main и назовите его Spriteset_Battle
В скрипт впишите:
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# This class brings together battle screen sprites. It s used within
# the Scene_Battle class.
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :viewport1 # enemy viewport
attr_reader :viewport2 # actor viewport
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Make viewports
@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 = 101
@viewport3.z = 200
@viewport4.z = 5000
# Make battleback sprite
@battleback_sprite = Sprite.new(@viewport1)
# Make enemy sprites
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
# Make actor sprites
@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))
for i in 0...$game_party.max_party
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
# Make weather
@weather = RPG::Weather.new(@viewport1)
# Make picture sprites
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
# Make timer sprite
@timer_sprite = Sprite_Timer.new
# Frame update
update
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update actor sprite contents (corresponds with actor switching)
#@actor_sprites[0].battler = $game_party.actors[0]
#@actor_sprites[1].battler = $game_party.actors[1]
#@actor_sprites[2].battler = $game_party.actors[2]
#@actor_sprites[3].battler = $game_party.actors[3]
for i in 0...$game_party.max_party
@actor_sprites[i].battler = $game_party.actors[i]
end
# If battleback file name is different from current one
if @battleback_name != $game_temp.battleback_name
@battleback_name = $game_temp.battleback_name
if @battleback_sprite.bitmap != nil
@battleback_sprite.bitmap.dispose
end
@battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
@battleback_sprite.src_rect.set(0, 0, 640, 320)
end
# Update battler sprites
for sprite in @enemy_sprites + @actor_sprites
sprite.update
end
# Update weather graphic
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.update
# Update picture sprites
for sprite in @picture_sprites
sprite.update
end
# Update timer sprite
@timer_sprite.update
# Set screen color tone and shake position
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
# Set screen flash color
@viewport4.color = $game_screen.flash_color
# Update viewports
@viewport1.update
@viewport2.update
@viewport4.update
end
end
В выше описанном скрипте найдите:
@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))
И замените на
for i in 0...$game_party.max_party
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
Затем найдите:
@actor_sprites[0].battler = $game_party.actors[0]
@actor_sprites[1].battler = $game_party.actors[1]
@actor_sprites[2].battler = $game_party.actors[2]
@actor_sprites[3].battler = $game_party.actors[3]
И замените на
for i in 0...$game_party.max_party
@actor_sprites[i].battler = $game_party.actors[i]
end
Теперь нужно будет немного дописать главный скрипт, а именно в начале скрипт main
дописать 2 строчки:
Battle_Party_Size = 5 # размер изображения
Max_Party_Size = 10 # максимальное количество игроков