Ok, here we go for a second try..... -.- Having trouble with the spoiler tags....sorry.
Here is Big Ed's Level Up Display Script:
CODE
module LevelUpDisplayConfig
#--------------------------------------------------------------------------
# * General Configuration Options
#--------------------------------------------------------------------------
#The windowskin file name, minus the extension
WINDOWSKIN_NAME = 'Window'
#The sound effect name that is played when the window is displayed
LEVEL_UP_SE = 'Recovery'
#The sound effect volume
LEVEL_UP_SE_VOLUME = 80
#Display the skill window?
USE_SKILL_WINDOW = true
#The title text used in the "New Skills" window (if not nil)
#For example, NEW_SKILL_TITLE_TEXT = 'Abilities'
NEW_SKILL_TITLE_TEXT = nil
#Show the actor's sprite?
USE_SPRITE_GRAPHIC = true
#Opacity of the main window
WINDOW_OPACITY = 255
#--------------------------------------------------------------------------
# * Stat Window Configuration
#--------------------------------------------------------------------------
#The color of the actor's name in the window (gold by default)
NAME_COLOR = Color.new(255,235,0)
#The color of the actor's level in the window (gold by default)
LEVEL_COLOR = Color.new(255,235,0)
#The color of the actor's stat names in the window (gold by default)
STAT_COLOR = Color.new(255,235,0)
#The color of the actor's old stat values (white by default)
OLD_STAT_COLOR = Color.new(255,255,255)
#The color of the actor's new stat values, if a net gain (green by default)
NEW_STAT_VAL_COLOR = Color.new(0,250,154)
#The color of the actor's new stat values, if a net loss (red by default)
STAT_VAL_LOSS_COLOR = Color.new(255, 0, 0)
#--------------------------------------------------------------------------
# * Skill Window Configuration
#--------------------------------------------------------------------------
#The color of the text in the skills title window
SKILL_TITLE_COLOR = Color.new(255,215,0)
#The color of the new skills text in the skills window
SKILL_WINDOW_FONT_COLOR = Color.new(240,248,255)
#--------------------------------------------------------------------------
# * There is no need to modify the constants below
#--------------------------------------------------------------------------
STAT_WINDOW_WIDTH = 320
SKILL_WINDOW_WIDTH = 165
WINDOW_HEIGHT = 220
SUB_WINDOW_HEIGHT = 45
end
#==========================================================================
# * Game_Actor
#--------------------------------------------------------------------------
# overrides -
# * display_level_up (if DISPLAY_DEF_MESSAGE is set to false in config)
#==========================================================================
include LevelUpDisplayConfig
class Game_Actor < Game_Battler
attr_reader :last_level
attr_reader :last_hp
attr_reader :last_mp
attr_reader :last_atk
attr_reader :last_def
attr_reader :last_spi
attr_reader :last_agi
attr_reader :last_learned_skills
#--------------------------------------------------------------------------
# * Change Experience
# exp : New experience
# show : Level up display flag
#--------------------------------------------------------------------------
alias :eds_old_change_exp :change_exp
def change_exp(exp, show)
#save off the old paramters
prev_skills = skills
@last_level = @level
@last_hp = self.base_maxhp
@last_mp = self.base_maxmp
@last_atk = self.base_atk
@last_def = self.base_def
@last_spi = self.base_spi
@last_agi = self.base_agi
eds_old_change_exp(exp, show)
@last_learned_skills = skills - prev_skills
end
if USE_SKILL_WINDOW
#--------------------------------------------------------------------------
# * Show Level Up Message
# new_skills : Array of newly learned skills
#--------------------------------------------------------------------------
# If we are not displaying the standard message when
# gaining a level, simply remove the loop that creates
# the learned skills message. Continue to display
# the skills that were learned if we are not in battle.
#--------------------------------------------------------------------------
alias :eds_old_display_level_up :display_level_up
def display_level_up(new_skills)
if $game_temp.in_battle
$game_message.new_page
text = sprintf(Vocab::LevelUp, @name, Vocab::level, @level)
$game_message.texts.push(text)
else
eds_old_display_level_up(new_skills)
end
end
end #skill window check
end
#==========================================================================
# * Window_LevelUpdate
#--------------------------------------------------------------------------
# The main window that appears in battle when a level is gained.
# Displays stat info, faceset, and (optionally) the actor sprite.
#==========================================================================
class Window_LevelUpdate < Window_Base
def initialize(actor)
w = STAT_WINDOW_WIDTH
h = WINDOW_HEIGHT
if USE_SKILL_WINDOW
super(272 - (w / 2) - (SKILL_WINDOW_WIDTH / 2), 50, w, h)
else
super(272 - (w / 2), 50, w, h)
end
self.windowskin = Cache.system(WINDOWSKIN_NAME)
self.back_opacity = WINDOW_OPACITY
self.z = 9997
@actor = actor
@animation_index = 0
@arrow = Cache.picture('level_up_arrow')
@y_offset = 12 #give some room under level display
#begin drawing new level and old stat text
@col_one_offset = 0
#Draw old stats
@col_two_offset = @col_one_offset + 60
#begin drawing Faceset/sprite and skills gained
@col_four_offset = 0
#begin drawing Faceset/sprite graphics
@col_five_offset = 190
#play the sound effect
RPG::SE.new(LEVEL_UP_SE, LEVEL_UP_SE_VOLUME).play
#calculates the offet for drawing level info
calc_level_offsets
setup_name_window
draw_stat_names
draw_old_stat_values
draw_arrows
draw_new_stat_values
draw_actor_rep
update
end
#--------------------------------------------------------------------------
# * Create and display the name window
#--------------------------------------------------------------------------
def setup_name_window
@name_window = Window_Base.new(self.x + 20, self.y - 30 , fit_to_text(@actor.name), SUB_WINDOW_HEIGHT)
@name_window.z = 9998
@name_window.windowskin = Cache.system(WINDOWSKIN_NAME)
@name_window.back_opacity = 255
@name_sprite = Sprite.new
@name_sprite.bitmap = Bitmap.new(@name_window.width, @name_window.height)
@name_sprite.bitmap.font.color = NAME_COLOR
@name_sprite.x = @name_window.x + 15
@name_sprite.y = @name_window.y - 10
@name_sprite.z = 9999
@name_sprite.bitmap.draw_text(0, 0, @name_sprite.bitmap.width, 60, @actor.name)
end
#--------------------------------------------------------------------------
# * Draws the level and stat text (not the values themselves)
#--------------------------------------------------------------------------
def draw_stat_names
self.contents.font.color = LEVEL_COLOR
self.contents.draw_text(@col_one_offset, 0, 60, WLH, "Lv.")
self.contents.font.color = STAT_COLOR
self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.hp)
self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.mp)
self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.atk)
self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.def)
self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.spi)
self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.agi)
#reset the font color
self.contents.font.color = Font.default_color
#reset the y_offset to 12
y_incr_reset
end
#--------------------------------------------------------------------------
# * Draws the old level and stat values
#--------------------------------------------------------------------------
def draw_old_stat_values
self.contents.font.color = OLD_STAT_COLOR
self.contents.draw_text(@col_level_old_offset, 0, 60, WLH, @actor.last_level)
self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_hp)
self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_mp)
self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_atk)
self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_def)
self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_spi)
self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_agi)
#reset the font color
self.contents.font.color = Font.default_color
#reset the y_offset to 12
y_incr_reset
end
#--------------------------------------------------------------------------
# * Draws the arrows
#--------------------------------------------------------------------------
def draw_arrows
if @actor.last_hp - 100 < 0
@col_three_offset = @col_two_offset + 30
elsif @actor.last_hp - 1000 < 0
@col_three_offset = @col_two_offset + 40
else
@col_three_offset = @col_two_offset + 50
end
draw_arrow(@col_level_arrow_offset, 6) #level
draw_arrow(@col_three_offset, y_incr + 6) #hp
draw_arrow(@col_three_offset, y_incr + 6) #mp
draw_arrow(@col_three_offset, y_incr + 6) #atk
draw_arrow(@col_three_offset, y_incr + 6) #def
draw_arrow(@col_three_offset, y_incr + 6) #spi
draw_arrow(@col_three_offset, y_incr + 6) #agi
calc_col_four_offset(@col_three_offset)
#reset the y_offset to 12
y_incr_reset
end
#--------------------------------------------------------------------------
# * Draws the new level and stat values
#--------------------------------------------------------------------------
def draw_new_stat_values
draw_new_stat(@col_level_new_offset, 0, 60, WLH, @actor.last_level, @actor.level)
draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_hp, @actor.maxhp)
draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_mp, @actor.maxmp)
draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_atk, @actor.base_atk)
draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_def, @actor.base_def)
draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_spi, @actor.base_spi)
draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_agi, @actor.base_agi)
self.contents.font.color = Font.default_color
#reset the y_offset to 12
y_incr_reset
end
def draw_new_stat(x, y, w, h, prev_val, val)
if val > prev_val #gain
self.contents.font.color = NEW_STAT_VAL_COLOR
elsif val == prev_val #no change
self.contents.font.color = OLD_STAT_COLOR
else #loss
self.contents.font.color = STAT_VAL_LOSS_COLOR
end
self.contents.draw_text(x, y, w, h, val)
end
#--------------------------------------------------------------------------
# * Draws the faceset and optionally the actor sprite
#--------------------------------------------------------------------------
def draw_actor_rep
draw_actor_face(@actor, @col_five_offset, 0)
if (USE_SPRITE_GRAPHIC)
x_pos = @col_five_offset + ((self.width - @col_five_offset) / 2) - 18
draw_character(@actor.character_name, @actor.character_index, x_pos, 160)
end
end
#--------------------------------------------------------------------------
# * Draws an arrow
#--------------------------------------------------------------------------
def draw_arrow(x, y)
src_rect = Rect.new(0, 0, @arrow.width, @arrow.height)
self.contents.blt(x, y, @arrow, src_rect)
end
#--------------------------------------------------------------------------
# * figures out the spacing for the level text display
#--------------------------------------------------------------------------
def calc_level_offsets
@col_level_old_offset = @col_one_offset + 30
if @actor.last_level < 10
@col_level_arrow_offset = @col_level_old_offset + 20
else
@col_level_arrow_offset = @col_level_old_offset + 30
end
@col_level_new_offset = @col_level_arrow_offset + 26
end
#--------------------------------------------------------------------------
# * Increments the y counter
#--------------------------------------------------------------------------
def y_incr
@y_offset += WLH
return @y_offset
end
#--------------------------------------------------------------------------
# * Resets the y counter
#--------------------------------------------------------------------------
def y_incr_reset
@y_offset = 12
end
#--------------------------------------------------------------------------
# * calculate where to draw col four text (new stat values)
#--------------------------------------------------------------------------
def calc_col_four_offset(col_three)
@col_four_offset = col_three + 22
end
#--------------------------------------------------------------------------
# * Fit the window width to the text
#--------------------------------------------------------------------------
def fit_to_text(text)
w = self.contents.text_size(text).width + 32
return w > 90 ? w : 90
end
#--------------------------------------------------------------------------
# * Update the child window position
#--------------------------------------------------------------------------
def update_child_window_pos
@name_window.x = self.x + 20
@name_window.y = self.y - 30
@name_sprite.x = @name_window.x + 15
@name_sprite.y = @name_window.y - 10
end
#--------------------------------------------------------------------------
# * Destroy the sprite!
#--------------------------------------------------------------------------
def dispose
super
@name_window.dispose
@name_sprite.dispose
end
end
#============================================================================
# * Window_SkillUpdate
#----------------------------------------------------------------------------
# The learned skill window
#============================================================================
class Window_SkillUpdate < Window_Base
def initialize(actor, parent_x, parent_y, parent_width)
x = parent_x + parent_width
h = WINDOW_HEIGHT
w = SKILL_WINDOW_WIDTH
super(x, parent_y, w, h)
self.windowskin = Cache.system(WINDOWSKIN_NAME)
self.back_opacity = WINDOW_OPACITY
self.contents.font.color = SKILL_WINDOW_FONT_COLOR
self.z = 9997
@actor = actor
@skills = []
setup_title_window
populate_skill_list
end
#--------------------------------------------------------------------------
# * create the title window
#--------------------------------------------------------------------------
def setup_title_window
#check to see if custom text is defined
if NEW_SKILL_TITLE_TEXT == nil
skill_title_text = sprintf("New %ss", Vocab.skill)
else
skill_title_text = NEW_SKILL_TITLE_TEXT
end
middle_parent = self.x + (self.width / 2)
w = fit_to_text(skill_title_text)
h = SUB_WINDOW_HEIGHT
x = middle_parent - (w / 2)
y = self.y - 30
@title_window = Window_Base.new(x, y, w, h)
@title_window.z = 9998
@title_window.windowskin = Cache.system(WINDOWSKIN_NAME)
@title_window.back_opacity = 255
@title_sprite = Sprite.new
@title_sprite.bitmap = Bitmap.new(@title_window.width, @title_window.height)
@title_sprite.bitmap.font.color = SKILL_TITLE_COLOR
@title_sprite.x = @title_window.x + 15
@title_sprite.y = @title_window.y + 4
@title_sprite.z = 9999
@title_sprite.bitmap.draw_text(0, 0, @title_sprite.bitmap.width, 32, skill_title_text)
end
#--------------------------------------------------------------------------
# * My edit of draw_item_name.
# Necessary because the default one changes the font color.
#--------------------------------------------------------------------------
def draw_my_item_name(item, x, y, enabled = true)
if item != nil
draw_icon(item.icon_index, x, y, enabled)
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(x + 24, y, 172, WLH, item.name)
end
end
#--------------------------------------------------------------------------
# * draw all of the skills that were learned
#--------------------------------------------------------------------------
def populate_skill_list
skills = @actor.last_learned_skills
y = 0
for skill in skills
draw_my_item_name(skill, 0, y)
y += 32
end
end
#--------------------------------------------------------------------------
# * Fit the window width to the text
#--------------------------------------------------------------------------
def fit_to_text(text)
return self.contents.text_size(text).width + 32
end
#--------------------------------------------------------------------------
# * Kill the sprite!
#--------------------------------------------------------------------------
alias :eds_old_dispose :dispose
def dispose
eds_old_dispose
@title_window.dispose
@title_sprite.dispose
end
end
#============================================================================
# * Scene_Battle
#----------------------------------------------------------------------------
# overrides -
# * display_level_up
#============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Display Level Up
#--------------------------------------------------------------------------
def display_level_up
#patch for KGC Equip Learn Skill script
if $imported != nil and $imported["EquipLearnSkill"]
display_master_equipment_skill
end
exp = $game_troop.exp_total
for actor in $game_party.existing_members
last_level = actor.level
last_skills = actor.skills
actor.gain_exp(exp, true)
if actor.level > last_level
win = Window_LevelUpdate.new(actor)
#if we are using the skill window and the skills have changed...
if USE_SKILL_WINDOW && last_skills.length != actor.skills.length
s_win = Window_SkillUpdate.new(actor, win.x, win.y, win.width)
wait_for_message
s_win.dispose if USE_SKILL_WINDOW
else
#move the window back to center screen and update the name window
win.x = 272 - (win.width / 2)
win.update_child_window_pos
wait_for_message
end
win.dispose
end
end
end
And this is KGC Distribute Parameter:
[spoiler="Script"]
CODE
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ ◆ Attribute Point Stat Distribution - KGC_DistributeParameter ◆ VX ◆
#_/ ◇ Last Update: 2008/09/13 ◇
#_/ ◆ Translation by Mr. Anonymous ◆
#_/ ◆ Extended Annotation by Touchfuzzy ◆
#_/ ◆ Extended Updates by MrAnonymous & Touchfuzzy ◆
#_/ ◆ KGC Site: ◆
#_/ ◆ http://f44.aaa.livedoor.jp/~ytomy/ ◆
#_/ ◆ Translator's Blog: ◆
#_/ ◆ http://mraprojects.wordpress.com ◆
#_/-----------------------------------------------------------------------------
#_/ This script gives you the ability to completely change the way actors'
#_/ attributes are gained. This system allows for the player to distribute stat
#_/ points to actors which are gained upon level up.
#_/=============================================================================
#_/ ◆ Script Commands ◆
#_/ These commands are used in "Script" function in the third page of event
#_/ commands under "Advanced".
#_/
#_/ * gain_rp(ActorID, Value)
#_/ Increases the MaxRP of a given actor.
#_/
#_/ * reset_distributed_count(ActorID)
#_/ Resets the distributed RP of a given actor.
#_/
#_/ * call_distribute_parameter(ActorID)
#_/ Calls the Distribute Parameter screen for a given actor.
#_/
#_/=============================================================================
#_/ Install: Insert below KGC_ExtendedEquipScene and KGC_CustomMenuCommand.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#==============================================================================#
# ★ Customization ★ #
#==============================================================================#
module KGC
module DistributeParameter
# ◆ Distribution Tables ◆
# Here you may customize the costs and increase rates of specific parameters.
# The order in which these costs and increase rates are set are as follows:
# [IPC, IPSG, MAP, PCI, PSGI]
# Key:
# IPC = Initial Point Cost. This is how many AP it cost to buy the first
# point of this parameter.
#
# IPSG = Initial Point Stat Growth. This is how much the stat will go up with
# the first point of this parameter.
#
# MAP = Maximum Attribute Points. The maximum amount of AP that can be spent
# on this stat. You may also put a level based equation in this but
# remember that if you put in an equation it is IMPORTANT that you put
# quotation marks ("") around it and to use level in all lower case.
# Example: "level"
#
# PCI = Point Cost Increase. For every AP spent in this parameter the cost
# of this parameter increases by this amount.
#
# PSGI = Point Stat Growth Increase. For every AP spent in this parameter
# the number of points you gain in the stat increases by this much.
#
# Also, if you completely remove a line (e.g. ":hit => [1, 1, 20, 0.7],")
# it will remove it from the distribution screen altogether.
# Very useful if your project doesn't require a specific stat.
GAIN_PARAMETER = {
# Parameter IPC, IPSG, MAP, PCI, PSGI
:maxhp => [1, 30, 30, 0.4, 2], # Maximum HP
:maxmp => [1, 5, 30, 0.4, 0.5], # Maximum MP
:atk => [1, 2, 30, 0.4, 0.5], # Attack
:def => [1, 2, 30, 0.4, 0.5], # Defense
:spi => [1, 2, 30, 0.4, 0.5], # Spirit
:agi => [1, 2, 30, 0.4, 0.5], # Agility
:hit => [1, 1, 20, 0.7], # Hit Ratio (Accuracy)
:eva => [1, 1, 20, 0.7], # Evasion
:cri => [1, 1, 20, 0.7], # Critical
:odds => [1, 1, 5], # Luck (Chance of being targetted)
# ◆ AP Gain Rate ◆
# Added by Touchfuzzy.
# I added this in to the GAIN_PARAMETER tables so that you can use seperate
# equations for different characters and classes.
# This is the equation that determines your total AP gained every level.
# (Character Level to the 0.25th power + 2) * Level
# This causes you to start at 3 points per level and increase slightly over
# time.
# As an example if you wish to gain a static 3 points per level write it as
# :maxrpexp = "level * 3"
:maxrpexp => ["(level ** 0.25 + 2.0) * level"], # Max AP
} # <- Do not remove!
# ◆ Individual Actor Gain Parameter Tables ◆
# You may choose to manually specify an individual actor's gain parameters.
# To do so, use the same format as above GAIN_PARAMETER table but instead
# use PERSONAL_GAIN_PARAMETER [n] (Where n = Actor ID)
# Any parameter you do not set in this table will instead draw from the
# GAIN_PARAMETER chart.
#
# Example:
PERSONAL_GAIN_PARAMETER[1] = {
:maxhp => [2, 20, 50, 0.5, 5],
:maxmp => [1, 10, 30, 0.3, 0.5],
:atk => [1, 1, 30, 0.3, 0.5],
:def => [1, 2, 30, 0.4, 0.5],
:spi => [1, 2, 50, 0.5, 0.8],
:agi => [1, 2, 30, 0.4, 0.6],
:hit => [1, 1, 20, 0.7],
:eva => [1, 1, 20, 0.7],
:cri => [1, 1, 20, 0.7],
:skill_speed => [1, 1, 20, 0.5],
:item_speed => [1, 1, 20, 0.5],
:odds => [1, 1, 5],
:maxrpexp => ["(level ** 0.25 + 2.0) * level"]
}
# ★ Insert Custom Actor Gain Tables Below Here ★
# ★ Insert Custom Actor Gain Tables Above Here ★
# ◆ Class-Specific Gain Parameter Tables ◆
# You may choose to manually specify an entire class's gain parameters.
# To do so, use the same format as above GAIN_PARAMETER table but instead
# use CLASS_GAIN_PARAMETER [n] (Where n = Number of class in the database)
# Any parameter you do not set in this table will instead draw from the
# GAIN_PARAMETER chart. Also note that class gain parameters take the highest
# priority.
# ★ Insert Custom Class Gain Tables Below Here ★
# ★ Insert Custom Class Gain Tables Above Here ★
# ◆ AP = Attribute Points. These settings are for the AP Distrubution Screen.
# VOCAB_RP appears at the top of the column which lists the AP cost of
# the parameter
VOCAB_RP = "Cost"
# VOCAB_RP_A appears next to where it lists your current and total AP.
VOCAB_RP_A = "AP"
# ◆ Parameter Labels ◆
# Allows you to change the text of Hit Ratio, Evasion, Critical, Skill
# Speed, Item Speed, and Odds (luck) on the distribution screen.
VOCAB_PARAM = {
:hit => "ACU", # Hit Ratio (Accuracy)
:eva => "EVA", # Evasion
:cri => "CRI", # Critical
:skill_speed => "SSD", # Skill Speed
:item_speed => "ISD", # Item Speed
:odds => "LCK", # Odds (Luck)
} # <- Do not remove!
# ◆ Caption Text ◆
# These fields affect the text at the top of the distribution screen.
# Attribute name label.
AT_CAPTION = "Attribute"
# AP cost/rate label.
RT_CAPTION = "Rate"
# Current AP ppent on given attribute label.
SP_CAPTION = "Spent"
# Current status (right window) label.
CS_CAPTION = "Current Status"
# ◆ Help Window Text ◆
# Text of the menu title for the AP Distribution Screen.
DISTRIBUTE_SCENE_CAPTION = "Stat Distribution - Press L or R to switch characters."
# ◆ AP Gauge Colors ◆
# Allows you to change the color of the guages that appear under the stats
# side bar. The color can also be determined by a numerical expression.
# Example: GAUGE_START_COLOR = Color.new(255, 0, 0) <- This is red.
# This is the fill color for the early phase of the guage.
GAUGE_START_COLOR = 28
# This is the fill color for the late phase of the guage. (When full)
GAUGE_END_COLOR = 29
# ◆ Menu Command Button & Text ◆
# When USE_MENU_DISTRIBUTE_PARAMETER_COMMAND = true,
# the AP Distribution System is added to the menu under "Quit Game".
# When false, it does not. (Obviously)
USE_MENU_DISTRIBUTE_PARAMETER_COMMAND = false
# Allows you to change the text for this button on the main command menu.
VOCAB_MENU_DISTRIBUTE_PARAMETER = "Level Up"
# ◆ Parameter Re-distribution ◆
# This affects whether the player can delevel the parameters that have
# been increased.
# true : Allows the player to reassign AP.
# false : Prevents the player from unassigning AP if set to false.
ENABLE_REVERSE_DISTRIBUTE = false
# ◆ AP in Status Window ◆
# Added by Mr. Anonymous.
# This toggle allows you to enable/disable the AP display on the status
# screen.
SHOW_STATUS_RP = true
# This toggle allows you to adjust the position of the AP display on the
# status screen. (If SHOW_STATUS_RP = true)
# 0. Below Actor's Face Image
# 1. Below Actor's Parameters
SHOW_STATUS_RP_POS = 1
# ◆ Extra Parameters in Status Window ◆
# Added by Mr. Anonymous.
# This toggle allows you to enable/disable the parameters for accuracy,
# evasion, and critical below the regular paramaters (STR, DEF, SPI, AGI)
SHOW_STATUS_EX_PARAMS = true
# ◆ Call DistributeParameter From Actor Status Window ◆
# Added by Mr. Anonymous.
# This allows you to change what key/button is pressed on the status window
# to shift to the DistributeParameter window.
# When set to nil, this is disabled. ( CALL_DISTPARAMKEY = Input::nil )
CALL_DISTPARAMKEY = Input::X # On the keyboard, button X is the A key.
# ◆ Show Actor Graphic ◆
# Added by Mr. Anonymous.
# This toggle allows you to enable/disable the actor sprite in the Distribute
# Parameter window next to the actor name.
# true = Show the sprite.
# false = Do not show.
SHOW_SPRITE = true
end
end
#=============================================================================#
# ★ End Customization ★ #
#=============================================================================#
#=================================================#
# IMPORT #
#=================================================#
$imported = {} if $imported == nil
$imported["DistributeParameter"] = true
#=================================================#
module KGC::DistributeParameter
# Set up parameter array
PARAMS = [:maxhp, :maxmp, :atk, :def, :spi, :agi, :hit, :eva, :cri,
:skill_speed, :odds]
end
#=================================================#
#==============================================================================
# ■ Vocab
#==============================================================================
module Vocab
def self.hit
return KGC::DistributeParameter::VOCAB_PARAM[:hit]
return $data_system.terms.hit # Added 4/1/08
end
def self.eva
return KGC::DistributeParameter::VOCAB_PARAM[:eva]
return $data_system.terms.eva # Added 4/1/08
end
def self.cri
return KGC::DistributeParameter::VOCAB_PARAM[:cri]
return $data_system.terms.cri # Added 4/1/08
end
def self.skill_speed
return KGC::DistributeParameter::VOCAB_PARAM[:skill_speed]
return $data_system.terms.skill_speed # Added 9/14/08
end
def self.item_speed
return KGC::DistributeParameter::VOCAB_PARAM[:item_speed]
end
def self.odds
return KGC::DistributeParameter::VOCAB_PARAM[:odds]
return $data_system.terms.odds # Added 9/14/08
end
def self.rp
return KGC::DistributeParameter::VOCAB_RP
end
def self.rp_a
return KGC::DistributeParameter::VOCAB_RP_A
end
def self.distribute_parameter
return KGC::DistributeParameter::VOCAB_MENU_DISTRIBUTE_PARAMETER
end
end
#=================================================#
#==============================================================================
# □ KGC::Commands
#==============================================================================
module KGC
module Commands
module_function
#--------------------------------------------------------------------------
# ○ パラメータ振り分けに関する値をチェック
#--------------------------------------------------------------------------
def check_distribution_values
(1...$data_actors.size).each { |i|
actor = $game_actors[i]
actor.check_distribution_values
actor.restore_distribution_values
}
end
#--------------------------------------------------------------------------
# ○ RP の増減
# actor_id : アクター ID
# value : 増減量
#--------------------------------------------------------------------------
def gain_rp(actor_id, value)
actor = $game_actors[actor_id]
return if actor == nil
actor.gain_rp(value)
end
#--------------------------------------------------------------------------
# ○ 振り分け回数をリセット
# actor_id : アクター ID
#--------------------------------------------------------------------------
def reset_distributed_count(actor_id)
actor = $game_actors[actor_id]
return if actor == nil
actor.clear_distribution_values
actor.restore_distribution_values
end
#--------------------------------------------------------------------------
# ○ パラメータ振り分け画面の呼び出し
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def call_distribute_parameter(actor_index = 0)
return if $game_temp.in_battle
$game_temp.next_scene = :distribute_parameter
$game_temp.next_scene_actor_index = actor_index
end
end
end
#=================================================#
# INCLUDE COMMANDS #
#=================================================#
# Include KGC::Commands in Game_Interpreter #
#=================================================#
class Game_Interpreter
include KGC::Commands
end
#=================================================#
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 能力値に加算する値をクリア
#--------------------------------------------------------------------------
alias clear_extra_values_KGC_DistributeParameter clear_extra_values
def clear_extra_values
clear_extra_values_KGC_DistributeParameter
clear_distribution_values
calc_distribution_values
end
#--------------------------------------------------------------------------
# ○ パラメータ振り分けに関する値をクリア
#--------------------------------------------------------------------------
def clear_distribution_values
@distributed_count = {}
KGC::DistributeParameter::PARAMS.each { |param|
@distributed_count[param] = 0
}
end
#--------------------------------------------------------------------------
# ○ パラメータ振り分けに関する値をチェック
#--------------------------------------------------------------------------
def check_distribution_values
last_distributed_count = @distributed_count
clear_distribution_values
@distributed_count = last_distributed_count if last_distributed_count != nil
end
#--------------------------------------------------------------------------
# ○ 各種修正値を計算
#--------------------------------------------------------------------------
def calc_distribution_values
# 継承先で定義
end
#--------------------------------------------------------------------------
# ○ 振り分けによる上昇値を取得
# param : パラメータの Symbol
#--------------------------------------------------------------------------
def distributed_param(param)
return 0
end
end
#=================================================#
#==============================================================================
# ■ Game_BattleAction
#==============================================================================
class Game_BattleAction
#--------------------------------------------------------------------------
# ● 行動スピードの決定
#--------------------------------------------------------------------------
alias make_speed_KGC_DistributeParameter make_speed
def make_speed
make_speed_KGC_DistributeParameter
if skill?
n = [battler.distributed_param(:skill_speed), skill.speed].min
@speed -= n
end
if item?
n = [battler.distributed_param(:item_speed), item.speed].min
@speed -= n
end
end
end
#=================================================#
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_id : アクター ID
#--------------------------------------------------------------------------
alias initialize_KGC_DistributeParameter initialize
def initialize(actor_id)
@actor_id = actor_id
@class_id = $data_actors[actor_id].class_id
initialize_KGC_DistributeParameter(actor_id)
end
#--------------------------------------------------------------------------
# ○ パラメータ増加量を取得
#--------------------------------------------------------------------------
def gain_parameter_list
result = KGC::DistributeParameter::GAIN_PARAMETER
# アクター固有
list = KGC::DistributeParameter::PERSONAL_GAIN_PARAMETER[self.id]
result = result.merge(list) if list != nil
# 職業固有
list = KGC::DistributeParameter::CLASS_GAIN_PARAMETER[self.class_id]
result = result.merge(list) if list != nil
return result
end
#--------------------------------------------------------------------------
# ○ 各種修正値を計算
#--------------------------------------------------------------------------
def calc_distribution_values
@rp_cost = 0
@distributed_param = {}
gain_parameter_list.each { |k, v|
next if v == nil
cost = 0
param = 0
distributed_count(k).times { |i|
cost_plus = v[0]
cost_plus += v[3] * i if v[3] != nil
param_plus = v[1]
param_plus += v[4] * i if v[4] != nil
cost += Integer(cost_plus)
param += Integer(param_plus)
}
@rp_cost += [cost, 0].max
@distributed_param[k] = param
}
end
#--------------------------------------------------------------------------
# ○ 各種修正値を修復
#--------------------------------------------------------------------------
def restore_distribution_values
calc_distribution_values
self.hp = self.hp
self.mp = self.mp
end
#--------------------------------------------------------------------------
# ○ 振り分けによる上昇値を取得
# param : パラメータの Symbol
#--------------------------------------------------------------------------
def distributed_param(param)
return 0 if @distributed_param == nil
return 0 if @distributed_param[param] == nil
return @distributed_param[param]
end
#--------------------------------------------------------------------------
# ● 基本 MaxHP の取得
#--------------------------------------------------------------------------
alias base_maxhp_KGC_DistributeParameter base_maxhp
def base_maxhp
n = base_maxhp_KGC_DistributeParameter + distributed_param(:maxhp)
return n
end
#--------------------------------------------------------------------------
# ● 基本 MaxMP の取得
#--------------------------------------------------------------------------
alias base_maxmp_KGC_DistributeParameter base_maxmp
def base_maxmp
n = base_maxmp_KGC_DistributeParameter + distributed_param(:maxmp)
return n
end
#--------------------------------------------------------------------------
# ● 基本攻撃力の取得
#--------------------------------------------------------------------------
alias base_atk_KGC_DistributeParameter base_atk
def base_atk
n = base_atk_KGC_DistributeParameter + distributed_param(:atk)
return n
end
#--------------------------------------------------------------------------
# ● 基本防御力の取得
#--------------------------------------------------------------------------
alias base_def_KGC_DistributeParameter base_def
def base_def
n = base_def_KGC_DistributeParameter + distributed_param(:def)
return n
end
#--------------------------------------------------------------------------
# ● 基本精神力の取得
#--------------------------------------------------------------------------
alias base_spi_KGC_DistributeParameter base_spi
def base_spi
n = base_spi_KGC_DistributeParameter + distributed_param(:spi)
return n
end
#--------------------------------------------------------------------------
# ● 基本敏捷性の取得
#--------------------------------------------------------------------------
alias base_agi_KGC_DistributeParameter base_agi
def base_agi
n = base_agi_KGC_DistributeParameter + distributed_param(:agi)
return n
end
#--------------------------------------------------------------------------
# ● 命中率の取得
#--------------------------------------------------------------------------
alias hit_KGC_DistributeParameter hit
def hit
n = hit_KGC_DistributeParameter + distributed_param(:hit)
return n
end
#--------------------------------------------------------------------------
# ● 回避率の取得
#--------------------------------------------------------------------------
alias eva_KGC_DistributeParameter eva
def eva
n = eva_KGC_DistributeParameter + distributed_param(:eva)
return n
end
#--------------------------------------------------------------------------
# ● クリティカル率の取得
#--------------------------------------------------------------------------
alias cri_KGC_DistributeParameter cri
def cri
n = cri_KGC_DistributeParameter + distributed_param(:cri)
return n
end
#--------------------------------------------------------------------------
# ● 狙われやすさの取得
#--------------------------------------------------------------------------
alias odds_KGC_DistributeParameter odds
def odds
n = odds_KGC_DistributeParameter + distributed_param(:odds)
return n
end
#--------------------------------------------------------------------------
# ○ MaxRP の取得 - Method rewritten by Touchfuzzy
#--------------------------------------------------------------------------
def maxrp
gain = gain_parameter_list[:maxrpexp]
n = Integer(eval(gain[0]))
return [n + maxrp_plus, 0].max
end
#--------------------------------------------------------------------------
# ○ MaxRP 補正値の取得
#--------------------------------------------------------------------------
def maxrp_plus
@maxrp_plus = 0 if @maxrp_plus == nil
return @maxrp_plus
end
#--------------------------------------------------------------------------
# ○ RP の取得
#--------------------------------------------------------------------------
def rp
return [maxrp - @rp_cost, 0].max
end
#--------------------------------------------------------------------------
# ○ 振り分け回数の取得
# param : 振り分け先パラメータ (Symbol)
#--------------------------------------------------------------------------
def distributed_count(param)
clear_distribution_values if @distributed_count == nil
@distributed_count[param] = 0 if @distributed_count[param] == nil
return @distributed_count[param]
end
#--------------------------------------------------------------------------
# ○ RP の増減
# value : 増減量
#--------------------------------------------------------------------------
def gain_rp(value)
@maxrp_plus = maxrp_plus + value
end
#--------------------------------------------------------------------------
# ○ 振り分け回数の増減
# param : 振り分け先パラメータ (Symbol)
# value : 増減量
#--------------------------------------------------------------------------
def gain_distributed_count(param, value = 1)
n = distributed_count(param)
@distributed_count[param] += value if n.is_a?(Integer)
end
#--------------------------------------------------------------------------
# ○ RP 振り分けによる成長効果適用
# param : 振り分け先パラメータ (Symbol)
# reverse : 逆加算のときは true
#--------------------------------------------------------------------------
def rp_growth_effect(param, reverse = false)
gain = gain_parameter_list[param]
return if gain == nil # 無効なパラメータ
if reverse
return if distributed_count(param) == 0 # 逆加算不可
else
return unless can_distribute?(param)
end
gain_distributed_count(param, reverse ? -1 : 1)
restore_distribution_values
end
#--------------------------------------------------------------------------
# ○ パラメータ振り分け可否判定
# param : 振り分け先パラメータ (Symbol)
#--------------------------------------------------------------------------
def can_distribute?(param)
gain = gain_parameter_list[param]
return false if gain == nil # 無効なパラメータ
return false if self.rp < distribute_cost(param) # RP 不足
return false if gain[2] <= distributed_count(param) # 回数上限
return true
end
#--------------------------------------------------------------------------
# ○ パラメータ振り分けコスト計算
# param : 振り分け先パラメータ (Symbol)
#--------------------------------------------------------------------------
def distribute_cost(param)
gain = gain_parameter_list[param]
return 0 if gain == nil # 無効なパラメータ
n = gain[0]
if gain[3] != nil
count = [distributed_count(param), gain[2] - 1].min
n += gain[3] * count
end
return [Integer(n), 0].max
end
#--------------------------------------------------------------------------
# ○ パラメータ振り分け時の増加量計算
# param : 振り分け先パラメータ (Symbol)
#--------------------------------------------------------------------------
def distribute_gain(param)
gain = gain_parameter_list[param]
return 0 if gain == nil # 無効なパラメータ
n = gain[1]
if gain[4] != nil
count = [distributed_count(param), gain[2] - 1].min
n += gain[4] * count
end
return Integer(n)
end
end
#=================================================#
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ○ RP の文字色を取得
# actor : アクター
#--------------------------------------------------------------------------
def rp_color(actor)
return (actor.rp == 0 ? knockout_color : normal_color)
end
#--------------------------------------------------------------------------
# ○ 振り分けゲージの色 1 の取得
#--------------------------------------------------------------------------
def distribute_gauge_color1
color = KGC::DistributeParameter::GAUGE_START_COLOR
return (color.is_a?(Integer) ? text_color(color) : color)
end
#--------------------------------------------------------------------------
# ○ 振り分けゲージの色 2 の取得
#--------------------------------------------------------------------------
def distribute_gauge_color2
color = KGC::DistributeParameter::GAUGE_END_COLOR
return (color.is_a?(Integer) ? text_color(color) : color)
end
#--------------------------------------------------------------------------
# ○ RP の描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
# width : 幅
#--------------------------------------------------------------------------
def draw_actor_rp(actor, x, y, width = 120)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 40, WLH, Vocab::rp_a)
self.contents.font.color = rp_color(actor)
xr = x + width
if width < 120
self.contents.draw_text(xr - 40, y, 40, WLH, actor.rp, 2)
else
self.contents.draw_text(xr - 90, y, 40, WLH, actor.rp, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxrp, 2)
end
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# ○ 振り分けゲージの描画
# actor : アクター
# param : パラメータ
# x : 描画先 X 座標
# y : 描画先 Y 座標
# width : 幅
#--------------------------------------------------------------------------
def draw_actor_distribute_gauge(actor, param, x, y, width = 120)
gain = actor.gain_parameter_list[param]
return if gain == nil
gw = width * actor.distributed_count(param) / [gain[2], 1].max
gc1 = distribute_gauge_color1
gc2 = distribute_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
#==========================================================================
===
# Added by Mr. Anonymous ( 4/1/08 )
# Sets up the initial parameters and the entended/extra parameters.
#==========================================================================
===
if KGC::DistributeParameter::SHOW_STATUS_EX_PARAMS
alias draw_actor_parameter_KGC_DistributeParameter draw_actor_parameter
def draw_actor_parameter(actor, x, y, type)
draw_actor_parameter_KGC_DistributeParameter(actor, x, y, type)
case type
when 4
parameter_name = Vocab::hit
parameter_value = actor.hit
when 5
parameter_name = Vocab::eva
parameter_value = actor.eva
when 6
parameter_name = Vocab::cri
parameter_value = actor.cri
when 7
parameter_name = Vocab::odds
parameter_value = actor.odds
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, WLH, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 120, y, 36, WLH, parameter_value, 2)
end
end
end
#=================================================#
#==============================================================================
# ■ Window_Command
#==============================================================================
class Window_Command < Window_Selectable
unless method_defined?(: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
#--------------------------------------------------------------------------
# ○ コマンドをリフレッシュ
#--------------------------------------------------------------------------
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
#--------------------------------------------------------------------------
# ○ コマンドを挿入
#--------------------------------------------------------------------------
def insert_command(index, command)
@commands.insert(index, command)
@item_max = @commands.size
refresh_command
refresh
end
#--------------------------------------------------------------------------
# ○ コマンドを削除
#--------------------------------------------------------------------------
def remove_command(command)
@commands.delete(command)
@item_max = @commands.size
refresh
end
end
end
#=================================================#
#==============================================================================
# ■ Window_Status
#==============================================================================
# Added by Mr. Anonymous ( 4/1/08 )
# Checks SHOW_STATUS_RP's value, if true RP is added to Status Window.
#==============================================================================
if KGC::DistributeParameter::SHOW_STATUS_RP
class Window_Status < Window_Base
#--------------------------------------------------------------------------
# ● Draw RP in Status Window
# x : Width X - 128 (beneath actor face)
# y : Hight Y (On row + Window_Status Definition)
#--------------------------------------------------------------------------
alias draw_basic_info_KGC_DistributeParameter draw_basic_info
def draw_basic_info(x, y)
draw_basic_info_KGC_DistributeParameter(x, y)
# Checks SHOW_STATUS_RP_POS, if 0, RP is shown beneath face of actor.
if KGC::DistributeParameter::SHOW_STATUS_RP_POS == 0
draw_actor_rp(@actor, x - 129, y + WLH * 4)
end
# If 1, RP is shown under parameters. (Centered)
if KGC::DistributeParameter::SHOW_STATUS_RP_POS == 1
draw_actor_rp(@actor, x - 80, y + WLH * 14 - 6)
end
end
#------------------------------------------------------------------------
# ● Draw Extra (Normally Hidden) Parameters in Status Window
# x : Width X - 128 (beneath actor face)
# y : Hight Y (On row + Window_Status Definition)
# Added by Mr. Anonymous ( 4/1/08 )
#-------------------------------------------------------------------------
alias draw_parameters_KCG_DistributeParameter draw_parameters
def draw_parameters(x, y)
draw_parameters_KCG_DistributeParameter(x, y)
if KGC::DistributeParameter::SHOW_STATUS_EX_PARAMS
draw_actor_parameter(@actor, x, y + WLH * 4, 4)
draw_actor_parameter(@actor, x, y + WLH * 5, 5)
draw_actor_parameter(@actor, x, y + WLH * 6, 6)
draw_actor_parameter(@actor, x, y + WLH * 7, 7)
end
end
end
end
#=================================================#
#==============================================================================
# □ Window_DistributeParameterActor
#------------------------------------------------------------------------------
# 振り分け画面で、アクターの情報を表示するウィンドウで
�。
#==============================================================================
class Window_DistributeParameterActor < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# actor : アクター
#--------------------------------------------------------------------------
def initialize(x, y, actor)
super(x, y, Graphics.width, WLH + 32)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_actor_name(@actor, 32, 0)
draw_actor_level(@actor, 264, 0)
draw_actor_rp(@actor, 372, 0)
# Include actor class
# Added by Mr. Anonymous ( 4/1/08 )
draw_actor_class(@actor, 152, 0)
# Method for displaying actor's sprite
# Added by Mr. Anonymous ( 4/1/08 )
if KGC::DistributeParameter::SHOW_SPRITE
draw_actor_graphic(@actor, 14, 31)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
��☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_DistributeParameterList
#------------------------------------------------------------------------------
# 振り分け画面で、成長させるパラメータを選択するウィン
�ウです。
#==============================================================================
class Window_DistributeParameterList < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
#--------------------------------------------------------------------------
def initialize(actor)
off_h = (WLH + 32) * 2
super(0, off_h, Graphics.width / 2 + 80, Graphics.height - off_h)
@actor = actor
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ○ 選択中のパラメータの Symbol を取得
#--------------------------------------------------------------------------
def parameter_symbol
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
@data = []
gain_params = @actor.gain_parameter_list
KGC::DistributeParameter::PARAMS.each { |param|
next if gain_params[param] == nil
@data << param
}
@item_max = @data.size + 1
create_contents
@item_max -= 1
draw_caption
@item_max.times { |i| draw_item(i, @actor.can_distribute?(@data[i])) }
end
#--------------------------------------------------------------------------
# ● 1 ページに表示できる行数の取得
#--------------------------------------------------------------------------
def page_row_max
return super - 1
end
#--------------------------------------------------------------------------
# ● 項目を描画する矩形の取得
# index : 項目番号
#--------------------------------------------------------------------------
def item_rect(index)
rect = super(index)
rect.y += WLH
return rect
end
#--------------------------------------------------------------------------
# ○ 見出しの描画
#--------------------------------------------------------------------------
def draw_caption
self.contents.font.color = system_color
# This is shown at the top of the column that lists the stats.
self.contents.draw_text( 4, 0, 96, WLH, KGC::DistributeParameter::AT_CAPTION)
self.contents.draw_text(120, 0, 40, WLH, Vocab.rp, 2)
# This is shown at the top of the column that lists the number of stat points
# you will gain from buying the next point of the parameter.
self.contents.draw_text(170, 0, 60, WLH, KGC::DistributeParameter::RT_CAPTION, 2)
# This is shown at the top of the column that lists the current and max
# points you have in each parameter.
self.contents.draw_text(240, 0, 80, WLH, KGC::DistributeParameter::SP_CAPTION, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# ○ 項目の描画
# index : 項目番号
# enabled : 有効フラグ
#--------------------------------------------------------------------------
def draw_item(index, enabled = true)
rect = item_rect(index)
self.contents.clear_rect(rect)
item = @data[index]
if item != nil
draw_parameter(rect.x, rect.y, @data[index], enabled)
end
end
#--------------------------------------------------------------------------
# ○ 能力値の描画
# x : 描画先 X 座標
# y : 描画先 Y 座標
# type : 能力値の種類
# enabled : 有効フラグ
#--------------------------------------------------------------------------
def draw_parameter(x, y, type, enabled)
case type
when :maxhp
name = Vocab.hp
when :maxmp
name = Vocab.mp
when :atk
name = Vocab.atk
when :def
name = Vocab.def
when :spi
name = Vocab.spi
when :agi
name = Vocab.agi
when :hit
name = Vocab.hit
when :eva
name = Vocab.eva
when :cri
name = Vocab.cri
when :skill_speed
name = Vocab.skill_speed
when :item_speed
name = Vocab.item_speed
when :odds
name = Vocab.odds
else
return
end
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(x + 4, y, 96, WLH, name)
gain = @actor.gain_parameter_list[type]
value = @actor.distribute_cost(type)
self.contents.draw_text(x + 120, y, 40, WLH, value, 2)
value = sprintf("%+d", @actor.distribute_gain(type))
self.contents.draw_text(x + 190, y, 40, WLH, value, 2)
value = sprintf("%3d/%3d", @actor.distributed_count(type), gain[2])
self.contents.draw_text(x + 236, y, 80, WLH, value, 2)
self.contents.font.color = normal_color
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
��☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_DistributeParameterStatus
#------------------------------------------------------------------------------
# 振り分け画面で、アクターのステータスを表示するウィン
�ウです。
#==============================================================================
class Window_DistributeParameterStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
#--------------------------------------------------------------------------
def initialize(actor)
dx = Graphics.width / 2 + 80
off_h = (WLH + 32) * 2
super(dx, off_h, Graphics.width - dx, Graphics.height - off_h)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
original_height = self.height
self.height = WLH * (existing_params.size + 1) + 32
create_contents
self.height = original_height
self.contents.font.color = system_color
# This allows you to change the text that appears on top of the right panel
# which contains current parameter changes.
self.contents.draw_text(0, 0, width - 32, WLH, KGC::DistributeParameter::CS_CAPTION, 1)
self.contents.font.color = normal_color
dy = WLH
existing_params.each { |param|
draw_parameter(0, dy, param)
dy += WLH
}
end
#--------------------------------------------------------------------------
# ○ 存在するパラメータの一覧
#--------------------------------------------------------------------------
def existing_params
result = []
gain_params = @actor.gain_parameter_list
KGC::DistributeParameter::PARAMS.each { |param|
next if gain_params[param] == nil
result << param
}
return result
end
#--------------------------------------------------------------------------
# ○ 能力値の描画
# x : 描画先 X 座標
# y : 描画先 Y 座標
# type : 能力値の種類
#--------------------------------------------------------------------------
def draw_parameter(x, y, type)
case type
when :maxhp
name = Vocab.hp
value = @actor.maxhp
when :maxmp
name = Vocab.mp
value = @actor.maxmp
when :atk
name = Vocab.atk
value = @actor.atk
when :def
name = Vocab.def
value = @actor.def
when :spi
name = Vocab.spi
value = @actor.spi
when :agi
name = Vocab.agi
value = @actor.agi
when :hit
name = Vocab.hit
value = @actor.hit
when :eva
name = Vocab.eva
value = @actor.eva
when :cri
name = Vocab.cri
value = @actor.cri
when :skill_speed
name = Vocab.skill_speed
value = @actor.distributed_param(type)
when :item_speed
name = Vocab.item_speed
value = @actor.distributed_param(type)
when :odds
name = Vocab.odds
value = @actor.odds
else
return
end
draw_actor_distribute_gauge(@actor, type, x + 106, y, 48)
self.contents.font.color = system_color
self.contents.draw_text(x + 4, y, 96, WLH, name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 106, y, 48, WLH, value, 2)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
��☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 画面切り替えの実行
#--------------------------------------------------------------------------
alias update_scene_change_KGC_DistributeParameter update_scene_change
def update_scene_change
return if $game_player.moving? # プレイヤーの移動中?
if $game_temp.next_scene == :distribute_parameter
call_distribute_parameter
return
end
update_scene_change_KGC_DistributeParameter
end
#--------------------------------------------------------------------------
# ○ パラメータ振り分け画面への切り替え
#--------------------------------------------------------------------------
def call_distribute_parameter
$game_temp.next_scene = nil
$scene = Scene_DistributeParameter.new(
$game_temp.next_scene_actor_index,
0,
Scene_DistributeParameter::HOST_MAP)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
��☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu < Scene_Base
if KGC::DistributeParameter::USE_MENU_DISTRIBUTE_PARAMETER_COMMAND
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_command_window_KGC_DistributeParameter create_command_window
def create_command_window
create_command_window_KGC_DistributeParameter
return if $imported["CustomMenuCommand"]
@__command_distribute_parameter_index =
@command_window.add_command(Vocab.distribute_parameter)
if @command_window.oy > 0
@command_window.oy -= Window_Base::WLH
end
@command_window.index = @menu_index
end
end
#--------------------------------------------------------------------------
# ● コマンド選択の更新
#--------------------------------------------------------------------------
alias update_command_selection_KGC_DistributeParameter update_command_selection
def update_command_selection
call_distribute_parameter_flag = false
if Input.trigger?(Input::C)
case @command_window.index
when @__command_distribute_parameter_index # パラメータ振り分け
call_distribute_parameter_flag = true
end
end
# パラメータ振り分け画面に移行
if call_distribute_parameter_flag
if $game_party.members.size == 0
Sound.play_buzzer
return
end
Sound.play_decision
start_actor_selection
return
end
update_command_selection_KGC_DistributeParameter
end
#--------------------------------------------------------------------------
# ● アクター選択の更新
#--------------------------------------------------------------------------
alias update_actor_selection_KGC_DistributeParameter update_actor_selection
def update_actor_selection
if Input.trigger?(Input::C)
$game_party.last_actor_index = @status_window.index
Sound.play_decision
case @command_window.index
when @__command_distribute_parameter_index # パラメータ振り分け
$scene = Scene_DistributeParameter.new(
@status_window.index,
@__command_distribute_parameter_index,
Scene_DistributeParameter::HOST_MENU)
return
end
end
update_actor_selection_KGC_DistributeParameter
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
��☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Scene_DistributeParameter
#------------------------------------------------------------------------------
# パラメータ振り分け画面の処理を行うクラスです。
#==============================================================================
class Scene_DistributeParameter < Scene_Base
#--------------------------------------------------------------------------
# ○ 定数
#--------------------------------------------------------------------------
HOST_MENU = 0 # 呼び出し元 : メニュー
HOST_MAP = 1 # 呼び出し元 : マップ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_index : アクターインデックス
# menu_index : コマンドのカーソル初期位置
# host_scene : 呼び出し元 (0..メニュー 1..マップ)
#--------------------------------------------------------------------------
def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
@actor_index = actor_index
@menu_index = menu_index
@host_scene = host_scene
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_menu_background
@actor = $game_party.members[@actor_index]
create_windows
end
#--------------------------------------------------------------------------
# ○ ウィンドウ作成
#--------------------------------------------------------------------------
def create_windows
@help_window = Window_Help.new
@help_window.set_text(KGC::DistributeParameter::DISTRIBUTE_SCENE_CAPTION)
dy = @help_window.height
@actor_window = Window_DistributeParameterActor.new(0, dy, @actor)
@parameter_window = Window_DistributeParameterList.new(@actor)
@status_window = Window_DistributeParameterStatus.new(@actor)
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@help_window.dispose
@actor_window.dispose
@parameter_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ○ 元の画面へ戻る
#--------------------------------------------------------------------------
def return_scene
case @host_scene
when HOST_MENU
$scene = Scene_Menu.new(@menu_index)
when HOST_MAP
$scene = Scene_Map.new
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
update_menu_background
update_window
if @parameter_window.active
update_parameter_list
end
end
#--------------------------------------------------------------------------
# ○ ウィンドウ更新
#--------------------------------------------------------------------------
def update_window
@help_window.update
@actor_window.update
@parameter_window.update
@status_window.update
end
#--------------------------------------------------------------------------
# ○ ウィンドウ再描画
#--------------------------------------------------------------------------
def refresh_window
@actor_window.refresh
@parameter_window.refresh
@status_window.refresh
Graphics.frame_reset
end
#--------------------------------------------------------------------------
# ○ 次のアクターの画面に切り替え
#--------------------------------------------------------------------------
def next_actor
@actor_index += 1
@actor_index %= $game_party.members.size
$scene = Scene_DistributeParameter.new(@actor_index,
@menu_index, @host_scene)
end
#--------------------------------------------------------------------------
# ○ 前のアクターの画面に切り替え
#--------------------------------------------------------------------------
def prev_actor
@actor_index += $game_party.members.size - 1
@actor_index %= $game_party.members.size
$scene = Scene_DistributeParameter.new(@actor_index,
@menu_index, @host_scene)
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (パラメータウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_parameter_list
@status_window.oy = @parameter_window.oy
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif input_growth?
# 加算
param = @parameter_window.parameter_symbol
unless @actor.can_distribute?(param)
Sound.play_buzzer
return
end
Input.repeat?(Input::C) ? Sound.play_decision : Sound.play_cursor
@actor.rp_growth_effect(param)
refresh_window
elsif input_reverse_growth?
# 減算
param = @parameter_window.parameter_symbol
if @actor.distributed_count(param) == 0
Sound.play_buzzer
return
end
Input.repeat?(Input::A) ? Sound.play_decision : Sound.play_cursor
@actor.rp_growth_effect(param, true)
refresh_window
elsif Input.trigger?(Input::R)
Sound.play_cursor
next_actor
elsif Input.trigger?(Input::L)
Sound.play_cursor
prev_actor
end
end
#--------------------------------------------------------------------------
# ○ 加算入力
#--------------------------------------------------------------------------
def input_growth?
if KGC::DistributeParameter::ENABLE_REVERSE_DISTRIBUTE
return Input.repeat?(Input::C) || Input.repeat?(Input::RIGHT)
else
return Input.trigger?(Input::C)
end
end
#--------------------------------------------------------------------------
# ○ 減算入力
#--------------------------------------------------------------------------
def input_reverse_growth?
if KGC::DistributeParameter::ENABLE_REVERSE_DISTRIBUTE
return Input.repeat?(Input::A) || Input.repeat?(Input::LEFT)
else
return false
end
end
end
#==============================================================================
# ■ Scene_Status
#==============================================================================
# Added by Mr. Anonymous
#==============================================================================
class Scene_Status < Scene_Base
#--------------------------------------------------------------------------
# ● Update Actor
#--------------------------------------------------------------------------
alias update_KGC_DistributeParameter update
def update
if KGC::DistributeParameter::CALL_DISTPARAMKEY != nil &&
Input.trigger?(KGC::DistributeParameter::CALL_DISTPARAMKEY)
Sound.play_decision
$scene = Scene_DistributeParameter.new(@actor_index)
end
update_KGC_DistributeParameter
end
end
#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File < Scene_Base
#--------------------------------------------------------------------------
# ● Read Saved Data
# file : 読み込み用ファイルオブジェクト (オープン済み)
#--------------------------------------------------------------------------
alias read_save_data_KGC_DistributeParameter read_save_data
def read_save_data(file)
read_save_data_KGC_DistributeParameter(file)
KGC::Commands.check_distribution_values
Graphics.frame_reset
end
end
[/spoiler]
I hope that helps!
Thanks again!