I am getting a problem with Sephiroth Spawns FF7 Materia System.
I'd like to know if anyone that used the system could solve it.
I really think this error is something that came together with the script, because the only thing I edit was around the materias ID, name, effect, etc... And the glitch is happening due to the All Materia Part.
What happens is that I can't create a Skill -- that is not included on the materia system, of course, it is learned by another skill system -- a skill that targets "All Allies"(it also happens if I set "User"). The script comes up with an error.
"undefined method, cannot return paired_materia_set for Nil:Class".
The full script:
I'd like to know if anyone that used the system could solve it.
I really think this error is something that came together with the script, because the only thing I edit was around the materias ID, name, effect, etc... And the glitch is happening due to the All Materia Part.
What happens is that I can't create a Skill -- that is not included on the materia system, of course, it is learned by another skill system -- a skill that targets "All Allies"(it also happens if I set "User"). The script comes up with an error.
"undefined method, cannot return paired_materia_set for Nil:Class".
The full script:
Code:
#==============================================================================
# Materia System
#==============================================================================
# SephirothSpawn
# 1.28.06
# Version 2.01
#==============================================================================
#------------------------------------------------------------------------------
# * Explanations:
#------------------------------------------------------------------------------
# ~ Weapon & Armor Materia Slots
# - Basic Syntax: Item ID # => Slots Array
# - Slots Array: [Number of Paired Slots, Single Slots]
# ** You must not exceed 8 (Paired * 2 + Single * 1 <= 10)
# ~ Materia List
# * Creating Your Own Materia
# - Basic Syntax: Materia.new(id, name, type, stat_effects,
# elements, states, new_value, m_value,
# skills, exp_levels, special_effect)
#
# - id : The Idea Number of you materia. Start from 1 and add 1
# - name : The Name of your materia
# - type : The Type Of Materia. Choose From One of The Following:
# 'Skill', 'Command', 'Summon', 'Support', 'Independent'
# - stat_effects : The Percent of each stat that materia will effect
# [ Hp, Sp, Str, Dex, Agi, Int ]
# - elements : An Array of each Element ID from the systems tab
# - states : An Array of each State Id from the Status tab
# - new_value : The cost to buy the Materia
# - master_value : The value of the Materia when Mastered
# - Skills : An array of the skills you learn from the Materia.
# (Use for Skill, Command & Summon)
# - Exp Levels : An array of the experience required to level
# The First value in the array is required to get level 2
# - Special Effect : A special Effect of the Materia.
# ~ All
# ~ Elemental
# ~ Status
# ~ Steal As Well
# ~ HP Absorb
# ~ MP Absorb
# ~ MP Turbo
# ~ Exp Plus
# ~ Gil Plus
# ~ HP Plus
# ~ SP Plus
# ~ Strength Plus
# ~ Defense Plus
# ~ Speed Plus
# ~ Magic Plus
#------------------------------------------------------------------------------
#==============================================================================
# ** RPG
#==============================================================================
module RPG
#============================================================================
# ** Weapon
#============================================================================
class Weapon
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :paired_materia
attr_accessor :single_materia
#--------------------------------------------------------------------------
# * Set Materia Slots
#--------------------------------------------------------------------------
def set_materia_slots(slots)
@paired_materia, @single_materia = slots[0], slots[1]
end
end
#============================================================================
# ** Armor
#============================================================================
class Armor
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :paired_materia
attr_accessor :single_materia
#--------------------------------------------------------------------------
# * Set Materia Slots
#--------------------------------------------------------------------------
def set_materia_slots(slots)
@paired_materia, @single_materia = slots[0], slots[1]
end
end
end
#==============================================================================
# ** Materia
#==============================================================================
class Materia
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :id
attr_accessor :name
attr_accessor :type
attr_accessor :stat_effects
attr_accessor :elements
attr_accessor :states
attr_accessor :new_value
attr_accessor :master_value
attr_accessor :skills
attr_accessor :exp_levels
attr_accessor :special_effect
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(id, name, type, stat_effects = [], elements = [], states = [],
n_value = 500, m_value = 1000, skills = [], exp_levels = [], s_effect = nil)
# Sets Parameters
@id, @name, @type, @stat_effects, @elements, @states,
@new_value, @master_value, @skills, @exp_levels, @special_effect =
id, name, type, stat_effects, elements, states,
n_value, m_value, skills, exp_levels, s_effect
# Sets Exp
@experience = 0
end
#--------------------------------------------------------------------------
# * Experince
#--------------------------------------------------------------------------
def experience
return @experience
end
#--------------------------------------------------------------------------
# * Experince
#--------------------------------------------------------------------------
def experience=(num)
@experience = [num, @exp_levels[@exp_levels.size - 1]].min
end
#--------------------------------------------------------------------------
# * Level
#--------------------------------------------------------------------------
def level
for i in 0...@exp_levels.size
if @experience >= @exp_levels[@exp_levels.size - (1 + i)]
return @exp_levels.size - i + 1
end
end
return 1
end
#--------------------------------------------------------------------------
# * Buy Value
#--------------------------------------------------------------------------
def buy_value
return @new_value
end
#--------------------------------------------------------------------------
# * Sell Value
#--------------------------------------------------------------------------
def sell_value
return [(@master_value * (@experience / @exp_levels[@exp_levels.size - 1].to_f)).to_i,
@new_value / 2].max
end
#--------------------------------------------------------------------------
# * Get Hue
#--------------------------------------------------------------------------
def get_hue
case @type
when 'Skill'
hue = 0
when 'Command'
hue = 50
when 'Summon'
hue = 110
when 'Support'
hue = 250
when 'Independent'
hue = 310
end
return hue
end
end
#==============================================================================
# ** Materia_System
#==============================================================================
module Materia_System
#==============================================================================
# ** CONSTANTS
#==============================================================================
#~ Weapons Materia Slots
#- Basic Syntax: Item ID # => Slots Array
#- Slots Array: [Number of Paired Slots, Single Slots]
#- You must not exceed 8 (Paired * 2 + Single * 1 <= 10)
WEAPON_MATERIA_SLOTS = {
1 => [0, 0], 2 => [1, 0], 3 => [0, 2], 4 => [0, 1],
5 => [0, 2], 6 => [0, 2], 7 => [1, 1], 8 => [1, 0],
9 => [1, 1], 10 => [1, 2], 11 => [2, 2], 12 => [4, 0],
13 => [1, 1], 14 => [1, 2], 15 => [2, 2], 16 => [4, 0],
17 => [1, 1], 18 => [1, 2], 19 => [2, 2], 20 => [4, 0],
21 => [1, 1], 22 => [1, 2], 23 => [2, 2], 24 => [4, 0],
25 => [1, 1], 26 => [1, 2], 27 => [2, 2], 28 => [4, 0],
29 => [1, 1], 30 => [1, 2], 31 => [2, 2], 32 => [4, 0]
}
# ~ Armors Materia Slots
ARMORS_MATERIA_SLOTS = {
1 => [0, 0], 2 => [1, 0], 3 => [0, 1], 4 => [0, 1],
5 => [0, 0], 6 => [0, 0], 7 => [0, 0], 8 => [0, 0],
9 => [1, 0], 10 => [0, 0], 11 => [2, 2], 12 => [4, 0],
13 => [1, 1], 14 => [1, 2], 15 => [2, 2], 16 => [4, 0],
17 => [1, 1], 18 => [1, 2], 19 => [2, 2], 20 => [4, 0],
21 => [1, 1], 22 => [1, 2], 23 => [2, 2], 24 => [4, 0],
25 => [1, 1], 26 => [1, 2], 27 => [2, 2], 28 => [4, 0],
29 => [1, 1], 30 => [1, 2], 31 => [2, 2], 32 => [4, 0]
}
# ~ Materia List Ele = [HP, SP, STR, DEX, AGI, INT]
# (id, name, type, stat_effects = [], elements = [], states = [],
# n_value = 500, m_value = 1000, skills = [], exp_levels = [], s_effect = nil)
MATERIA_LIST = [nil,
# Skill Materia
Materia.new(1, 'Aura', 'Skill', [ -5, 5, -3, 0, 0, 3 ], [7], [], 1500, 100000,
[351, 352, 353, 354], [5000, 35000, 100000]),
Materia.new(2,'Remedy', 'Skill', [ -4, 4, -3, 0, 0, 3 ], [], [], 750, 5000,
[4, 5], [2500, 5000]),
Materia.new(3, 'Pyro', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [1], [], 1000, 7500,
[355, 356, 357, 358], [1000, 3000, 7500]),
Materia.new(4, 'Gelo', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [2], [], 1000, 7500,
[10, 11, 12], [1000, 3000, 7500]),
Materia.new(5, '?lektron', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [3], [], 1000, 7500,
[363, 364, 365, 366], [1000, 3000, 7500]),
Materia.new(6, 'Hidra', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [4], [], 1000, 7500,
[371, 372, 373, 374], [1000, 3000, 7500]),
Materia.new(7, 'Gaia', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [5], [], 1000, 7500,
[367, 368, 369, 370], [1000, 3000, 7500]),
Materia.new(8, 'Aero', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [6], [], 1000, 7500,
[359, 360, 361, 362], [1000, 3000, 7500]),
Materia.new(9, 'Luz', 'Skill', [ -5, 5, -3, 0, 0, 3 ], [7], [], 1000, 7500,
[375, 376, 377, 378], [1000, 3000, 7500]),
Materia.new(10, 'Trevas', 'Skill', [ -5, 5, -3, 0, 0, 3 ], [8], [], 1000, 7500,
[379, 380, 381, 382], [1000, 3000, 7500]),
Materia.new(11, 'Negla', 'Skill', [ -4, 4, -2, 0, 0, 2 ], [], [], 1500, 7500,
[31, 32], [3000, 7500]),
Materia.new(12, 'Poison', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [3], 750, 4500,
[33, 34], [1500, 4500]),
Materia.new(13, 'Dizzy', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [4], 750, 4500,
[35, 36], [1500, 4500]),
Materia.new(14, 'Mute', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [5], 750, 4500,
[37, 38], [1500, 4500]),
Materia.new(15, 'Confuse', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [6], 750, 4500,
[39, 40], [1500, 4500]),
Materia.new(16, 'Sleep', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [7], 750, 4500,
[41, 42], [1500, 4500]),
Materia.new(17, 'Paraylze', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [8], 750, 4500,
[43, 44], [1500, 4500]),
Materia.new(18, 'Weak', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [9], 750, 4500,
[45, 46], [1500, 4500]),
Materia.new(19, 'Clumbsiness', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [10], 750, 4500,
[47, 48], [1500, 4500]),
Materia.new(20, 'Delayed', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [11], 750, 4500,
[49, 50], [1500, 4500]),
Materia.new(21, 'Enfeebled', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [12], 750, 4500,
[51, 52], [1500, 4500]),
Materia.new(22, 'Sharpen', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [13], 750, 4500,
[53], [3000]),
Materia.new(23, 'Barrier', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [14], 750, 4500,
[54], [3000]),
Materia.new(24, 'Resist', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [15], 750, 4500,
[55], [3000]),
Materia.new(25, 'Blink', 'Skill', [ -2, 2, 0, 0, 0, 0 ], [], [16], 750, 4500,
[56], [3000]),
# Command Materia
Materia.new(26, 'Fighter', 'Command', [0, 0, 5, 3, - 3, - 5], [], [], 3000, 20000,
[57, 58, 59, 60], [2500, 5000, 9000, 14000, 2000]),
Materia.new(27, 'Lancer', 'Command', [0, 0, 4, 4, - 4, - 4], [], [], 3000, 20000,
[61, 62, 63, 64], [2500, 5000, 9000, 14000, 2000]),
Materia.new(28, 'Warrior', 'Command', [0, 0, 7, 2, - 2, - 7], [], [], 3000, 20000,
[65, 66, 67, 68], [2500, 5000, 9000, 14000, 2000]),
Materia.new(29, 'Thief', 'Command', [0, 0, 1, 8, - 8, - 1], [], [], 3000, 20000,
[69, 70, 72], [2500, 5000, 9000, 20000]),
Materia.new(30, 'Hunter', 'Command', [2, 2, 2, 2, 2, 2], [], [], 3000, 20000,
[73, 74, 75, 76], [2500, 5000, 9000, 14000, 2000]),
Materia.new(31, 'Gunner', 'Command', [0, 4, 4, 0, 4, 0], [], [], 3000, 20000,
[77, 78, 79, 80], [2500, 5000, 9000, 14000, 2000]),
# Summon Materia (Not real summons, but you would set them up the same
Materia.new(32, 'Unknown 1', 'Summon', [-10, 10, -5, -5, 0, 10], [], [], 5000, 25000,
[60, 64], [6500, 15000, 25000]),
Materia.new(33, 'Unknown 2', 'Summon', [-10, 10, -5, -5, 0, 10], [], [], 5000, 25000,
[68, 72], [6500, 15000, 25000]),
Materia.new(34, 'Unknown 3', 'Summon', [-10, 10, -5, -5, 0, 10], [], [], 5000, 25000,
[76, 80], [6500, 15000, 25000]),
# Support Materia
Materia.new(35, 'All', 'Support', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'All'),
Materia.new(36, 'Elemental', 'Support', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Elemental'),
Materia.new(37, 'Status', 'Support', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Status'),
Materia.new(38, 'Steal as well', 'Support', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Steal as well'),
Materia.new(39, 'HP Absorb', 'Support', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'HP Absorb'),
Materia.new(40, 'MP Absorb', 'Support', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'MP Absorb'),
Materia.new(41, 'MP Turbo', 'Support', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'MP Turbo'),
# Independent Mater
Materia.new(42, 'Exp Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Exp Plus'),
Materia.new(43, 'Gil Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Gil Plus'),
Materia.new(44, 'HP Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'HP Plus'),
Materia.new(45, 'SP Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'SP Plus'),
Materia.new(46, 'Strength Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Strength Plus'),
Materia.new(47, 'Defense Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Defense Plus'),
Materia.new(48, 'Speed Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Speed Plus'),
Materia.new(49, 'Magic Plus', 'Independent', [0, 0, 0, 0, 0, 0], [], [], 2000, 10000,
[], [2000, 4000, 7000, 11000], 'Magic Plus')
]
end
#==============================================================================
# ** Game_Battler (part 3)
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_materiasystem_gamebattler_skilleffect skill_effect
#--------------------------------------------------------------------------
# * Apply Skill Effects
# user : the one using skills (battler)
# skill : skill
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# Orginal Skill Effects Method
seph_materiasystem_gamebattler_skilleffect(user, skill)
if user.is_a?(Game_Actor)
# Gets Paired Materia
materia_set = user.return_paired_materia
for paired_set in materia_set
materia = paired_set[2]
other_materia = paired_set[3]
# HP Absorb
if materia.special_effect == 'HP Absorb'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill
hp = (user.maxhp * 0.1).to_i
user.hp += [hp, user.maxhp - hp].min
user.damage = - [hp, user.maxhp - hp].min
user.damage_pop = true
end
end
end
end
# MP Absorb
if materia.special_effect == 'MP Absorb'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill
sp = (user.maxsp * 0.1).to_i
user.sp += [sp, user.maxsp - sp].min
user.damage = - [sp, user.maxsp - sp].min
user.damage_pop = true
end
end
end
end
# MP Turbo
if materia.special_effect == 'MP Turbo'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill
unless user.sp < skill.sp_cost * 2
if self.damage > 0
self.damage *= 2
user.sp -= skill.sp_cost
user.damage = 'MP TURBO!'
user.damage_pop = true
end
end
end
end
end
end
# Steal As Well
if materia.special_effect == 'Steal as well'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill
if self.is_a?(Game_Battler)
if (rand(100) < self.treasure_prob)
unless self.item_id == 0
item = $data_items[self.item_id]
end
unless self.weapon_id == 0
item = $data_weapons[self.weapon_id]
end
unless self.armor_id == 0
item = $data_armors[self.armor_id]
end
unless item.nil?
case item
when RPG::Item
$game_party.gain_item(self.item_id, 1)
when RPG::Weapon
$game_party.gain_weapon(self.weapon_id, 1)
when RPG::Armor
$game_party.gain_armor(self.armor_id, 1)
end
user.damage = "Stole #{item.name}"
user.damage_pop = true
end
end
end
end
end
end
end
end
end
end
end
#==============================================================================
# ** Game_Actor
#==============================================================================
class Game_Actor
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :weapon_materia
attr_accessor :armor1_materia
attr_accessor :armor2_materia
attr_accessor :armor3_materia
attr_accessor :armor4_materia
attr_accessor :materia_skills
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_materiasystem_gameactor_init initialize
alias seph_materiasystem_gameactor_setup setup
alias seph_materiasystem_gameactor_skills skills
alias seph_materiasystem_gameactor_maxhp maxhp
alias seph_materiasystem_gameactor_maxsp maxsp
alias seph_materiasystem_gameactor_str str
alias seph_materiasystem_gameactor_dex dex
alias seph_materiasystem_gameactor_agi agi
alias seph_materiasystem_gameactor_int int
alias seph_materiasystem_gameactor_equip equip
alias seph_materiasystem_gameactor_exp exp
alias seph_materiasystem_gameactor_elementrate element_rate
alias seph_materiasystem_gameactor_stateguard? state_guard?
alias seph_materiasystem_gameactor_elementset element_set
alias seph_materiasystem_gameactor_plusstateset plus_state_set
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(actor_id)
# Sets Up Materia Slots
@weapon_materia = Array.new
@armor1_materia = Array.new
@armor2_materia = Array.new
@armor3_materia = Array.new
@armor4_materia = Array.new
# Orginal Initialization Method
seph_materiasystem_gameactor_init(actor_id)
end
#--------------------------------------------------------------------------
# * Setup
#--------------------------------------------------------------------------
def setup(actor_id)
# Orginal Setup Method
seph_materiasystem_gameactor_setup(actor_id)
# Materia Skills
@materia_skills = []
# Adds Weapon Materia
sn = $data_weapons[@weapon_id].paired_materia * 2 +
$data_weapons[@weapon_id].single_materia unless @weapon_id == 0
@weapon_materia = @weapon_id == 0 ? [] : Array.new(sn, nil)
# Adds Shield Materia
sn = $data_armors[@armor1_id].paired_materia * 2 +
$data_armors[@armor1_id].single_materia unless @armor1_id == 0
@armor1_materia = @armor1_id == 0 ? [] : Array.new(sn, nil)
# Adds Head Materia
sn = $data_armors[@armor2_id].paired_materia * 2 +
$data_armors[@armor2_id].single_materia unless @armor2_id == 0
@armor2_materia = @armor2_id == 0 ? [] : Array.new(sn, nil)
# Adds Body Materia
sn = $data_armors[@armor3_id].paired_materia * 2 +
$data_armors[@armor3_id].single_materia unless @armor3_id == 0
@armor3_materia = @armor3_id == 0 ? [] : Array.new(sn, nil)
# Adds Accessory Materia
sn = $data_armors[@armor4_id].paired_materia * 2 +
$data_armors[@armor4_id].single_materia unless @armor4_id == 0
@armor4_materia = @armor4_id == 0 ? [] : Array.new(sn, nil)
end
#--------------------------------------------------------------------------
# * Skills
#--------------------------------------------------------------------------
def skills
# Deletes Materia Skills
for skill_id in @materia_skills
self.forget_skill(skill_id)
end
# Original Skills Method
skills = seph_materiasystem_gameactor_skills
# Adds Skills Attached to Weapon & Armors
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
self.learn_materia_skill(materia)
end
end
# Returns Skills
return @skills
end
#--------------------------------------------------------------------------
# * Learn Materia Skill
#--------------------------------------------------------------------------
def learn_materia_skill(materia)
# If Skill Materia
if materia.type == 'Skill' || materia.type == 'Command' || materia.type == 'Summon'
for i in 0...materia.level
skill_id = materia.skills[i]
# Learn Skill
self.learn_skill(skill_id)
# Adds Skills To Materia Skills
@materia_skills << skill_id
end
end
end
#--------------------------------------------------------------------------
# * Get Maximum HP
#--------------------------------------------------------------------------
def maxhp
# Orginal Max Hp Method
n = seph_materiasystem_gameactor_maxhp
# Collects HP Difference From Materia
variance = 0
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
variance += materia.stat_effects[0]
if materia.special_effect == 'HP Plus'
variance += (materia.level * 10)
end
end
end
# Takes Percentage
n *= ((100 + variance) / 100.0)
n = [[Integer(n), 0].max, 9999].min
return n
end
#--------------------------------------------------------------------------
# * Get HP
#--------------------------------------------------------------------------
def hp
@hp = [@hp, maxhp].min
return @hp
end
#--------------------------------------------------------------------------
# * Get Maximum SP
#--------------------------------------------------------------------------
def maxsp
# Orginal Max Sp Method
n = seph_materiasystem_gameactor_maxsp
# Collects SP Difference From Materia
variance = 0
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
variance += materia.stat_effects[1]
if materia.special_effect == 'SP Plus'
variance += (materia.level * 10)
end
end
end
# Takes Percentage
n *= ((100 + variance) / 100.0)
n = [[Integer(n), 0].max, 9999].min
return n
end
#--------------------------------------------------------------------------
# * Get SP
#--------------------------------------------------------------------------
def sp
@sp = [@sp, maxsp].min
return @sp
end
#--------------------------------------------------------------------------
# * Get Strength (STR)
#--------------------------------------------------------------------------
def str
# Orginal Max Str Method
n = seph_materiasystem_gameactor_str
# Collects SP Difference From Materia
variance = 0
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
variance += materia.stat_effects[2]
if materia.special_effect == 'Strength Plus'
variance += (materia.level * 5)
end
end
end
# Takes Percentage
n *= ((100 + variance) / 100.0)
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# * Get Dexterity (DEX)
#--------------------------------------------------------------------------
def dex
# Orginal Max Dex Method
n = seph_materiasystem_gameactor_dex
# Collects SP Difference From Materia
variance = 0
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
variance += materia.stat_effects[3]
if materia.special_effect == 'Defense Plus'
variance += (materia.level * 5)
end
end
end
# Takes Percentage
n *= ((100 + variance) / 100.0)
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# * Get Agility (AGI)
#--------------------------------------------------------------------------
def agi
# Orginal Max Agi Method
n = seph_materiasystem_gameactor_agi
# Collects SP Difference From Materia
variance = 0
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
variance += materia.stat_effects[4]
if materia.special_effect == 'Speed Plus'
variance += (materia.level * 5)
end
end
end
# Takes Percentage
n *= ((100 + variance) / 100.0)
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# * Get Intelligence (INT)
#--------------------------------------------------------------------------
def int
# Orginal Max Int Method
n = seph_materiasystem_gameactor_int
# Collects SP Difference From Materia
variance = 0
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
variance += materia.stat_effects[5]
if materia.special_effect == 'Magic Plus'
variance += (materia.level * 5)
end
end
end
# Takes Percentage
n *= ((100 + variance) / 100.0)
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# * Change Equipment
# equip_type : type of equipment
# id : weapon or armor ID (If 0, remove equipment)
#--------------------------------------------------------------------------
def equip(equip_type, id)
# Removes Equipped Materia
case equip_type
when 0 # Weapon
for materia in @weapon_materia
$game_party.materia << materia unless materia.nil?
end
when 1 # Shield
for materia in @armor1_materia
$game_party.materia << materia unless materia.nil?
end
when 2 # Head
for materia in @armor2_materia
$game_party.materia << materia unless materia.nil?
end
when 3 # Body
for materia in @armor3_materia
$game_party.materia << materia unless materia.nil?
end
when 4 # Accessory
for materia in @armor4_materia
$game_party.materia << materia unless materia.nil?
end
end
# Orginal Eqip Method
seph_materiasystem_gameactor_equip(equip_type, id)
# Resets Materia Slots
case equip_type
when 0 # Weapon
sn = $data_weapons[@weapon_id].paired_materia * 2 +
$data_weapons[@weapon_id].single_materia unless @weapon_id == 0
@weapon_materia = @weapon_id == 0 ? [] : Array.new(sn, nil)
when 1 # Shield
sn = $data_armors[@armor1_id].paired_materia * 2 +
$data_armors[@armor1_id].single_materia unless @armor1_id == 0
@armor1_materia = @armor1_id == 0 ? [] : Array.new(sn, nil)
when 2 # Head
sn = $data_armors[@armor2_id].paired_materia * 2 +
$data_armors[@armor2_id].single_materia unless @armor2_id == 0
@armor2_materia = @armor2_id == 0 ? [] : Array.new(sn, nil)
when 3 # Body
sn = $data_armors[@armor3_id].paired_materia * 2 +
$data_armors[@armor3_id].single_materia unless @armor3_id == 0
@armor3_materia = @armor3_id == 0 ? [] : Array.new(sn, nil)
when 4 # Accessory
sn = $data_armors[@armor4_id].paired_materia * 2 +
$data_armors[@armor4_id].single_materia unless @armor4_id == 0
@armor4_materia = @armor4_id == 0 ? [] : Array.new(sn, nil)
end
end
#--------------------------------------------------------------------------
# * Change EXP
# exp : new EXP
#--------------------------------------------------------------------------
def exp=(exp)
# If Gaining Exp
if exp > @exp
# Gets New Exp
new_exp = exp - @exp
# Sets Exp + % to 0
exp_plus = 0
for materia in @weapon_materia + @armor1_materia + @armor2_materia +
@armor3_materia + @armor4_materia
unless materia.nil?
# Gains Exp
materia.experience += new_exp
if materia.special_effect == 'Exp Plus'
exp_plus += (materia.level * 10)
end
end
end
new_exp *= ((100 + exp_plus) / 100.0)
exp = new_exp.to_i + @exp
end
# Orginal Exp Method
@exp = [[exp, 9999999].min, 0].max
# Level up
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
@level += 1
# Learn skill
for j in $data_classes[@class_id].learnings
if j.level == @level
learn_skill(j.skill_id)
end
end
end
# Level down
while @exp < @exp_list[@level]
@level -= 1
end
# Correction if exceeding current max HP and max SP
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
#--------------------------------------------------------------------------
# * Get Element Revision Value : Defense
#--------------------------------------------------------------------------
def element_rate(element_id)
# Gets Orginal Element Set
result = seph_materiasystem_gameactor_elementrate(element_id)
# Gets Paired Materia list
paired = return_paired_materia
# Checks each set
for set in paired
# Checks Armors
if set[0] > 0
# Checks Support Materia
materia = set[2]
if materia.special_effect == 'Elemental'
other_materia = set[3]
if other_materia.elements.include?(element_id)
result /= 2
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Determine State Guard
#--------------------------------------------------------------------------
def state_guard?(state_id)
result = seph_materiasystem_gameactor_stateguard?(state_id)
unless result
# Gets Paired Materia list
paired = return_paired_materia
# Checks each set
for set in paired
# Checks Armors
if set[0] > 0
# Checks Support Materia
materia = set[2]
if materia.special_effect == 'Status'
other_materia = set[3]
if other_materia.states.include?(state_id)
result = true
end
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Get Normal Attack Element
#--------------------------------------------------------------------------
def element_set
# Gets Previous Element Set
result = seph_materiasystem_gameactor_elementset
# Adds Materia Element Sets
# Gets Paired Materia list
paired = return_paired_materia
# Checks each set
for set in paired
# Checks Weapon
if set[0] == 0
# Checks Support Materia
materia = set[2]
if materia.special_effect == 'Elemental'
other_materia = set[3]
for elem_id in other_materia.elements
result << elem_id unless set.include?(elem_id)
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Get Normal Attack State Change (+)
#--------------------------------------------------------------------------
def plus_state_set
# Gets Previous Status Set
result = seph_materiasystem_gameactor_plusstateset
# Gets Paired Materia list
paired = return_paired_materia
# Checks each set
for set in paired
# Checks Weapon
if set[0] == 0
# Checks Support Materia
materia = set[2]
if materia.special_effect == 'Status'
other_materia = set[3]
for state_id in other_materia.states
result << state_id unless set.include?(state_id)
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Equip Materia
# equip_type : type of equipment
# slot_index : index of materia
# index : index in $game_party.materia
#--------------------------------------------------------------------------
def equip_materia(equip_type, slot_index, index)
# Gets Materia
new_materia = $game_party.materia[index]
# Unequip Materia
materia = equip_type == 0 ?
@weapon_materia[slot_index] : (eval "@armor#{equip_type}_materia")[slot_index]
unless materia.nil?
$game_party.materia << materia
end
# Modifies Materia
case equip_type
when 0 # Weapon
return if @weapon_materia.size == 0
@weapon_materia[slot_index] = new_materia
when 1 # Shield
return if @armor1_materia.size == 0
@armor1_materia[slot_index] = new_materia
when 2 # Head
return if @armor2_materia.size == 0
@armor2_materia[slot_index] = new_materia
when 3 # Body
return if @armor3_materia.size == 0
@armor3_materia[slot_index] = new_materia
when 4 # Accessory
return if @armor4_materia.size == 0
@armor4_materia[slot_index] = new_materia
end
# Deletes Materia From Party: Materia
$game_party.materia.delete_at(index)
end
#--------------------------------------------------------------------------
# * Equip Materia
# equip_type : type of equipment
# slot_index : index of materia
#--------------------------------------------------------------------------
def unequip_materia(equip_type, slot_index)
materia = equip_type == 0 ?
@weapon_materia[slot_index] : (eval "@armor#{equip_type}_materia")[slot_index]
unless materia.nil?
$game_party.materia << materia
end
equip_type == 0 ?
@weapon_materia[slot_index] = nil : (eval "@armor#{equip_type}_materia")[slot_index] = nil
end
#--------------------------------------------------------------------------
# * Return Paired Materia
#--------------------------------------------------------------------------
def return_paired_materia
# Creates Your Return Array
paired = []
# Checks Weapon
unless @weapon_id == 0
if $data_weapons[@weapon_id].paired_materia > 0
for i in 0...($data_weapons[@weapon_id].paired_materia * 2)
materia = @weapon_materia[i]
if materia.type == 'Support'
o_i = i + ([0, 2, 4, 6].include?(i) ? 1 : - 1)
other_materia = @weapon_materia[o_i]
unless other_materia.nil?
paired << [0, [i, o_i].min, materia, other_materia]
end
end
end
end
end
# Checks Armors
for a in 1..4
unless (eval "@armor#{a}_id") == 0
if (eval "$data_armors[@armor#{a}_id].paired_materia") > 0
for i in 0...((eval "$data_armors[@armor#{a}_id].paired_materia") * 2)
materia = (eval "@armor#{a}_materia")[i]
if materia.type == 'Support'
o_i = i + ([0, 2, 4, 6].include?(i) ? 1 : - 1)
other_materia = (eval "@armor#{a}_materia")[o_i]
unless other_materia.nil?
paired << [a, [i, o_i].min, materia, other_materia]
end
end
end
end
end
end
return paired
end
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :materia
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_materiasystem_gameparty_init initialize
alias seph_materiasystem_gameparty_gaingold gain_gold
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Orginal Initialization Method
seph_materiasystem_gameparty_init
# Sets Up Materia Listings
@materia = []
end
#--------------------------------------------------------------------------
# * Gain Materia
#--------------------------------------------------------------------------
def gain_materia(materia_index)
# Adds Materia
@materia << $data_materia[materia_index].dup
end
#--------------------------------------------------------------------------
# * Gain Gold (or lose)
# n : amount of gold
#--------------------------------------------------------------------------
def gain_gold(n)
gil_plus = 0
for actor in @actors
for materia in actor.weapon_materia + actor.armor1_materia +
actor.armor2_materia + actor.armor3_materia + actor.armor4_materia
unless materia.nil?
if materia.special_effect == 'Gil Plus'
gil_plus += (materia.level * 5)
end
end
end
end
n *= (100 + gil_plus) / 100.0
# Orginal Gain Gold Method
seph_materiasystem_gameparty_gaingold(n.to_i)
end
end
#==============================================================================
# Window Horizontal Command
#==============================================================================
class Window_HorizCommand < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(commands, width = 640, height = 64)
super(0, 0, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
@commands = commands
@item_max = @commands.size
@column_max = @commands.size
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i, normal_color)
end
end
#--------------------------------------------------------------------------
# * Draw Item
# index : item number
#--------------------------------------------------------------------------
def draw_item(index, color)
self.contents.font.color = color
x = width / @item_max * index
off = width / @item_max - 32
self.contents.draw_text(x, 0, off, 32, @commands[index], 1)
end
#--------------------------------------------------------------------------
# * Disable Item
# index : item number
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color)
end
end
#==============================================================================
# ** Window_MateriaBio
#==============================================================================
class Window_MateriaBio < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(240, 128, 400, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(materia)
self.contents.clear
# If no Materia
return if materia.nil?
# Gets Icon Hue
hue = materia.get_hue
# Draws Materia Icon
bitmap = RPG::Cache.icon('Materia Icon').dup
bitmap.hue_change(hue)
self.contents.blt(4, 0, bitmap, Rect.new(0, 0, 24, 24))
# Draws Materia Name
self.contents.font.size = 22
self.contents.font.color = normal_color
self.contents.font.bold = false
self.contents.draw_text(32, 0, contents.width, 24, materia.name)
# Gets Star Bitmap & Changes Hue
bitmap = RPG::Cache.icon('Star - Icon').dup
bitmap.hue_change(hue)
# Gets Start of Star X Coordinate
star_x = contents.width / 2 - 20
# Draws Level Stars
materia.level.times do
self.contents.blt(star_x += 24, 0, bitmap, Rect.new(0, 0, 24, 24))
end
# Draws Un-Leveled Stars
(materia.exp_levels.size + 1 - materia.level).times do
self.contents.blt(star_x += 24, 0, bitmap, Rect.new(0, 0, 24, 24), 100)
end
# Draws Level
self.contents.draw_text(contents.width / 2 + 4, 52, contents.width / 2, 24, 'Level:')
lev = materia.level == materia.exp_levels.size + 1 ? 'Mastered' : materia.level.to_s
self.contents.draw_text(contents.width / 2 - 4, 52, contents.width / 2, 24, lev, 2)
# Draws Experience
self.contents.draw_text(contents.width / 2 + 4, 76, contents.width / 2, 24, 'Experience:')
self.contents.draw_text(contents.width / 2 - 4, 76, contents.width / 2, 24, materia.experience.to_s, 2)
# Draws Next Level
self.contents.draw_text(contents.width / 2 + 4, 100, contents.width / 2, 24, 'Next Level:')
nxt = lev == 'Mastered' ? 'N/A' : materia.exp_levels[materia.level - 1] - materia.experience
self.contents.draw_text(contents.width / 2 - 4, 100, contents.width / 2, 24, nxt.to_s, 2)
# Draws Skills
self.contents.draw_text(4, 28, contents.width, 24, 'Skills:')
for i in 0...(materia.level)
self.contents.font.color = normal_color
unless materia.skills[i].nil?
self.contents.draw_text(8, 52 + i * 24, contents.width / 2 - 8, 24, $data_skills[materia.skills[i]].name)
end
end
for i in (materia.level)...materia.skills.size
self.contents.font.color = disabled_color
unless materia.skills[i].nil?
self.contents.draw_text(8, 52 + i * 24, contents.width / 2 - 8, 24, $data_skills[materia.skills[i]].name)
end
end
if materia.skills.size == 0
self.contents.draw_text(8, 52, contents.width / 2 - 8, 24, 'Nothing')
end
# Draws Special Effect
self.contents.font.color = normal_color
se = materia.special_effect.nil? ? 'Nenhum' : materia.special_effect
self.contents.draw_text(8, 172, contents.width, 24, "Special Effect: #{se}")
# Draw Buy Value
self.contents.font.size = 16
self.contents.font.bold = true
ox = contents.width / 3
self.contents.draw_text(4, 200, ox, 16, "Buy Value: #{materia.new_value}")
# Draw Sell Value
self.contents.draw_text(ox, 200, ox, 16, "Sell Value: #{materia.sell_value}", 1)
# Draw Mater Value
self.contents.draw_text(ox * 2 - 4, 200, ox, 16, "Master Value: #{materia.master_value}", 2)
# Draws Stat Effects
self.contents.font.size = 14
self.contents.draw_text(8, 222, contents.width / 2, 14, 'Attributes Effects:')
stat_names = ['hp', 'sp', 'str', 'dex', 'agi', 'int'].collect! {|x| eval "$data_system.words.#{x}" }
for i in 0...materia.stat_effects.size
self.contents.draw_text(8, 222 + (i + 1) * 14, contents.width / 2, 14, stat_names[i])
self.contents.draw_text(- 8, 222 + (i + 1) * 14, contents.width / 2, 14, "#{materia.stat_effects[i]} %", 2)
end
# Draws Element & Status Effects
self.contents.font.size = 14
x, y = contents.width / 2 + 4, 222
self.contents.draw_text(x, y, contents.width / 2, 14, 'Element & Status Effects:')
if materia.elements.size + materia.states.size == 0
self.contents.draw_text(x + 4, y + 14, contents.width / 2, 14, 'None')
else
# Draws Elements
total = 1
for i in 0...materia.elements.size
total += 1
ox = 4 + total % 2 * (contents.width / 4)
oy = total / 2 * 14
self.contents.draw_text(x + ox, y + oy, contents.width / 2, 14, $data_system.elements[materia.elements[i]])
end
# Draws States
for i in 0...materia.states.size
total += 1
ox = 4 + total % 2 * (contents.width / 4)
oy = total / 2 * 14
self.contents.draw_text(x + ox, y + oy, contents.width / 2, 14, $data_states[materia.states[i]].name)
end
end
end
end
#==============================================================================
# ** Window_MateriaList
#==============================================================================
class Window_MateriaList < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(buying, materia_list = nil, show_cost = true)
super(0, 128, 240, 352)
self.visible = self.active = false
# Creates Materia List
if buying
@materia = []
for index in materia_list
@materia << $data_materia[index].dup
end
else
@materia = $game_party.materia.sort! {|a, b| a.id <=> b.id}
end
@buying, @show_cost = buying, show_cost
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Get Materia
#--------------------------------------------------------------------------
def materia
return @materia[self.index]
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# Clears Contents
if self.contents != nil
self.contents.dispose
self.contents = nil
end
# If item count is not 0, make a bit map and draw all items
@materia.sort! {|a, b| a.id <=> b.id}
@item_max = @materia.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# * Draw Materia
# index : item number
#--------------------------------------------------------------------------
def draw_item(index)
# Checks to See if Selling materia
if @buying
self.contents.font.color = materia.buy_value > $game_party.gold ?
disabled_color : normal_color
end
# Gets Materia
materia = @materia[index]
# Gets Icon Hue
hue = materia.get_hue
# Clears Bitmap Contents
self.contents.fill_rect(Rect.new(0, index * 32, contents.width, 32), Color.new(0, 0, 0, 0))
# Draws Materia Icon
bitmap = RPG::Cache.icon('Materia Icon').dup
bitmap.hue_change(hue)
self.contents.blt(4, index * 32 + 4, bitmap, Rect.new(0, 0, 24, 24))
# Draws Materia Name
self.contents.draw_text(32, index * 32, contents.width, 32, materia.name)
# If Show Cost
if @show_cost
# Draws Materia Cost
value = @buying ? materia.buy_value : materia.sell_value
self.contents.draw_text(- 4, index * 32, contents.width, 32, ": #{value}", 2)
end
end
end
#==============================================================================
# ** Window_MateriaActor
#==============================================================================
class Window_MateriaActor < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 640, 152)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
@frame = 0
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(actor = @actor)
self.contents.clear
# Draws Actor Sprite
draw_actor_sprite
# Draw Actor Information
draw_actor_bio
# Draws Actor Equipment
draw_actor_equipment
# Draws Actor Materia
draw_actor_materia
end
#--------------------------------------------------------------------------
# * Draw Actor Sprite
#--------------------------------------------------------------------------
def draw_actor_sprite
# Clears Actor Bitmap Arena
self.contents.fill_rect(0, 0, 80, 120, Color.new(0, 0, 0, 0))
# Gets Actor Bitmap
bitmap = RPG::Cache.character(@actor.character_name, @actor.character_hue)
# Transfer Actor Frame to src_bitmap
self.contents.stretch_blt(Rect.new(0, 0, 80, 120), bitmap,
Rect.new(bitmap.width / 4 * @frame, 0, bitmap.width / 4, bitmap.height / 4))
end
#--------------------------------------------------------------------------
# * Draw Actor Bio
#--------------------------------------------------------------------------
def draw_actor_bio
# Clears Bio Space
self.contents.fill_rect(92, 0, 140, 120, Color.new(0, 0, 0, 0))
# Draws Actor name
self.contents.font.color = normal_color
self.contents.draw_text(92, 0, 140, 22, @actor.name)
# Draws Level
self.contents.draw_text(92, 22, 140, 22, "Level : #{@actor.level}")
# Draws Actor Class
#self.contents.draw_text(92, 44, 410, 22, "Class : #{$data_classes[@actor.class_id].name}")
# Draws HP
self.contents.draw_text(92, 66, 140, 22, "HP : #{@actor.hp} / #{@actor.maxhp}")
draw_slant_bar(92, 90, @actor.hp, @actor.maxhp.to_f, 136, 4)
# Draws SP
self.contents.draw_text(92, 92, 140, 22, "SP : #{@actor.sp} / #{@actor.maxsp}")
draw_slant_bar(92, 116, @actor.sp, @actor.maxsp.to_f, 136, 4,
Color.new(0, 0, 200), Color.new(0, 170, 0))
end
#--------------------------------------------------------------------------
# * Draw Actor Equipment
#--------------------------------------------------------------------------
def draw_actor_equipment
# Clears Equipment Space
self.contents.fill_rect(240, 0, 176, 120, Color.new(0, 0, 0, 0))
# Draws Equipment
draw_equipment(240, 0, $data_weapons[@actor.weapon_id], 0)
draw_equipment(240, 24, $data_armors[@actor.armor1_id], 1)
draw_equipment(240, 48, $data_armors[@actor.armor2_id], 2)
draw_equipment(240, 72, $data_armors[@actor.armor3_id], 3)
draw_equipment(240, 96, $data_armors[@actor.armor4_id], 4)
end
#--------------------------------------------------------------------------
# * Draw Actor Materia
#--------------------------------------------------------------------------
def draw_actor_materia
# Clears Materia Space
self.contents.fill_rect(416, 0, 192, 120, Color.new(0, 0, 0, 0))
# Draws Materia Slots Background
for i in 0..4
self.contents.fill_rect(416, i * 24 + 2, 192, 22, Color.new(0, 0, 0, 50))
end
# Draws Materia Slots
for i in 0..4
slots_x, y = 416 - 24, i * 24
if i == 0
if @actor.weapon_id == 0
p_times, s_times = 0, 0
else
p_times = $data_weapons[@actor.weapon_id].paired_materia
s_times = $data_weapons[@actor.weapon_id].single_materia
end
else
if (eval "@actor.armor#{i}_id") == 0
p_times, s_times = 0, 0
else
p_times = eval "$data_armors[@actor.armor#{i}_id].paired_materia"
s_times = eval "$data_armors[@actor.armor#{i}_id].single_materia"
end
end
# Draws Paired Materia
p_times.times do
bitmap = RPG::Cache.icon('Materia Paired Left')
self.contents.blt(slots_x += 24, y, bitmap, Rect.new(0, 0, 24, 24))
bitmap = RPG::Cache.icon('Materia Paired Right')
self.contents.blt(slots_x += 24, y, bitmap, Rect.new(0, 0, 24, 24))
end
# Draws Single Materia
s_times.times do
bitmap = RPG::Cache.icon('Materia Single')
self.contents.blt(slots_x += 24, y, bitmap, Rect.new(0, 0, 24, 24))
end
end
# Draws Equipped Materia
for i in [email=0...@actor.weapon]0...@actor.weapon[/email]_materia.size
materia = @actor.weapon_materia[i]
unless materia.nil?
# Gets Icon Hue
hue = materia.get_hue
# Draws Icon
bitmap = RPG::Cache.icon('Materia Icon').dup
bitmap.hue_change(hue)
self.contents.blt(416 + i * 24, 0, bitmap, Rect.new(0, 0, 24, 24))
end
end
for h in 1..4
size = eval "@actor.armor#{h}_materia.size"
for i in 0...size
list = eval "@actor.armor#{h}_materia"
materia = list[i]
unless materia.nil?
# Gets Icon Hue
hue = materia.get_hue
# Draws Icon
bitmap = RPG::Cache.icon('Materia Icon').dup
bitmap.hue_change(hue)
self.contents.blt(416 + i * 24, 24 * h, bitmap, Rect.new(0, 0, 24, 24))
end
end
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
# Checks to Update Picture
if Graphics.frame_count % 10 == 0
@frame == 3 ? @frame = 0 : @frame += 1
draw_actor_sprite
end
end
#--------------------------------------------------------------------------
# * Draw Slant Bar
#--------------------------------------------------------------------------
def draw_slant_bar(x, y, min, max, width = 152, height = 6,
bar_color = Color.new(150, 0, 0, 255), end_color = Color.new(255, 255, 60, 255))
# Draw Border
for i in 0..height
self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255))
end
# Draw Background
for i in 1..(height - 1)
r = 100 * (height - i) / height + 0 * i / height
g = 100 * (height - i) / height + 0 * i / height
b = 100 * (height - i) / height + 0 * i / height
a = 255 * (height - i) / height + 255 * i / height
self.contents.fill_rect(x + i, y + height - i, width, 1, Color.new(r, b, g, a))
end
# Draws Bar
for i in 1..( (min / max) * width - 1)
for j in 1..(height - 1)
r = bar_color.red * (width - i) / width + end_color.red * i / width
g = bar_color.green * (width - i) / width + end_color.green * i / width
b = bar_color.blue * (width - i) / width + end_color.blue * i / width
a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
self.contents.fill_rect(x + i + j, y + height - j, 1, 1, Color.new(r, g, b, a))
end
end
end
#--------------------------------------------------------------------------
# * Draw Equipment
#--------------------------------------------------------------------------
def draw_equipment(x, y, item, type)
if item.nil?
case type
when 0 # Weapon
bitmap = RPG::Cache.icon("Nonweaponed")
when 1 # Shield
bitmap = RPG::Cache.icon("Nonarmored")
when 2 # Helmet
bitmap = RPG::Cache.icon("Nonhelmed")
when 3 # Armor
bitmap = RPG::Cache.icon("Nonacessoried")
when 4 # Accessory
bitmap = RPG::Cache.icon("Nonsphered")
end
contents.font.color, text, opacity = disabled_color, '', disabled_color.alpha
else
bitmap = RPG::Cache.icon(item.icon_name)
contents.font.color, text, opacity = normal_color, item.name, 255
end
self.contents.blt(x, y, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 148, 24, text, 1)
end
end
#==============================================================================
# ** Window_MateriaEquipBio
#==============================================================================
class Window_MateriaEquipBio < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 152, 400, 328)
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(materia)
self.contents.clear
# If no Materia
return if materia.nil?
# Gets Icon Hue
hue = materia.get_hue
# Draws Materia Icon
bitmap = RPG::Cache.icon('Materia Icon').dup
bitmap.hue_change(hue)
self.contents.blt(0, 0, bitmap, Rect.new(0, 0, 24, 24))
# Draws Materia Name
self.contents.font.color = normal_color
self.contents.font.size = 22
self.contents.font.bold = false
self.contents.draw_text(32, 0, contents.width, 24, materia.name)
# Gets Star Bitmap & Changes Hue
bitmap = RPG::Cache.icon('Star - Icon').dup
bitmap.hue_change(hue)
# Gets Start of Star X Coordinate
star_x = contents.width / 2 - 20
# Draws Level Stars
materia.level.times do
self.contents.blt(star_x += 24, 0, bitmap, Rect.new(0, 0, 24, 24))
end
# Draws Un-Leveled Stars
(materia.exp_levels.size + 1 - materia.level).times do
self.contents.blt(star_x += 24, 0, bitmap, Rect.new(0, 0, 24, 24), 100)
end
# Draws Skills
self.contents.font.size = 16
self.contents.font.bold = true
self.contents.draw_text(4, 28, contents.width, 16, 'Skills:')
for i in 0...(materia.level)
self.contents.font.color = normal_color
unless materia.skills[i].nil?
self.contents.draw_text(16, 44 + i * 16, contents.width / 2 - 8, 16, $data_skills[materia.skills[i]].name)
end
end
for i in (materia.level)...materia.skills.size
self.contents.font.color = disabled_color
unless materia.skills[i].nil?
self.contents.draw_text(16, 44 + i * 16, contents.width / 2 - 8, 16, $data_skills[materia.skills[i]].name)
end
end
# Draws Level
self.contents.font.color = normal_color
self.contents.draw_text(contents.width / 2 + 4, 44, contents.width / 2, 16, 'Level:')
lev = materia.level == materia.exp_levels.size + 1 ? 'Mastered' : materia.level.to_s
self.contents.draw_text(contents.width / 2 - 4, 44, contents.width / 2, 16, lev, 2)
# Draws Experience
self.contents.draw_text(contents.width / 2 + 4, 60, contents.width / 2, 16, 'Experience:')
self.contents.draw_text(contents.width / 2 - 4, 60, contents.width / 2, 16, materia.experience.to_s, 2)
# Draws Next Level
self.contents.draw_text(contents.width / 2 + 4, 76, contents.width / 2, 16, 'Next Level:')
nxt = lev == 'Mastered' ? 'N/A' : materia.exp_levels[materia.level - 1] - materia.experience
self.contents.draw_text(contents.width / 2 - 4, 76, contents.width / 2, 16, nxt.to_s, 2)
# Draws Special Effect
se = materia.special_effect.nil? ? 'Nothing' : materia.special_effect
self.contents.draw_text(8, 124, contents.width, 16, "Special Effect: #{se}")
# Draw Buy Value
ox = contents.width / 3
self.contents.draw_text(4, 156, ox, 16, "Buy Value: #{materia.new_value}")
# Draw Sell Value
self.contents.draw_text(ox, 156, ox, 16, "Sell Value: #{materia.sell_value}", 1)
# Draw Mater Value
self.contents.draw_text(ox * 2 - 4, 156, ox, 16, "Master Value: #{materia.master_value}", 2)
# Draws Stat Effects
self.contents.draw_text(8, 188, contents.width / 2, 16, 'Attributes Effects:')
stat_names = ['hp', 'sp', 'str', 'dex', 'agi', 'int'].collect! {|x| eval "$data_system.words.#{x}" }
for i in 0...materia.stat_effects.size
self.contents.draw_text(8, 188 + (i + 1) * 14, contents.width / 2, 16, stat_names[i])
self.contents.draw_text(- 8, 188 + (i + 1) * 14, contents.width / 2, 16, "#{materia.stat_effects[i]} %", 2)
end
# Draws Element & Status Effects
x, y = contents.width / 2 + 4, 188
self.contents.draw_text(x, y, contents.width / 2, 16, 'Element & Status Effects:')
if materia.elements.size + materia.states.size == 0
self.contents.draw_text(x + 4, y + 14, contents.width / 2, 16, 'None')
else
# Draws Elements
total = 1
for i in 0...materia.elements.size
total += 1
ox = 4 + total % 2 * (contents.width / 4)
oy = total / 2 * 16
self.contents.draw_text(x + ox, y + oy, contents.width / 2, 16, $data_system.elements[materia.elements[i]])
end
# Draws States
for i in 0...materia.states.size
total += 1
ox = 4 + total % 2 * (contents.width / 4)
oy = total / 2 * 16
self.contents.draw_text(x + ox, y + oy, contents.width / 2, 16, $data_states[materia.states[i]].name)