Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - xeilmach

1
RMXP Script Database / Re: [XP] Mail Box System
July 15, 2011, 06:21:37 pm
Thanks for the reply, game_guy.

1. I don't understand how the text wrap is used. Could you post any example?

2. The shrunk window is fixed now, but the window is moved a little to the right and into the message window after a mail is selected.
2
RMXP Script Database / Re: [XP] Mail Box System
July 15, 2011, 02:00:39 pm
How do you make the text message wrap so the words in a line would not get cut off?

And how come when pressing ENTER after reading a message, the Mail Title list's window is shrunk?
4
RMXP Script Database / Re: [XP] Elemental Reflector
July 10, 2011, 08:29:50 pm
I know this topic is pretty old, but since it's in the script database, it should be addressed for those who come here from it.

I set up the script and everything database item right and when I used it in the DBS, nothing seems to happen (yes, it is above "Main"). Has anyone gotten this to work before?

Thanks.
5
Hello,

I'm looking for a simple script that makes a new battle command which draws the appropriate windows.

So basically, each character will have a new command along with Skills, Items, etc, called "Materia Swap."

Here's what it should do:

- Draw the Materia Equip system's windows (don't have to call the scene to equip materia)
  - Actor/character index should be of course equal to the character using the command
- End character's action if Materia was changed (preferred) or if the Materia equip windows were accessed - optional
  - Windows will be dispose or if canceled, returns to the actor's command window.

Here's Sephroithspawn's Materia Script System demo for reference:

http://www.megaupload.com/?d=VAQI3POU (this is the original demo)

Any help is appreciated.

Thank you.
6
Solved.

I found out I wasn't defining the class_id correctly.

Thanks nathmatt and legacyblade for replying.
7
My game is pretty big so I tried to copy and paste the script file. The class doesn't change at all when I equip a materia and leave back to the map.
So I copy my game and removed all the unneeded stuff. The class doesn't change at all still again.
So only the entire game file intact can work which allows me to -> equip materia, exit Scene, return to Scene to be able to see a reflected class change

So I'm just sending the Materia Demo over with no modifications:

http://www.megaupload.com/?d=VAQI3POU (this is the original demo)

http://www.megaupload.com/?d=HOURY6EM (this is the modified Materia script)


So the problem is basically: The class/job of an actor only refreshes after I exit the scene instead of refreshing along with the HP/SP modifications upon changing materia.  

I appreciate the help.


EDIT: Here's a vid on it:

http://www.youtube.com/watch?v=pUypgs4TsAo
- Supposed gain a class resistant to "fire" upon equipping fire materia during battle but it doesn't happen until after battle.


Around Line 800 is where I tweaked the class_id change in and just need a way to refresh it.

Code: text

#==============================================================================
# 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 => [0, 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, 2 ], [], [], 750, 5000,
       [4, 5], [2500, 5000]),
     Materia.new(3, 'Fire', 'Skill', [ -3, 3, -1, 0, 0, 1, 6 ], [1], [], 1000, 7500,
       [2, 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_class_id class_id
 alias seph_materiasystem_gameactor_level level
 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
#--------------------------------------------------------------------------
 # * Change Class ID
 #     class_id : new class ID
 #--------------------------------------------------------------------------
 def class_id=(class_id)
   # Orginal Max Int Method
   n = seph_materiasystem_gameactor_class_id
   # 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[6]
       @class_id = variance
     end
   end
   n = variance
   return n
   refresh(class_id)
 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 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}")
   # 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
   self.contents.draw_text(300, 0, 140, 22, "GeGnome:")
 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..0
     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?
       # Draws Icon
       bitmap = RPG::Cache.icon(materia.name)
       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)
   # 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 Stat Effects
   self.contents.draw_text(8, 188, contents.width / 2, 16, 'Attributes Effects:')
   stat_names = ['hp', 'sp', 'str', 'dex', 'agi', 'int', 'hp'].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_Battle.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_Battle.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 = 1)
   @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 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_Battle.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

#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end


I cannot seem to duplicate what I've done elsewhere.
8
Thank you for the fast reply.

There's a section where it draws the class and HP and other parameters. However, only the HP and other parameters are updated instantly. The redraw doesn't seem occur within the Scene for the Class(job).

I probably need an update/refresh line, but I don't know what to put and where.

Note:

- I called Legacy Class Change in Battle as a Scene was able to change class instantly during the battle.
- I called my tweaked system in Battle as a Scene and wasn't able to change class during the battle until immediately afterwards upon landing back on Scene_map.

So I suspect there's a line of code in the Legacy Class Battle updates / refresh any class changes immediately.
9
Hello,

I am tweaking on a Materia System, which can display modified HP,SP,int,dex,etc. from materia instantly within the scene.

However, I am unable to reflect a modified class(job) with the materia in the Scene unless I exit to the Scene_Map and then check my characters' class again through menu or the Materia Equip Scene.

How do I tweak it so that any class/job change within a menu can be reflected instantly?

I understand Legacy Class Change was able to reflect the changed class in the scene, but I don't know how to do such.

Thank you.
10
I'm trying to make the character status screen horizontal like FF13's one.  I went about it by changing:

self.x, self.y, self.z = -512, @actor.index * 120, 999
self.y = @actor.index*120 unless self.active

to

self.x, self.y, self.z = -512, @actor.index * 1, 999
self.x = @actor.index*120 unless self.active

along with INPUTS::DOWN/UP to INPUTS::RIGHT/LEFT  so that I can scroll left to right.


However, when I press CANCEL to exit, all the windows disappear and the entire menu screen shifted slightly to the left, leaving only the frozen main background image I have set and I'm stuck in the menu and can't go back to the map. It's totally fine when I leave it as:

self.y = @actor.index*120 unless self.active

but it makes the character status selection vertical

How do I go about it so that I can fix this issue? I know it has to do with the x and y adjustments, but I can't pinpoint which lines.

Thank you.





11
Recruitment / Re: Frozen Rain EPIC team recruitment ^^
December 26, 2010, 12:47:07 pm
I have been on a break ever since I've completed my first RPG game ever. I was a one-man team for four months, and it was completely exhausting with all the planning, writing, graphics making, and countless playtesting. And the game lasts for only 5 hours at the most, too.

At first, I wanted my game to have all these misc features designed to be time-consuming to increase gameplay time as well as a deep complex story with multiple chapters and endings for replayability.

Though, at a certain point, I faced reality and decided that I rather have fun in creating a short game in which I can manage the quality of. I have to say that that was the best decision that I made, or else I would have abandoned the game at one point due to stress from keeping track of things and other schedules. Now, I can easily go back and add whatever I want whenever I feel like it to expand my short game little by little instead of having one big thing with multiple tasks I have to do all at once to complete a game.

I hope my experiences will help you reflect on your own decisions carefully.

12
Script Troubleshooting / [RESOLVED] Menu Error
November 16, 2010, 11:25:37 pm
Hey everyone, I was running my RMXP game fine until I got this:



And pinpointed me to here:

 # Make status window
   @status_window = Window_MenuStatus.new
   @status_window.x = 160
   @status_window.y = 0

It occurs when I go into the main menu. I use Tatenkai scripts only. Recently I have taken out the "Escape" command from battles, but not sure if it would affect this.

Please help me solve it. Thank you.


EDIT:
I have overrode the error with game_guy's Customizable Enhanced Custom Menu. This lead me to believe I may have accidentally deleted something, but what? I do not intend to use this CMS, but I may have to if I don't get this resolved.



RESOLVED: I was right. I have accidentally deleted MenuStatus.
13
Welcome! / Re: Boo!
November 15, 2010, 01:06:49 pm
Heya, welcome! You'll find a lively bunch on this forum. Hope you'll enjoy!
14
Projects / Games / Re: Ascension Part 1: Rebirth
November 12, 2010, 10:59:09 am
The art looks great! You're a very organized bunch and that's going to help a lot in cutting down time.

The battle system is cool as well. The key input thing is like what Naruto games uses for techniques.

Hope to see a demo soon!
15
RMXP Script Database / Re: [XP] Skill Equipment System
October 21, 2010, 11:37:19 pm
Sorry for bringing up this topic, but it's an awesome idea.


I have :

Script "Skill" line 289 nomethod error

undefined "size"  for nilclass

This seems to happen for ID characters beyond 2

$scene = $scene =
Scene_SkillEquip.new(4)



Also, what's this eskills and eeskills?

----------------------------------------

Can anyone help, thank you.



EDIT: I believe this conflicts with Tankentai SBS, if that's the case, then maybe I'll make an event version