#===============================================================================
#
# Yanfly Engine Zealous - Party Selection System
# Last Date Updated: 2010.01.21
# Level: Normal, Hard, Lunatic
#
# By default, RPG Maker VX lacks a menu that allows for party switching. If a
# player reaches four members, any newer members added would be simply ignored
# unless the player has enough members and re-run the event again. With this
# script, players will finally be able to adjust the party the way they want.
#
#===============================================================================
# Updates
# -----------------------------------------------------------------------------
# o 2010.01.21 - Scrolling efficiency update.
# o 2010.01.03 - Victory Aftermath Compatibility.
# o 2010.01.02 - Variable Control Bugfix.
# - Moved playtime up in the save window.
# o 2010.01.01 - Shop display fixed to show only battle members.
# o 2009.12.31 - Reserve party members now have their states updated.
# o 2009.12.27 - All Dead-Party Bugfix.
# - Efficiency update.
# o 2009.12.24 - Script finished.
# o 2009.12.22 - Started Script.
#===============================================================================
# Instructions
# -----------------------------------------------------------------------------
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials but above ▼ Main. Remember to save.
#
# -----------------------------------------------------------------------------
# Module Edit Requirements
# -----------------------------------------------------------------------------
# Search for ENABLE_SWITCH and BATTLE_SWITCH. Bind these two constants to the
# proper switch ID's you wish to associate them with.
#
# -----------------------------------------------------------------------------
# Script Commands - These are used with the Event Editor's Script command.
# -----------------------------------------------------------------------------
# $game_party.fix_actor(n)
# Makes it so that the actor cannot be taken out of the party. Requires the
# actor to be in the party already.
#
# $game_party.unfix_actor(n)
# Allows the actor to be taken out of the party again. Requires the actor to
# be in the party already.
#
# $game_party.set_battlers(n1, n2, n3, n4)
# Allows you to set a party the way you want it to. Actors must have joined
# or else no changes will be made to that slot.
#
#===============================================================================
# Compatibility
# -----------------------------------------------------------------------------
# - Works With: YEZ Battle Engine Zealous, YEZ Main Menu Zealous
# -----------------------------------------------------------------------------
# Note: This script may not work with former Yanfly Engine ReDux scripts.
# Use Yanfly Engine Zealous scripts to work with this if available.
# Thanks to KGC Software for a lot of reference work.
#===============================================================================
$imported = {} if $imported == nil
$imported["PartySelectionSystem"] = true
module YEZ
module PARTY
#===========================================================================
# Basic Settings
# -------------------------------------------------------------------------
# This here allows you to adjust the basic settings that govern the overall
# party changing scene. Change them as you see fitting.
#===========================================================================
# These two items adjust how the party command appears in your main menu.
TITLE = "Party"
ICON = 85
# This switch needs to be on before the party change option will appear in
# the main menu. Bind it properly to use it.
ENABLE_SWITCH = 42
BATTLE_SWITCH = 43
BATTLE_DEFAULT = false # Set to true to have it on by default.
# This is mostly used for eventing and determining which members are in the
# party by storing their ID's inside of these following variables. Adjusted
# whenever the player refreshes (quite often).
VAR_PARTY_MEM1 = 41
VAR_PARTY_MEM2 = 42
VAR_PARTY_MEM3 = 43
VAR_PARTY_MEM4 = 44
# This variable is used for setting a focused character to be visible when
# traveling on the field for story purposes. Whatever this variable equals,
# that character will be displayed instead of whoever is the party leader.
VAR_FOCUSED = 45
# This is the maximum number of members that can be in your active party
# at once. Going over this number will result in a bitmap error that can't
# be corrected by scripts alone.
MAXIMUM_MEMBERS = 3
# Setting this to true will cause status effects to update and take effect
# for actors in the battle reserve.
RESERVE_STATES_EFFECT = true
# Determines what percentage of the EXP won is given to non-participating
# party members. 0.50 means 50%.
BATTLE_RESERVE_EXP = 0.25
# This will show the level up messages for characters in the reserve if
# they did indeed level.
RESERVE_LEVEL_UP = true
#===========================================================================
# Party Switching Settings
# -------------------------------------------------------------------------
# The following settings adjust what appears within the party switching
# scene from the various ways to sort actors to the vocabulary used.
#===========================================================================
# The following adjusts the assort menu. The default list consists as such.
# :story, :name, :class, :level, :hp, :mp, :atk, :def, :spi, :res,
# :dex, :agi, :hit, :eva, :cri, :dur, :luk, :odds
ASSORT_COMMANDS =[
:name, :story, :class, :level, :hp, :mp, :atk, :def, :spi, :res,
:dex, :agi, :hit, :eva, :cri, :dur, :luk, :odds
] # Do not remove this.
# This little array here allows you to set certain actors as higher
# priority for story sorting than other actors. Unlisted actors will have
# their positions unchanged other than being lower on the list than the
# story priority characters.
STORY_SORTING = [1..4, 6]
# The following hash adjusts the vocabulary used for all of the party
# switching scene. Adjust the vocabulary as you see fit.
VOCAB ={
:clear => "Remove",
:empty => "Empty",
:nodata => "No Data",
:c_battler => "Change",
:b_battler => "Finish",
:a_battler => "Remove",
:x_battler => "Revert",
:c_actors => "Select",
:b_actors => "Cancel",
:a_actors => "Assort",
:x_actors => "Revert",
:sort_by => "Sort Actors...",
:story => "By Story",
:name => "By Name",
:class => "By Class",
:level => "By Level",
:stat => "By %s",
} # Do not remove this.
# The following determines how the game displays the keys inside of the
# help window. %s will be the instruction following.
KEYS ={
:a => "A:%s",
:b => "B:%s",
:c => "C:%s",
:x => "X:%s",
} # Do not remove this.
# This here is a list of the stats shown in the status window. Certain stats
# will not appear unless certain scripts are installed. The order you place
# these stats will be the order they appear in the window.
# :atk, :def, :spi, :res, :dex, :agi, :hit, :eva, :cri, :dur, :luk, :odds
SHOWN_STATS = [:atk, :def, :spi, :res, :dex, :agi,
:hit, :eva, :cri, :dur, :luk, :odds]
# These are the misc visual adjustments you can make the scene.
FACE_OPACITY = 255 # Face opacity for battler window.
SPRITE_OFFSET = 12 # Sprite offset for party list.
ACTIVE_COLOUR = 6 # Highlighted Name Colour
CLEAR_ICON = 98 # This is used for clearing an actor.
UP_ICON = 142 # These are the icons used when stats are higher
DN_ICON = 143 # or lower than their base amounts.
LOCKED_ICON = 80 # Icon used for locked actors.
#===========================================================================
# Menu Status Window
# -------------------------------------------------------------------------
# When viewing the main menu, the status window will now host the extra
# party members that aren't participating in battle.
#===========================================================================
# This adjusts the back colour opacity for non-battle members inside of
# the main menu's party window.
BACK_OPACITY = 64
# This adjusts the way EXP bars are displayed inside the main menu status
# window. Adjust it as you see fit.
EXP_TEXT = "EXP" # Text used for EXP
PERCENT_EXP = "%1.2f%%" # Text format used for EXP percentage
EXP_GAUGE_1 = 28 # Colour 1 for the EXP Gauge
EXP_GAUGE_2 = 29 # Colour 2 for the EXP Gauge
end # PARTY
end # YEZ
#===============================================================================
# Editting anything past this point may potentially result in causing computer
# damage, incontinence, explosion of user's head, coma, death, and/or halitosis.
# Therefore, edit at your own risk.
#===============================================================================
module YEZ::PARTY
module_function
#--------------------------------------------------------------------------
# convert_integer_array
#--------------------------------------------------------------------------
def convert_integer_array(array)
result = []
array.each { |i|
case i
when Range; result |= i.to_a
when Integer; result |= [i]
end }
return result
end
#--------------------------------------------------------------------------
# story_sorting_list
#--------------------------------------------------------------------------
STORY_SORTING_LIST = convert_integer_array(STORY_SORTING)
end # YEZ::PARTY
module Vocab
def self.hit; return "HIT"; end
def self.eva; return "EVA"; end
def self.cri; return "CRI"; end
def self.odds;return "AGR"; end
end # Vocab
#===============================================================================
# Game_Party
#===============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# constants
#--------------------------------------------------------------------------
MAX_MEMBERS = [[YEZ::PARTY::MAXIMUM_MEMBERS, 99].min, 1].max
BATTLE_MAX = 4
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :actors
attr_accessor :battlers
attr_accessor :fixed_actors
#--------------------------------------------------------------------------
# alias method: members
#--------------------------------------------------------------------------
alias members_pss members unless $@
def members
if $game_temp.in_battle or $scene.is_a?(Scene_Shop)
return battle_members
else
result = []
for member in battle_members
result.push(member)
end
for member in all_members
result.push(member) unless result.include?(member)
end
return result
end
end
#--------------------------------------------------------------------------
# new method: all_members
#--------------------------------------------------------------------------
def all_members; return members_pss.uniq; end
#--------------------------------------------------------------------------
# new method: reserve_members
#--------------------------------------------------------------------------
def reserve_members; return (members_pss - battle_members).uniq; end
#--------------------------------------------------------------------------
# new method: battle_members
#--------------------------------------------------------------------------
def battle_members
if @battlers == nil
@battlers = [0, 0, 0, 0]
for i in 0..([@actors.size, BATTLE_MAX].min - 1)
@battlers[i] = @actors[i]
end
end
result = []
for id in @battlers
result.push($game_actors[id]) unless $game_actors[id] == nil
end
return result
end
#--------------------------------------------------------------------------
# new method: set_battlers
#--------------------------------------------------------------------------
def set_battlers(n1 = 0, n2 = 0, n3 = 0, n4 = 0)
battle_members if @battlers == nil
n1 = @battlers[0] unless @actors.include?(n1)
n2 = @battlers[1] unless @actors.include?(n2)
n3 = @battlers[2] unless @actors.include?(n3)
n4 = @battlers[3] unless @actors.include?(n4)
@battlers = [n1, n2, n3, n4]
$game_player.refresh
end
#--------------------------------------------------------------------------
# new method: fixed_members
#--------------------------------------------------------------------------
def fixed_members
result = []
@fixed_actors = [] if @fixed_actors == nil
for id in @fixed_actors
result.push($game_actors[id]) unless $game_actors[id] == nil
end
return result
end
#--------------------------------------------------------------------------
# new method: fix_actor
#--------------------------------------------------------------------------
def fix_actor(actor_id)
@fixed_actors = [] if @fixed_actors == nil
battle_members if @battlers == nil
return unless @battlers.include?(actor_id)
@fixed_actors.push(actor_id)
end
#--------------------------------------------------------------------------
# new method: unfix_actor
#--------------------------------------------------------------------------
def unfix_actor(actor_id)
@fixed_actors = [] if @fixed_actors == nil
return unless @battlers.include?(actor_id)
@fixed_actors.delete(actor_id)
end
#--------------------------------------------------------------------------
# alias method: setup_starting_members
#--------------------------------------------------------------------------
alias setup_starting_members_pss setup_starting_members unless $@
def setup_starting_members
setup_starting_members_pss
$game_switches[YEZ::PARTY::ENABLE_SWITCH] = true
$game_switches[YEZ::PARTY::BATTLE_SWITCH] = YEZ::PARTY::BATTLE_DEFAULT
end
#--------------------------------------------------------------------------
# alias method: add_actor
#--------------------------------------------------------------------------
alias add_actor_pss add_actor unless $@
def add_actor(actor_id)
last_size = @actors.size
add_actor_pss(actor_id)
if last_size < @actors.size
battle_members if @battlers == nil
for i in 0..(@battlers.size-1)
if @battlers[i] == 0
@battlers[i] = actor_id
break
end
end
end
end
#--------------------------------------------------------------------------
# alias method: remove_actor
#--------------------------------------------------------------------------
alias remove_actor_pss remove_actor unless $@
def remove_actor(actor_id)
battle_members if @battlers == nil
@battlers[@battlers.index(actor_id)] = 0 if @battlers.include?(actor_id)
remove_actor_pss(actor_id)
end
end # Game_Party
#===============================================================================
# Game_Player
#===============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# alias method: refresh
#--------------------------------------------------------------------------
alias refresh_player_pss refresh unless $@
def refresh
refresh_player_pss
if $game_variables[YEZ::PARTY::VAR_FOCUSED] > 0
actor = $game_actors[$game_variables[YEZ::PARTY::VAR_FOCUSED]]
@character_name = actor.character_name
@character_index = actor.character_index
end
return if $game_party.members.size == 0
bat = $game_party.battle_members
$game_variables[YEZ::PARTY::VAR_PARTY_MEM1] = bat.size > 0 ? bat[0].id : 0
$game_variables[YEZ::PARTY::VAR_PARTY_MEM2] = bat.size > 1 ? bat[1].id : 0
$game_variables[YEZ::PARTY::VAR_PARTY_MEM3] = bat.size > 2 ? bat[2].id : 0
$game_variables[YEZ::PARTY::VAR_PARTY_MEM4] = bat.size > 3 ? bat[3].id : 0
end
end # Game_Player
#===============================================================================
# Game_Interpreter
#===============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# alias method: control variable
#--------------------------------------------------------------------------
alias command_122_pss command_122 unless $@
def command_122
n = command_122_pss
$game_player.refresh if @params[0] == YEZ::PARTY::VAR_FOCUSED
return n
end
end # Game_Interpreter
#===============================================================================
# Scene_Menu
#===============================================================================
class Scene_Menu < Scene_Base
#--------------------------------------------------------------------------
# alias method: create_command_window
#--------------------------------------------------------------------------
alias create_command_window_pss create_command_window unless $@
def create_command_window
create_command_window_pss
return if $imported["CustomMenuCommand"]
if $game_switches[YEZ::PARTY::ENABLE_SWITCH] and
$game_party.all_members.size > 1
title = YEZ::PARTY::TITLE
@command_party = @command_window.add_command(title)
if @command_window.oy > 0
@command_window.oy -= Window_Base::WLH
end
end
@command_window.index = @menu_index
end
#--------------------------------------------------------------------------
# alias method: update_command_selection
#--------------------------------------------------------------------------
alias update_command_selection_pss update_command_selection unless $@
def update_command_selection
call_yez_command = 0
if Input.trigger?(Input::C)
case @command_window.index
when @command_party
Sound.play_decision
$scene = Scene_Party.new(@command_window.index, Scene_Party::HOST_MENU)
return
end
end
update_command_selection_pss
end
end # Scene Menu
#===============================================================================
# Scene_Battle
#===============================================================================
class Scene_Battle < Scene_Base
if YEZ::PARTY::RESERVE_STATES_EFFECT
#--------------------------------------------------------------------------
# alias method: start_main
#--------------------------------------------------------------------------
if $imported["CustomStatusPropertiesZeal"]
alias start_main_pss start_main unless $@
def start_main
start_main_pss
for member in $game_party.reserve_members
for state in member.states;
member.custom_status_effects(state, "BEGIN")
end
end
end
end
#--------------------------------------------------------------------------
# alias method: turn_end
#--------------------------------------------------------------------------
alias turn_end_pss turn_end unless $@
def turn_end
for member in $game_party.reserve_members
member.slip_damage_effect
member.do_auto_recovery
member.remove_states_auto
end
turn_end_pss
end
end # YEZ::PARTY::RESERVE_STATES_EFFECT
#--------------------------------------------------------------------------
# alias method: display_level_up
#--------------------------------------------------------------------------
unless $imported["VictoryAftermath"]
alias display_level_up_pss display_level_up unless $@
def display_level_up
display_level_up_pss
exp = Integer($game_troop.exp_total * YEZ::PARTY::BATTLE_RESERVE_EXP)
for actor in $game_party.reserve_members
actor.gain_exp(exp, YEZ::PARTY::RESERVE_LEVEL_UP) if actor.exist?
end
wait_for_message
end
end
#--------------------------------------------------------------------------
# alias method: battle_end
#--------------------------------------------------------------------------
alias battle_end_pss battle_end unless $@
def battle_end(result)
battle_end_pss(result)
for member in $game_party.reserve_members
member.remove_states_battle
end
end
end # Scene_Battle
#===============================================================================
# Scene_Party
#===============================================================================
class Scene_Party < Scene_Base
#--------------------------------------------------------------------------
# constants
#--------------------------------------------------------------------------
HOST_MENU = 0
HOST_MAP = 1
HOST_BATTLE = 2
#--------------------------------------------------------------------------
# initialize
#--------------------------------------------------------------------------
def initialize(menu_index = 0, host_menu = HOST_MENU)
@menu_index = menu_index
@host_menu = host_menu
end
#--------------------------------------------------------------------------
# start
#--------------------------------------------------------------------------
def start
super
create_menu_background
@battlers_window = Window_PartyBattlers.new
@actors_window = Window_PartyActors.new
@help_window = Window_PartyHelp.new
@status_window = Window_PartyStatus.new
@status_window.refresh(@battlers_window.item)
create_assort_back_window
@assort_window = Window_PartyAssort.new
@original_party = $game_party.battlers.clone
@original_order = $game_party.actors.clone
@last_battler_index = 0
@last_actor_index = 0
end
#--------------------------------------------------------------------------
# create_assort_back_window
#--------------------------------------------------------------------------
def create_assort_back_window
@assort_back = Window_Base.new(160, 128, 384, 288)
@assort_back.contents.clear
text = YEZ::PARTY::VOCAB[:sort_by]
@assort_back.contents.draw_text(0, 0, 344, 36, text, 1)
@assort_back.visible = false
end
#--------------------------------------------------------------------------
# terminate
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@battlers_window.dispose if @battlers_window != nil
@actors_window.dispose if @actors_window != nil
@help_window.dispose if @help_window != nil
@status_window.dispose if @status_window != nil
@assort_window.dispose if @assort_window != nil
@assort_back.dispose if @assort_back != nil
end
#--------------------------------------------------------------------------
# return_scene
#--------------------------------------------------------------------------
def return_scene
case @host_menu
when HOST_MAP
$scene = Scene_Map.new
when HOST_BATTLE
$scene = Scene_Battle.new
when HOST_MENU
if $imported["CustomMenuCommand"] and
$game_temp.menu_command_index.has_key?(:party)
$scene = Scene_Menu.new($game_temp.menu_command_index[:party])
else
$scene = Scene_Menu.new(@menu_index)
end
end
$game_player.refresh
end
#--------------------------------------------------------------------------
# update
#--------------------------------------------------------------------------
def update
super
update_menu_background
if @battlers_window.active
update_battlers_window
elsif @actors_window.active
update_actors_window
elsif @assort_window.active
update_assort_window
end
end
#--------------------------------------------------------------------------
# refresh
#--------------------------------------------------------------------------
def refresh
@battlers_window.refresh
@actors_window.refresh
if @battlers_window.active
@status_window.refresh(@battlers_window.item) if @battlers_window.item !=
@status_window.item
elsif @actors_window.active
@status_window.refresh(@actors_window.item) if @actors_window.item !=
@status_window.item
end
$game_player.refresh
end
#--------------------------------------------------------------------------
# update_battlers_window
#--------------------------------------------------------------------------
def update_battlers_window
@battlers_window.update
@help_window.refresh(1) if @help_window.type != 1
if @last_battler_index != @battlers_window.index
@last_battler_index = @battlers_window.index
@status_window.refresh(@battlers_window.item) if @battlers_window.item !=
@status_window.item
end
if Input.trigger?(Input::B)
if @battlers_window.selected_index == nil
if $game_party.battle_members == []
Sound.play_buzzer
elsif $game_party.all_dead?
Sound.play_buzzer
else
for actor in $game_party.fixed_members
next if $game_party.battle_members.include?(actor)
Sound.play_buzzer
return
end
Sound.play_cancel
return_scene
end
else
@battlers_window.selected_index = nil
refresh
end
elsif Input.trigger?(Input::A)
id = @battlers_window.item
if id != 0 and $game_party.fixed_members.include?($game_actors[id])
Sound.play_buzzer
return
end
Sound.play_equip
index = @battlers_window.index
$game_party.battlers[index] = 0
refresh
elsif Input.trigger?(Input::X)
Sound.play_equip
$game_party.battlers = @original_party.clone
refresh
elsif Input.trigger?(Input::L)
Sound.play_equip
index1 = @battlers_window.index
index2 = index1 - 1
temp = $game_party.battlers[index1]
$game_party.battlers[index1] = $game_party.battlers[index2]
$game_party.battlers[index2] = temp
@battlers_window.index -= 1
@battlers_window.index = 3 if @battlers_window.index < 0
refresh
elsif Input.trigger?(Input::R)
Sound.play_equip
index1 = @battlers_window.index
index2 = index1 - 3
temp = $game_party.battlers[index1]
$game_party.battlers[index1] = $game_party.battlers[index2]
$game_party.battlers[index2] = temp
@battlers_window.index += 1
@battlers_window.index = 0 if @battlers_window.index > 3
refresh
elsif Input.trigger?(Input::C)
id = @battlers_window.item
if id != 0 and $game_party.fixed_members.include?($game_actors[id])
Sound.play_buzzer
return
end
if @battlers_window.selected_index == nil
Sound.play_decision
@battlers_window.selected_index = @battlers_window.index
@battlers_window.draw_item(@battlers_window.index)
@battlers_window.active = false
@actors_window.active = true
@actors_window.index = @last_actor_index
@status_window.refresh(@actors_window.item)
else
Sound.play_equip
actor_id = @battlers_window.item
temp_id = @battlers_window.selected_item
$game_party.battlers[@battlers_window.index] = temp_id
$game_party.battlers[@battlers_window.selected_index] = actor_id
@battlers_window.selected_index = nil
refresh
end
elsif Input.trigger?(Input::DOWN) and @battlers_window.selected_index == nil
Sound.play_cursor
@battlers_window.active = false
@battlers_window.index = -1
@actors_window.active = true
@actors_window.index = @last_actor_index
@status_window.refresh(@actors_window.item)
end
end
#--------------------------------------------------------------------------
# update_actors_window
#--------------------------------------------------------------------------
def update_actors_window
@help_window.refresh(2) if @help_window.type != 2
if @last_actor_index != @actors_window.index
@last_actor_index = @actors_window.index
@status_window.refresh(@actors_window.item)
end
if Input.trigger?(Input::B)
Sound.play_cancel
if @actors_window.selected_index != nil
@actors_window.selected_index = nil
@actors_window.refresh
else
@battlers_window.active = true
@actors_window.active = false
@battlers_window.index = @last_battler_index
@battlers_window.selected_index = nil
@battlers_window.draw_item(@battlers_window.index)
@status_window.refresh(@battlers_window.item)
end
elsif Input.repeat?(Input::UP) and @actors_window.selected_index == nil and
@actors_window.index == 0 and @battlers_window.selected_index == nil
Sound.play_cursor
@battlers_window.active = true
@actors_window.active = false
@battlers_window.index = @last_battler_index
@battlers_window.selected_index = nil
@battlers_window.draw_item(@battlers_window.index)
@status_window.refresh(@battlers_window.item)
elsif Input.trigger?(Input::A) and @actors_window.selected_index == nil
Sound.play_decision
@assort_window.active = true
@assort_window.visible = true
@assort_back.visible = true
@actors_window.active = false
@status_window.visible = false
elsif Input.trigger?(Input::X)
Sound.play_equip
$game_party.actors = @original_order.clone
refresh
elsif Input.trigger?(Input::C)
actor_id = @actors_window.item
if @battlers_window.selected_index != nil
Sound.play_equip
if $game_party.battlers.include?(actor_id) and actor_id != 0
ix = $game_party.battlers.index(actor_id)
jx = @battlers_window.selected_index
$game_party.battlers[ix] = $game_party.battlers[jx]
end
$game_party.battlers[@battlers_window.selected_index] = actor_id
@battlers_window.selected_index = nil
@battlers_window.active = true
@actors_window.active = false
@battlers_window.index = @last_battler_index
refresh
elsif @actors_window.selected_index == nil and actor_id > 0
Sound.play_equip
@actors_window.selected_index = @actors_window.index
@actors_window.refresh
elsif actor_id > 0
Sound.play_equip
ix = $game_party.actors.index(actor_id)
jx = @actors_window.selected_index
$game_party.actors[ix] = $game_party.actors[jx]
$game_party.actors[@actors_window.selected_index] = actor_id
@actors_window.selected_index = nil
@actors_window.refresh
@status_window.refresh(@actors_window.item)
end
end
@actors_window.update
end
#--------------------------------------------------------------------------
# update_assort_window
#--------------------------------------------------------------------------
def update_assort_window
@assort_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
@assort_window.active = false
@assort_window.visible = false
@assort_back.visible = false
@actors_window.active = true
@status_window.visible = true
elsif Input.trigger?(Input::C) or Input.trigger?(Input::A)
if Input.trigger?(Input::C)
@assort_window.active = false
@assort_window.visible = false
@assort_back.visible = false
@actors_window.active = true
@status_window.visible = true
end
Sound.play_equip
#---
result = $game_party.all_members
case @assort_window.command
when :story
priority = []
for id in YEZ::PARTY::STORY_SORTING_LIST
priority.push($game_actors[id]) if $game_party.actors.include?(id)
end
priority.sort! { |a,b| a.id <=> b.id }
result = (priority + result).uniq
when :name; result.sort! { |a,b| a.name <=> b.name }
when :class; result.sort! { |a,b| a.class.name <=> b.class.name }
when :level; result.sort! { |a,b| b.level <=> a.level }
when :hp; result.sort! { |a,b| b.maxhp <=> a.maxhp }
when :mp; result.sort! { |a,b| b.maxhp <=> a.maxhp }
when :atk; result.sort! { |a,b| b.atk <=> a.atk }
when :def; result.sort! { |a,b| b.def <=> a.def }
when :spi; result.sort! { |a,b| b.spi <=> a.spi }
when :res; result.sort! { |a,b| b.res <=> a.res }
when :dex; result.sort! { |a,b| b.dex <=> a.dex }
when :agi; result.sort! { |a,b| b.agi <=> a.agi }
when :hit; result.sort! { |a,b| b.hit <=> a.hit }
when :eva; result.sort! { |a,b| b.eva <=> a.eva }
when :cri; result.sort! { |a,b| b.cri <=> a.cri }
when :dur; result.sort! { |a,b| b.max_dur <=> a.max_dur }
when :luk; result.sort! { |a,b| b.luk <=> a.luk }
when :odds; result.sort! { |a,b| b.odds <=> a.odds }
end
#---
$game_party.actors = []
for actor in result
next if actor == nil
next if $game_party.actors.include?(actor.id)
$game_party.actors.push(actor.id)
end
refresh
@status_window.refresh(@actors_window.item)
end
end
end # Scene_Party
#==============================================================================
# Window_Command (imported from KGC)
#==============================================================================
class Window_Command < Window_Selectable
unless method_defined?(:add_command)
#--------------------------------------------------------------------------
# add command
#--------------------------------------------------------------------------
def add_command(command)
@commands << command
@item_max = @commands.size
item_index = @item_max - 1
refresh_command
draw_item(item_index)
return item_index
end
#--------------------------------------------------------------------------
# refresh command
#--------------------------------------------------------------------------
def refresh_command
buf = self.contents.clone
self.height = [self.height, row_max * WLH + 32].max
create_contents
self.contents.blt(0, 0, buf, buf.rect)
buf.dispose
end
#--------------------------------------------------------------------------
# insert command
#--------------------------------------------------------------------------
def insert_command(index, command)
@commands.insert(index, command)
@item_max = @commands.size
refresh_command
refresh
end
#--------------------------------------------------------------------------
# remove command
#--------------------------------------------------------------------------
def remove_command(command)
@commands.delete(command)
@item_max = @commands.size
refresh
end
end
end
#===============================================================================
# Window_Command_Centered
#===============================================================================
class Window_Command_Centered < Window_Command
#--------------------------------------------------------------------------
# draw_item
#--------------------------------------------------------------------------
def draw_item(index, enabled = true)
rect = item_rect(index)
rect.x += 4
rect.width -= 8
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(rect, @commands[index], 1)
end
end # Window_Command_Centered
#===============================================================================
# Window_SaveFile
#===============================================================================
class Window_SaveFile < Window_Base
#--------------------------------------------------------------------------
# alias method: draw_playtime
#--------------------------------------------------------------------------
alias draw_playtime_pss draw_playtime unless $@
def draw_playtime(x, y, width, align)
draw_playtime_pss(x, 0, width, align)
end
end # Window_SaveFile
#==============================================================================
# Window_MenuStatus
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# overwrite method: refresh
#--------------------------------------------------------------------------
def refresh
@item_max = $game_party.members.size
create_contents
colour_non_battler_background
for i in 0..$game_party.members.size
draw_item(i)
end
end
#--------------------------------------------------------------------------
# overwrite method: create_contents
#--------------------------------------------------------------------------
def create_contents
self.contents.dispose
self.contents = Bitmap.new(width - 32, [height - 32, row_max * 96].max)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# draw_item
#--------------------------------------------------------------------------
def draw_item(index)
actor = $game_party.members[index]
return if actor == nil
draw_actor_face(actor, 2, index * 96 + 2, 92)
x = 104
y = index * 96
draw_actor_name(actor, x, y)
draw_actor_class(actor, x + 120, y)
draw_actor_level(actor, x, y + WLH * 1)
draw_actor_state(actor, x, y + WLH * 2)
draw_stun_indicator(x, y + WLH * 3, actor) if $imported["ClassStatDUR"]
draw_actor_hp(actor, x + 120, y + WLH * 1, 120)
draw_actor_mp(actor, x + 120, y + WLH * 2, 120)
draw_menu_exp(actor, x + 120, y + WLH * 3, 120)
end
#--------------------------------------------------------------------------
# new method: draw_menu_exp
#--------------------------------------------------------------------------
def draw_menu_exp(actor, x, y, size = 120)
if actor.next_exp != 0
gw = size * actor.now_exp
gw /= actor.next_exp
else
gw = size
end
gc1 = text_color(YEZ::PARTY::EXP_GAUGE_1)
gc2 = text_color(YEZ::PARTY::EXP_GAUGE_2)
self.contents.fill_rect(x, y + WLH - 8, size, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 40, WLH, YEZ::PARTY::EXP_TEXT)
self.contents.font.color = normal_color
if actor.next_exp != 0
expercent = actor.now_exp * 100.0
expercent /= actor.next_exp
else
expercent = 100.0
end
expercent = 100.0 if expercent > 100.0
text = sprintf(YEZ::PARTY::PERCENT_EXP, expercent)
self.contents.draw_text(x, y, size, WLH, text, 2)
end
#--------------------------------------------------------------------------
# new method: colour_non_battler_background
#--------------------------------------------------------------------------
def colour_non_battler_background
color = Color.new(0, 0, 0, YEZ::PARTY::BACK_OPACITY)
dy = $game_party.battle_members.size * 96
dh = $game_party.reserve_members.size * 96
self.contents.fill_rect(0, dy, self.width - 32, dh, color) if dh > 0
end
#--------------------------------------------------------------------------
# overwrite method: top_row
#--------------------------------------------------------------------------
def top_row; return self.oy / 96; end
#--------------------------------------------------------------------------
# overwrite method: top_row=
#--------------------------------------------------------------------------
def top_row=(row); super(row); self.oy = self.oy / WLH * 96; end
#--------------------------------------------------------------------------
# overwrite method: page_row_max
#--------------------------------------------------------------------------
def page_row_max; return (self.height - 32) / 96; end
#--------------------------------------------------------------------------
# overwrite method: item_rect
#--------------------------------------------------------------------------
def item_rect(index)
rect = super(index)
rect.height = 96
rect.y = index / @column_max * 96
return rect
end
#--------------------------------------------------------------------------
# overwrite method: update_cursor
#--------------------------------------------------------------------------
def update_cursor
if @index < 0
self.cursor_rect.empty
elsif @index < @item_max
super
elsif @index >= 100
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end # Window_MenuStatus
#===============================================================================
# Window_PartyBattlers
#===============================================================================
class Window_PartyBattlers < Window_Selectable
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :selected_index
#--------------------------------------------------------------------------
# initialize
#--------------------------------------------------------------------------
def initialize
super(0, 0, 416, 128)
@column_max = 4
@spacing = 0
refresh
self.index = 0
self.active = true
end
#--------------------------------------------------------------------------
# new method: item
#--------------------------------------------------------------------------
def item; return @data[self.index]; end
#--------------------------------------------------------------------------
# new method: selected_item
#--------------------------------------------------------------------------
def selected_item; return @data[@selected_index]; end
#--------------------------------------------------------------------------
# overwrite method: create_contents
#--------------------------------------------------------------------------
def create_contents
self.contents.dispose
self.contents = Bitmap.new(width - 32, [height - 32, row_max * 96].max)
end
#--------------------------------------------------------------------------
# refresh
#--------------------------------------------------------------------------
def refresh
$game_party.battle_members if $game_party.battlers == nil
@data = []
for id in $game_party.battlers; @data.push(id); end
@item_max = @data.size
create_contents
for i in 0..(@item_max-1); draw_item(i); end
end
#--------------------------------------------------------------------------
# draw_item
#--------------------------------------------------------------------------
def draw_item(index)
actor = $game_actors[@data[index]]
rect = item_rect(index)
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
if actor == nil
color = Color.new(0, 0, 0, YEZ::PARTY::BACK_OPACITY)
self.contents.fill_rect(rect.x+2, rect.y+2, rect.width-4, rect.height-4, color)
if @selected_index != nil and @selected_index == index
self.contents.font.color = text_color(YEZ::PARTY::ACTIVE_COLOUR)
else
self.contents.font.color = system_color
end
text = YEZ::PARTY::VOCAB[:empty]
self.contents.draw_text(rect.x, WLH*3/2, rect.width, WLH, text, 1)
return
end
draw_actor_face(actor, rect.x+2, rect.y+2, 92)
draw_actor_name(actor, rect.x, rect.y)
if $game_party.fixed_members.include?(actor)
draw_icon(YEZ::PARTY::LOCKED_ICON, rect.x, rect.y + WLH*3)
end
end
#--------------------------------------------------------------------------
# draw_actor_face
#--------------------------------------------------------------------------
def draw_actor_face(actor, x, y, size = 96)
opacity = YEZ::PARTY::FACE_OPACITY
face_name = actor.face_name
face_index = actor.face_index
bitmap = Cache.face(face_name)
rect = Rect.new(0, 0, 0, 0)
rect.x = face_index % 4 * 96 + (96 - size) / 2
rect.y = face_index / 4 * 96 + (96 - size) / 2
rect.width = size
rect.height = size
self.contents.blt(x, y, bitmap, rect, opacity)
bitmap.dispose
end
#--------------------------------------------------------------------------
# draw_actor_name
#--------------------------------------------------------------------------
def draw_actor_name(actor, dx, dy)
dx += 4; dw = 88
if @selected_index != nil and @selected_index == actor.index
self.contents.font.color = text_color(YEZ::PARTY::ACTIVE_COLOUR)
else
self.contents.font.color = hp_color(actor)
end
self.contents.draw_text(dx, dy, dw, WLH, actor.name, 0)
end
#--------------------------------------------------------------------------
# overwrite method: top_row
#--------------------------------------------------------------------------
def top_row; return self.oy / 96; end
#--------------------------------------------------------------------------
# overwrite method: top_row=
#--------------------------------------------------------------------------
def top_row=(row); super(row); self.oy = self.oy / WLH * 96; end
#--------------------------------------------------------------------------
# overwrite method: page_row_max
#--------------------------------------------------------------------------
def page_row_max; return (self.height - 32) / 96; end
#--------------------------------------------------------------------------
# overwrite method: item_rect
#--------------------------------------------------------------------------
def item_rect(index)
rect = Rect.new(0, 0, 96, 96)
rect.x = index % @column_max * (rect.width + @spacing)
rect.y = index / @column_max * 96
return rect
end
#--------------------------------------------------------------------------
# overwrite method: update_cursor
#--------------------------------------------------------------------------
def update_cursor
if @index < 0
self.cursor_rect.empty
elsif @index < @item_max
super
elsif @index >= 100
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end # Window_PartyBattlers
#===============================================================================
# Window_PartyActors
#===============================================================================
class Window_PartyActors < Window_Selectable
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :selected_index
#--------------------------------------------------------------------------
# initialize
#--------------------------------------------------------------------------
def initialize
super(0, 128, 160, 288)
self.index = -1
refresh
end
#--------------------------------------------------------------------------
# new method: item
#--------------------------------------------------------------------------
def item; return @data[self.index]; end
#--------------------------------------------------------------------------
# new method: selected_item
#--------------------------------------------------------------------------
def selected_item; return @data[@selected_index]; end
#--------------------------------------------------------------------------
# refresh
#--------------------------------------------------------------------------
def refresh
@data = []
for actor in $game_party.all_members; @data.push(actor.id); end
@data = @data + [0]
@item_max = @data.size
create_contents
for i in 0..(@item_max-1); draw_item(i); end
end
#--------------------------------------------------------------------------
# draw_item
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
actor = $game_actors[@data[index]]
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
if actor == nil
draw_icon(YEZ::PARTY::CLEAR_ICON, rect.x+6, rect.y)
rect.x += 32; rect.width -= 34
text = YEZ::PARTY::VOCAB[:clear]
self.contents.draw_text(rect.x, rect.y, rect.width, WLH, text)
return
end
offset = YEZ::PARTY::SPRITE_OFFSET
draw_actor_graphic(actor, rect.x + 16, rect.y + rect.height + offset)
rect.x += 32
rect.width -= 34
self.contents.font.color = hp_color(actor)
enabled = !$game_party.battle_members.include?(actor)
self.contents.font.color.alpha = enabled ? 255 : 128
if @selected_index != nil and @selected_index == index
self.contents.font.color = text_color(YEZ::PARTY::ACTIVE_COLOUR)
end
self.contents.draw_text(rect.x, rect.y, rect.width, WLH, actor.name)
end
end # Window_PartyActors
#===============================================================================
# Window_PartyHelp
#===============================================================================
class Window_PartyHelp < Window_Base
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :type
#--------------------------------------------------------------------------
# initialize
#--------------------------------------------------------------------------
def initialize
super(416, 0, 128, 128)
refresh
end
#--------------------------------------------------------------------------
# refresh
#--------------------------------------------------------------------------
def refresh(type = 1)
self.contents.clear
@type = type
vocab = YEZ::PARTY::VOCAB
keys = YEZ::PARTY::KEYS
buttons = YEZ::ICONS[:buttons] if $imported["Icons"]
dx = 4; dw = 120
if @type == 1
text1 = vocab[:c_battler]
text2 = vocab[:b_battler]
text3 = vocab[:a_battler]
text4 = vocab[:x_battler]
if $imported["Icons"]
draw_icon(buttons[:c], 0, WLH*0)
draw_icon(buttons[:b], 0, WLH*1)
draw_icon(buttons[:a], 0, WLH*2)
draw_icon(buttons[:x], 0, WLH*3)
dx = 24; dw = 100
else
text1 = sprintf(keys[:c], text1)
text2 = sprintf(keys[:b], text2)
text3 = sprintf(keys[:a], text3)
text4 = sprintf(keys[:x], text4)
end
elsif @type == 2
text1 = vocab[:c_actors]
text2 = vocab[:b_actors]
text3 = vocab[:a_actors]
text4 = vocab[:x_actors]
if $imported["Icons"]
draw_icon(buttons[:c], 0, WLH*0)
draw_icon(buttons[:b], 0, WLH*1)
draw_icon(buttons[:a], 0, WLH*2)
draw_icon(buttons[:x], 0, WLH*3)
dx = 24; dw = 100
else
text1 = sprintf(keys[:c], text1)
text2 = sprintf(keys[:b], text2)
text3 = sprintf(keys[:a], text3)
text4 = sprintf(keys[:x], text4)
end
end
self.contents.draw_text(dx, WLH*0, dw, WLH, text1)
self.contents.draw_text(dx, WLH*1, dw, WLH, text2)
self.contents.draw_text(dx, WLH*2, dw, WLH, text3)
self.contents.draw_text(dx, WLH*3, dw, WLH, text4)
end
end # Window_PartyHelp
#===============================================================================
# Window_PartyStatus
#===============================================================================
class Window_PartyStatus < Window_Base
#--------------------------------------------------------------------------
# initialize
#--------------------------------------------------------------------------
def initialize
super(160, 128, 384, 288)
end
#--------------------------------------------------------------------------
# item
#--------------------------------------------------------------------------
def item; return @actor; end
#--------------------------------------------------------------------------
# refresh
#--------------------------------------------------------------------------
def refresh(actor_id)
self.contents.clear
if actor_id <= 0
color = Color.new(0, 0, 0, YEZ::PARTY::BACK_OPACITY)
self.contents.fill_rect(0, 0, self.width, self.height, color)
self.contents.font.color = system_color
text = YEZ::PARTY::VOCAB[:nodata]
self.contents.draw_text(0, self.height/2-24, self.width-40, WLH, text, 1)
return
end
actor = $game_actors[actor_id]
@actor = actor
draw_actor_face(actor, 0, 0, size = 96)
x = 104
y = 0
draw_actor_name(actor, x, y)
draw_actor_class(actor, x + 120, y)
draw_actor_level(actor, x, y + WLH * 1)
draw_actor_state(actor, x, y + WLH * 2)
draw_stun_indicator(x, y + WLH * 3, actor) if $imported["ClassStatDUR"]
draw_actor_hp(actor, x + 120, y + WLH * 1, 120)
draw_actor_mp(actor, x + 120, y + WLH * 2, 120)
draw_actor_exp(actor, x + 120, y + WLH * 3, 120)
draw_actor_stats(actor, 0, y + WLH * 9/2)
end
#--------------------------------------------------------------------------
# draw_actor_exp
#--------------------------------------------------------------------------
def draw_actor_exp(actor, x, y, size = 120)
if actor.next_exp != 0
gw = size * actor.now_exp
gw /= actor.next_exp
else
gw = size
end
gc1 = text_color(YEZ::PARTY::EXP_GAUGE_1)
gc2 = text_color(YEZ::PARTY::EXP_GAUGE_2)
self.contents.fill_rect(x, y + WLH - 8, size, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 40, WLH, YEZ::PARTY::EXP_TEXT)
self.contents.font.color = normal_color
if actor.next_exp != 0
expercent = actor.now_exp * 100.0
expercent /= actor.next_exp
else
expercent = 100.0
end
expercent = 100.0 if expercent > 100.0
text = sprintf(YEZ::PARTY::PERCENT_EXP, expercent)
self.contents.draw_text(x, y, size, WLH, text, 2)
end
#--------------------------------------------------------------------------
# draw_actor_stats
#--------------------------------------------------------------------------
def draw_actor_stats(actor, dx, dy)
fx = dx; fy = dy
cw = calc_width
for stat in YEZ::PARTY::SHOWN_STATS
icon = 0; up_icon = YEZ::PARTY::UP_ICON; dn_icon = YEZ::PARTY::DN_ICON
case stat
when :atk
up_icon = YEZ::ICONS[:upatk] if $imported["Icons"]
dp_icon = YEZ::ICONS[:dnatk] if $imported["Icons"]
icon = $imported["Icons"] ? YEZ::ICONS[:atk] : 0
icon = up_icon if actor.atk > actor.base_atk
icon = dn_icon if actor.atk < actor.base_atk
name = Vocab.atk
value = actor.atk
when :def
up_icon = YEZ::ICONS[:updef] if $imported["Icons"]
dp_icon = YEZ::ICONS[:dndef] if $imported["Icons"]
icon = $imported["Icons"] ? YEZ::ICONS[:def] : 0
icon = up_icon if actor.def > actor.base_def
icon = dn_icon if actor.def < actor.base_def
name = Vocab.def
value = actor.def
when :spi
up_icon = YEZ::ICONS[:upspi] if $imported["Icons"]
dp_icon = YEZ::ICONS[:dnspi] if $imported["Icons"]
icon = $imported["Icons"] ? YEZ::ICONS[:spi] : 0
icon = up_icon if actor.spi > actor.base_spi
icon = dn_icon if actor.spi < actor.base_spi
name = Vocab.spi
value = actor.spi
when :agi
up_icon = YEZ::ICONS[:upagi] if $imported["Icons"]
dp_icon = YEZ::ICONS[:dnagi] if $imported["Icons"]
icon = $imported["Icons"] ? YEZ::ICONS[:agi] : 0
icon = up_icon if actor.agi > actor.base_agi
icon = dn_icon if actor.agi < actor.base_agi
name = Vocab.agi
value = actor.agi
when :hit
icon = $imported["Icons"] ? YEZ::ICONS[:hit] : 0
value = sprintf("%d%%",[[actor.hit, 0].max, 99].min)
name = Vocab.hit
when :eva
icon = $imported["Icons"] ? YEZ::ICONS[:eva] : 0
value = sprintf("%d%%",[[actor.eva, 0].max, 99].min)
name = Vocab.eva
when :cri
icon = $imported["Icons"] ? YEZ::ICONS[:cri] : 0
value = sprintf("%d%%",[[actor.cri, 0].max, 99].min)
name = Vocab.cri
when :odds
icon = $imported["Icons"] ? YEZ::ICONS[:odds] : 0
value = actor.odds
name = Vocab.odds
when :res
next unless $imported["BattlerStatRES"]
up_icon = YEZ::ICONS[:upres] if $imported["Icons"]
dp_icon = YEZ::ICONS[:dnres] if $imported["Icons"]
icon = $imported["Icons"] ? YEZ::ICONS[:res] : 0
icon = up_icon if actor.res > actor.base_res
icon = dn_icon if actor.res < actor.base_res
value = actor.res
name = Vocab.res
when :dex
next unless $imported["BattlerStatDEX"]
up_icon = YEZ::ICONS[:updex] if $imported["Icons"]
dp_icon = YEZ::ICONS[:dndex] if $imported["Icons"]
icon = $imported["Icons"] ? YEZ::ICONS[:dex] : 0
icon = up_icon if actor.dex > actor.base_dex
icon = dn_icon if actor.dex < actor.base_dex
value = actor.dex
name = Vocab.dex
when :luk
next unless $imported["ClassStatLUK"]
up_icon = YEZ::ICONS[:upluk] if $imported["Icons"]
dp_icon = YEZ::ICONS[:dnluk] if $imported["Icons"]
icon = $imported["Icons"] ? YEZ::ICONS[:luk] : 0
icon = up_icon if actor.luk > actor.base_luk
icon = dn_icon if actor.luk < actor.base_luk
value = actor.luk
name = Vocab.luk
when :dur
next unless $imported["ClassStatDUR"]
icon = $imported["Icons"] ? YEZ::ICONS[:dur] : 0
value = actor.max_dur
name = Vocab.dur
else; next
end
draw_icon(icon, dx, dy)
self.contents.font.color = system_color
self.contents.draw_text(dx+24, dy, 60, WLH, name, 0)
self.contents.font.color = normal_color
self.contents.draw_text(dx+84, dy, cw, WLH, value, 2)
dx = dx == fx ? dx + (self.width-32)/2 : fx
dy = dx == fx ? dy + WLH : dy
break if dy + 24 > self.height - 32
end
end
#--------------------------------------------------------------------------
# calc_width
#--------------------------------------------------------------------------
def calc_width
return @calc_width if @calc_width != nil
n = 0
for actor in $game_party.members
for item in YEZ::PARTY::SHOWN_STATS
text = ""
case item
when :atk; text = actor.atk
when :def; text = actor.def
when :spi; text = actor.spi
when :agi; text = actor.agi
when :res; text = actor.res if $imported["BattlerStatRES"]
when :dex; text = actor.dex if $imported["BattlerStatDEX"]
when :hit; text = sprintf("%d%%", [[actor.hit, 0].max, 99].min)
when :eva; text = sprintf("%d%%", [[actor.eva, 0].max, 99].min)
when :cri; text = sprintf("%d%%", [[actor.cri, 0].max, 99].min)
when :dur; text = actor.dur if $imported["ClassStatDUR"]
when :luk; text = actor.luk if $imported["BattlerStatLUK"]
when :odds; text = actor.odds
else; next
end
n = [n, contents.text_size(text).width].max
end
end
@calc_width = n
return n
end
end # Window_PartyStatus
#===============================================================================
# Window_PartyAssort
#===============================================================================
class Window_PartyAssort < Window_Selectable
#--------------------------------------------------------------------------
# initialize
#--------------------------------------------------------------------------
def initialize
super(160, 164, 384, 264)
@column_max = 2
@spacing = 0
self.opacity = 0
self.index = 0
self.visible = false
self.active = false
refresh
end
#--------------------------------------------------------------------------
# command
#--------------------------------------------------------------------------
def command; return @data[self.index]; end
#--------------------------------------------------------------------------
# refresh
#--------------------------------------------------------------------------
def refresh
@data = []; @vocab = []
for command in YEZ::PARTY::ASSORT_COMMANDS
case command
when :story, :name, :class, :level; @vocab.push(YEZ::PARTY::VOCAB[command])
when :hp; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.hp))
when :mp; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.mp))
when :atk; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.atk))
when :def; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.def))
when :spi; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.spi))
when :agi; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.agi))
when :hit; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.hit))
when :eva; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.eva))
when :cri; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.cri))
when :odds; @vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.odds))
when :res
next unless $imported["BattlerStatRES"]
@vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.res))
when :dex
next unless $imported["BattlerStatDEX"]
@vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.dex))
when :dur
next unless $imported["ClassStatDUR"]
@vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.dur))
when :luk
next unless $imported["ClassStatLUK"]
@vocab.push(sprintf(YEZ::PARTY::VOCAB[:stat], Vocab.luk))
else; next
end
@data.push(command)
end
@item_max = @data.size
create_contents
for i in 0..(@item_max-1); draw_item(i); end
end
#--------------------------------------------------------------------------
# draw_item
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
text = @vocab[index]
return if text == nil
icon = YEZ::PARTY::CLEAR_ICON
if $imported["Icons"] and YEZ::ICONS.include?(@data[index])
icon = YEZ::ICONS[@data[index]]
end
draw_icon(icon, rect.x, rect.y)
rect.x += 24
rect.width -= 28
self.contents.draw_text(rect, text, 0)
end
end # Window_PartyAssort
#===============================================================================
#
# END OF FILE
#
#===============================================================================