Materia System [Minigame]
Publicado em 16 de julho de 2013.Materia System é um script desenvolvido por por SephirothSpawn e é demonstrado num minigame criado pelo Marcelo Cavaco. O script é compatível com o RPG Maker XP.
Em termos simples, o script permite a você a adicionar status aos itens que vão garantir skills durante a batalha.
O minigame exemplifica direitinho a mecânica no jogo, e olhando, com certeza você vai saber implementar no seu projeto. É muito bem feitinho.
O script segue logo abaixo, e ele precisa ser adicionado acima do main:
#==============================================================================
# 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 = 130
when 'Command'
hue = 60
when 'Summon'
hue = 10
when 'Support'
hue = 180
when 'Independent'
hue = 300
end
return hue
end
end
#==============================================================================
# ** Materia_System
#==============================================================================
module Materia_System
#==============================================================================
# ** CONSTANTS
#==============================================================================
# ~ Weapons Materia Slots
WEAPON_MATERIA_SLOTS = {
1 => [1, 1], 2 => [1, 2], 3 => [2, 2], 4 => [4, 0],
5 => [1, 1], 6 => [1, 2], 7 => [2, 2], 8 => [4, 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 => [1, 1], 2 => [1, 2], 3 => [2, 2], 4 => [4, 0],
5 => [1, 1], 6 => [1, 2], 7 => [2, 2], 8 => [4, 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]
}
# ~ Materia List
# (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, 'Heal', 'Skill', [ -5, 5, -3, 0, 0, 3 ], [], [], 1000, 10000,
[1, 2, 3, 6], [1000, 3000, 6000, 10000]),
Materia.new(2,'Remedy', 'Skill', [ -4, 4, -3, 0, 0, 3 ], [], [], 750, 5000,
[4, 5], [2500, 5000]),
Materia.new(3, 'Fire', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [1], [], 1000, 7500,
[7, 8, 9], [1000, 3000, 7500]),
Materia.new(4, 'Ice', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [2], [], 1000, 7500,
[10, 11, 12], [1000, 3000, 7500]),
Materia.new(5, 'Electric', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [3], [], 1000, 7500,
[13, 14, 15], [1000, 3000, 7500]),
Materia.new(6, 'Water', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [4], [], 1000, 7500,
[16, 17, 18], [1000, 3000, 7500]),
Materia.new(7, 'Earth', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [5], [], 1000, 7500,
[19, 20, 21], [1000, 3000, 7500]),
Materia.new(8, 'Wind', 'Skill', [ -3, 3, -1, 0, 0, 1 ], [6], [], 1000, 7500,
[22, 23, 24], [1000, 3000, 7500]),
Materia.new(9, 'Light', 'Skill', [ -5, 5, -3, 0, 0, 3 ], [7], [], 1000, 7500,
[25, 26, 27], [1000, 3000, 7500]),
Materia.new(10, 'Dark', 'Skill', [ -5, 5, -3, 0, 0, 3 ], [8], [], 1000, 7500,
[28, 29, 30], [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, 71, 72], [2500, 5000, 9000, 14000, 2000]),
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, 'Summon 1', 'Summon', [-10, 10, -5, -5, 0, 10], [], [], 5000, 25000,
[60, 64], [6500, 15000, 25000]),
Materia.new(33, 'Summon 2', 'Summon', [-10, 10, -5, -5, 0, 10], [], [], 5000, 25000,
[68, 72], [6500, 15000, 25000]),
Materia.new(34, 'Summon 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? ? 'Nothing' : 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 0...@actor.weapon_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("001-Weapon01")
when 1 # Shield
bitmap = RPG::Cache.icon("009-Shield01")
when 2 # Helmet
bitmap = RPG::Cache.icon("010-Head01")
when 3 # Armor
bitmap = RPG::Cache.icon("014-Body02")
when 4 # Accessory
bitmap = RPG::Cache.icon("016-Accessory01")
end
contents.font.color, text, opacity = disabled_color, 'Nothing', 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)
end
end
end
end
#==============================================================================
# ** Scene_Title
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_materiasystem_scenetitle_main main
alias seph_materiasystem_scenetitle_newgame command_new_game
alias seph_materiasystem_scenetitle_continue command_continue
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Orginal Main Method
seph_materiasystem_scenetitle_main
# Creates Materia Data List
$data_materia = Materia_System::MATERIA_LIST
end
#--------------------------------------------------------------------------
# * Command: New Game
#--------------------------------------------------------------------------
def command_new_game
# Sets Weapon Materia Slots
for i in 1...$data_weapons.size
$data_weapons[i].set_materia_slots(Materia_System::WEAPON_MATERIA_SLOTS[i])
end
# Sets Armors Materia Slots
for i in 1...$data_armors.size
$data_armors[i].set_materia_slots(Materia_System::ARMORS_MATERIA_SLOTS[i])
end
# Orginal Command: New Game Method
seph_materiasystem_scenetitle_newgame
end
#--------------------------------------------------------------------------
# * Command: Continue
#--------------------------------------------------------------------------
def command_continue
# Orginal Continue Method
seph_materiasystem_scenetitle_continue
# Sets Weapon Materia Slots
for i in 1...$data_weapons.size
$data_weapons[i].set_materia_slots(Materia_System::WEAPON_MATERIA_SLOTS[i])
end
# Sets Armors Materia Slots
for i in 1...$data_armors.size
$data_armors[i].set_materia_slots(Materia_System::ARMORS_MATERIA_SLOTS[i])
end
end
end
#==============================================================================
# ** Scene_MateriaShop
#==============================================================================
class Scene_MateriaShop
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(materia_avialable = [])
@materia_avialable = materia_avialable
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Help Window
@help_window = Window_Help.new
@help_window.set_text('What Would You like to Do?')
# Shop Commands Window
@shop_options_window = Window_HorizCommand.new(
['Buy Materia', 'Sell Materia', 'Exit'], 480)
@shop_options_window.y = 64
# Party Gold Window
@gold_window = Window_Gold.new
@gold_window.x, @gold_window.y = 480, 64
# Dummy Window
@dummy_window = Window_Base.new(0, 128, 640, 352)
# Buy Materia Window
@buy_items = Window_MateriaList.new(true, @materia_avialable)
# Sell Materia Window
@sell_items = Window_MateriaList.new(false)
# Materia Bio Window
@materia_bio = Window_MateriaBio.new
# Scene Objects
@objects = [@help_window, @shop_options_window, @gold_window, @buy_items,
@sell_items, @dummy_window, @materia_bio]
# Execute transition
Graphics.transition
# Main loop
while $scene == self
# Update game screen
Graphics.update
# Update input information
Input.update
# Update Scene Objects
@objects.each {|x| x.update}
# Frame update
update
end
# Prepare for transition
Graphics.freeze
# Dispose of Scene Objects
@objects.each {|x| x.dispose}
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update : Shop Commands
if @shop_options_window.active
update_shop_commands
# Update : Buy Materia
elsif @buy_items.active
update_buy_materia
# Update : Sell Materia
elsif @sell_items.active
update_sell_materia
end
end
#--------------------------------------------------------------------------
# * Frame Update : Shop Commands
#--------------------------------------------------------------------------
def update_shop_commands
# Sets Help Window Text
@help_window.set_text('What Would You like to Do?')
# If B is Pressed
if Input.trigger?(Input::B)
# Plays Cancel SE
$game_system.se_play($data_system.cancel_se)
# Proceeds To Map
$scene = Scene_Map.new
end
# If C is Pressed
if Input.trigger?(Input::C)
# Plays Decision SE
$game_system.se_play($data_system.decision_se)
# Branch Shop Commands Index
case @shop_options_window.index
when 0 # Buy
# Turns Off Shop Command Window
@shop_options_window.active = false
# Turns On Materia Bio Window
@materia_bio.visible = true
# Refreshes Materia Bio Window
@materia_bio.refresh(@buy_items.materia)
# Turns On Buy Items Window
@buy_items.visible = @buy_items.active = true
when 1 # Sell
# Turns Off Shop Command Window
@shop_options_window.active = false
# Turns On Materia Bio Window
@materia_bio.visible = true
# Refreshes Materia Bio Window
@materia_bio.refresh(@sell_items.materia)
# Turns On Sell Items Window
@sell_items.visible = @sell_items.active = true
when 2 # Exit
$scene = Scene_Map.new
end
end
end
#--------------------------------------------------------------------------
# * Frame Update : Buy Materia
#--------------------------------------------------------------------------
def update_buy_materia
# Sets Help Window Text
@help_window.set_text('Which Materia Would You like To Purchase?')
# If B is Pressed
if Input.trigger?(Input::B)
# Plays Cancel SE
$game_system.se_play($data_system.cancel_se)
# Turns Off Buy Materia Window
@buy_items.visible = @buy_items.active = false
# Resets index
@buy_items.index = 0
# Turns Off Materia Bio Window
@materia_bio.visible = false
# Turns On Shop Commands Window
@shop_options_window.active = true
end
# If C is Pressed
if Input.trigger?(Input::C)
# Gets materia
materia = @buy_items.materia
# Checks to see enought money is possesed
if $game_party.gold < materia.buy_value
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play Shop SE
$game_system.se_play($data_system.shop_se)
# Gains Materia
$game_party.gain_materia(materia.id)
# Loses the Gold
$game_party.lose_gold(materia.buy_value)
# Refreshes Party Gold Window
@gold_window.refresh
# Refreshes Buy Materia Window
@buy_items.refresh
# Refreshes Sell Materia Window
@sell_items.refresh
# Refreshes Materia Bio Window
@materia_bio.refresh(@buy_items.materia)
end
# If UP or DOWN is pressed
if Input.trigger?(Input::UP) || Input.trigger?(Input::DOWN) ||
Input.press?(Input::UP) || Input.press?(Input::DOWN)
# Refreshes Materia Bio Window
@materia_bio.refresh(@buy_items.materia)
end
end
#--------------------------------------------------------------------------
# * Frame Update : Sell Materia
#--------------------------------------------------------------------------
def update_sell_materia
# Sets Help Window Text
@help_window.set_text('Which Materia Would You like To Sell')
# If B is Pressed
if Input.trigger?(Input::B)
# Plays Cancel SE
$game_system.se_play($data_system.cancel_se)
# Turns Off Buy Materia Window
@sell_items.visible = @sell_items.active = false
# Resets index
@sell_items.index = 0
# Turns Off Materia Bio Window
@materia_bio.visible = false
# Turns On Shop Commands Window
@shop_options_window.active = true
end
# If C is Pressed
if Input.trigger?(Input::C)
if @sell_items.materia.nil?
# Play Buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play Shop SE
$game_system.se_play($data_system.shop_se)
# Gains the Gold
$game_party.gain_gold(@sell_items.materia.sell_value)
# Refreshes Party Gold Window
@gold_window.refresh
# Deletes Materia
$game_party.materia.delete_at(@sell_items.index)
# Refreshes Sell Materia Window
@sell_items.refresh
# Resets index
@sell_items.index = 0
# Refreshes Materia Bio Window
@materia_bio.refresh(@sell_items.materia)
end
# If UP or DOWN is pressed
if Input.trigger?(Input::UP) || Input.trigger?(Input::DOWN) ||
Input.press?(Input::UP) || Input.press?(Input::DOWN)
# Refreshes Materia Bio Window
@materia_bio.refresh(@sell_items.materia)
end
end
end
#==============================================================================
# ** Scene_MateriaEquip
#==============================================================================
class Scene_MateriaEquip
#--------------------------------------------------------------------------
# * Object Initialization
# actor_index : actor index
# equip_index : equipment index
#--------------------------------------------------------------------------
def initialize(actor_index = 0, equip_index = 0)
@actor_index = actor_index
@equip_index = equip_index
@materia_index = 0
@actor = $game_party.actors[@actor_index]
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Character Bio Window
@character_bio_window = Window_MateriaActor.new(@actor)
# Materia Bio Window
@materia_bio_window = Window_MateriaEquipBio.new
# Materia List
@materia_list_window = Window_MateriaList.new(false, $game_party.materia, false)
@materia_list_window.x, @materia_list_window.y = 400, 152
@materia_list_window.height = 328
@materia_list_window.visible = true
# Materia Pointer Sprite
@pointer_sprite = Sprite.new
@pointer_sprite.x = 416 + (@materia_index + 1) * 24 - 28
@pointer_sprite.y = @equip_index * 24 + 18
@pointer_sprite.z = 9999
@pointer_sprite.bitmap = RPG::Cache.icon('Materia Cursor')
# Updates Materia Bio
update_materia_bio
# Scene Objects
@objects = [@character_bio_window, @materia_bio_window,
@materia_list_window, @pointer_sprite]
# Execute transition
Graphics.transition
# Main loop
while $scene == self
# Update game screen
Graphics.update
# Update input information
Input.update
# Updates Scene Objects
@objects.each {|x| x.update}
# Frame update
update
end
# Prepare for transition
Graphics.freeze
# Dispose of Scene Objects
@objects.each {|x| x.dispose}
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# List Update
!@materia_list_window.active ? update_weapon_select : update_materia_select
end
#--------------------------------------------------------------------------
# * Frame Update : Weapon Select
#--------------------------------------------------------------------------
def update_weapon_select
# Updates Pointer Cursor
@pointer_sprite.x = 416 + (@materia_index + 1) * 24 - 28
@pointer_sprite.y = @equip_index * 24 + 18
# If Up is pressed
if Input.trigger?(Input::UP)
# Plays Cursor SE
$game_system.se_play($data_system.cursor_se)
# Changes Equip Index
@equip_index = @equip_index == 0 ? @equip_index = 4 : @equip_index -= 1
# Resets Materia Index
@materia_index = 0
# Updates Materia Bio Window
update_materia_bio
end
# If Down is pressed
if Input.trigger?(Input::DOWN)
# Plays Cursor SE
$game_system.se_play($data_system.cursor_se)
# Changes Equip Index
@equip_index = @equip_index == 4 ? @equip_index = 0 : @equip_index += 1
# Resets Materia Index
@materia_index = 0
# Updates Materia Bio Window
update_materia_bio
end
# If Right is pressed
if Input.trigger?(Input::RIGHT)
# Plays Cursor SE
$game_system.se_play($data_system.cursor_se)
# Moves Cursor Right
case @equip_index
when 0
max = @actor.weapon_materia.size
when 1
max = @actor.armor1_materia.size
when 2
max = @actor.armor2_materia.size
when 3
max = @actor.armor3_materia.size
when 4
max = @actor.armor4_materia.size
end
return if max == 0
@materia_index = @materia_index == max - 1 ? @materia_index = 0 : @materia_index += 1
# Updates Materia Bio Window
update_materia_bio
end
# If Left is pressed
if Input.trigger?(Input::LEFT)
# Plays Cursor SE
$game_system.se_play($data_system.cursor_se)
# Moves Cursor Left
case @equip_index
when 0
max = @actor.weapon_materia.size
when 1
max = @actor.armor1_materia.size
when 2
max = @actor.armor2_materia.size
when 3
max = @actor.armor3_materia.size
when 4
max = @actor.armor4_materia.size
end
return if max == 0
@materia_index = @materia_index == 0 ? @materia_index = max - 1 : @materia_index -= 1
# Updates Materia Bio Window
update_materia_bio
end
# If L is pressed
if Input.trigger?(Input::L)
@actor_index = @actor_index == 0 ?
@actor_index = $game_party.actors.size - 1 : @actor_index -= 1
$scene = Scene_MateriaEquip.new(@actor_index, @equip_index)
end
# If R is pressed
if Input.trigger?(Input::R)
@actor_index = @actor_index == $game_party.actors.size - 1 ?
@actor_index = 0: @actor_index += 1
$scene = Scene_MateriaEquip.new(@actor_index, @equip_index)
end
# If A button is pressed
if Input.trigger?(Input::A)
# Play equip SE
$game_system.se_play($data_system.equip_se)
# Unequips materia
@actor.unequip_materia(@equip_index, @materia_index)
# Refreshes List Window
@materia_list_window.refresh
# Update Actor Bio Portion
@character_bio_window.draw_actor_bio
# Updates Actor Materia Portion
@character_bio_window.draw_actor_materia
# Updates Bio Window
update_materia_bio
end
# If B button is pressed
if Input.trigger?(Input::B)
# Plays Cancel SE
$game_system.se_play($data_system.cancel_se)
# Proceeds To Map
$scene = Scene_Map.new
end
# If C button is pressed
if Input.trigger?(Input::C)
# Plays Cancel SE
$game_system.se_play($data_system.decision_se)
# Turns on the Materia Select Window
@materia_list_window.active = true
# Updates Materia Bio Window
update_materia_bio
end
end
#--------------------------------------------------------------------------
# * Frame Update : Materia Select
#--------------------------------------------------------------------------
def update_materia_select
# If B button is pressed
if Input.trigger?(Input::B)
# Plays Cancel SE
$game_system.se_play($data_system.cancel_se)
# Turns on the Materia Select Window
@materia_list_window.active = false
end
# If C button is pressed
if Input.trigger?(Input::C)
if @materia_list_window.materia.nil?
# Plays Buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play equip SE
$game_system.se_play($data_system.equip_se)
# Equips Materia
@actor.equip_materia(@equip_index, @materia_index,
@materia_list_window.index)
# Refreshes List Window
@materia_list_window.refresh
# Update Actor Bio Portion
@character_bio_window.draw_actor_bio
# Updates Actor Materia Portion
@character_bio_window.draw_actor_materia
# Turns on the Materia Select Window
@materia_list_window.active = false
# Updates Bio Window
update_materia_bio
end
# If Index Changes
if Input.trigger?(Input::UP) || Input.trigger?(Input::DOWN) ||
Input.press?(Input::UP) || Input.press?(Input::DOWN)
# Updates Materia Bio Window
update_materia_bio
end
end
#--------------------------------------------------------------------------
# * Update Materia Bio Window
#--------------------------------------------------------------------------
def update_materia_bio
# If Materia Select
if @materia_list_window.active
@materia_bio_window.refresh(@materia_list_window.materia)
# If Weapon Select
else
case @equip_index
when 0
item = @actor.weapon_materia
when 1
item = @actor.armor1_materia
when 2
item = @actor.armor2_materia
when 3
item = @actor.armor3_materia
when 4
item = @actor.armor4_materia
end
@materia_bio_window.refresh(item[@materia_index])
end
end
end
#==============================================================================
# ** Scene_Battle (part 1)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_materiasystem_scenebattle_init initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Gets Data Skills Size
@data_skill_size = $data_skills.size
# Orgianl Main Method
seph_materiasystem_scenebattle_init
end
end
#==============================================================================
# ** Scene_Battle (part 2)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_materiasystem_scenebattle_startphase2 start_phase2
#--------------------------------------------------------------------------
# * Start Phase 2
#--------------------------------------------------------------------------
def start_phase2
# Removes Added Skills
($data_skills.size - @data_skill_size).times do
$data_skills.pop
end
# Orginal Method
seph_materiasystem_scenebattle_startphase2
end
end
#==============================================================================
# ** Scene_Battle (part 3)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_materiasystem_scenebattle_skillselect update_phase3_skill_select
alias seph_materiasystem_scenebattle_prior_actor phase3_prior_actor
#--------------------------------------------------------------------------
# * Go to Command Input of Previous Actor
#--------------------------------------------------------------------------
def phase3_prior_actor
# Orginal Previous Actor Method
seph_materiasystem_scenebattle_prior_actor
unless @active_battler.nil?
# Checks to See if Skill Was already selected
if @active_battler.current_action.skill_id > @data_skill_size - 1
# Forgets Skill
@active_battler.forget_skill(@active_battler.current_action.skill_id)
# Deletes Skill From $data_skills
$data_skills.pop
# Sets Skill Selection to nil
@skill = nil
end
end
end
#--------------------------------------------------------------------------
# * Frame Update (actor command phase : skill selection)
#--------------------------------------------------------------------------
def update_phase3_skill_select
# Orignal Enemy Select Method
seph_materiasystem_scenebattle_skillselect
# Gets Active Battlers Paired Mater
paired_materia_set = @active_battler.return_paired_materia
for paired_set in paired_materia_set
materia = paired_set[2]
other_materia = paired_set[3]
if materia.special_effect == 'All'
for skill_id in other_materia.skills
if skill_id == @skill.id
# Duplicates Skill and Changes ID
new_skill = @skill.dup
new_skill.scope = 2 if @skill.scope == 1
new_skill.scope = 4 if @skill.scope == 3 || @skill.scope == 7
new_skill.scope = 6 if @skill.scope == 5
new_skill.id = $data_skills.size
$data_skills << new_skill
@active_battler.learn_skill(new_skill.id)
# Set action
@active_battler.current_action.skill_id = new_skill.id
# End skill selection
end_skill_select
# End enemy selection
end_enemy_select unless @enemy_arrow.nil?
# End actor selection
end_actor_select unless @actor_arrow.nil?
# Go to command input for next actor
phase3_next_actor
end
end
end
end
return
end
end
Download e ficha técnica
- Download (clique com o botão esquerdo do mouse ou toque no link)
- Desenvolvedor, publisher e/ou distribuidor: SephirothSpawn
- Sistema(s): Windows 98/98SE/Me/2000/XP/Vista/7
- Tamanho: 957KB (pacote de instalação e/ou espaço em disco)
- Licença: Grátis
- Categoria: Programação XP
- Tag: RPG Maker XP
- Adicionado por: LichKing
- Acessos: 62
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!
