#==============================================================================
# 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
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# * SDK Log Script
#------------------------------------------------------------------------------
SDK.log('Materia System', 'SephirothSpawn', 1, '1.27.06')
#------------------------------------------------------------------------------
# * Begin SDK Enable Test
#------------------------------------------------------------------------------
if SDK.state('Materia System') == true
#==============================================================================
# ** 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