blue mage, skill leveling, itemcrafting, character change, scripts i need

Started by leeman27534, November 18, 2012, 01:04:15 pm

Previous topic - Next topic

leeman27534

Ideas i want in the game, needed scripts, other gimmicks, ect.:

Lets see, now to add some of the ideas for my game... first off, and most importantly to me, the main idea:
     Red= need a script, and possibly help.         Blue= have a script, trying to get it working     
     Orange = i can see a way around this w/o a script being necessary, so i'll probably go that route, unless i get better advice   
      I got the idea done already, just awaits fine tuning a bit.
---The Main character, Lerial, doesn't get many stat points or skills when leveling up. Instead, you'll need to finish off enemies with one of his 'eating' skills, that will disable exp gains and item drops from that enemy, but add stats and some skills that will level up with a certain amount of continuously eating that type of enemy. i want there to be multiple levels of gains as well, like eat 5 of X enemy, get y stat, then x+5 to get y+5 stat, then X+10 to get y+10 stat, then stop there for that enemy, and for the skills to work around the same, instead of a new skill, increased levels in that skill: it gets stronger, add effects, ect.
       I need a blue mage style script that will let me gain a variable (stats, skills) that works with a skill levelling script, and can work on a point based system, like use on 5 enemies exactly for first part, exactly 10 after that for second, ect and opefully the bit about disabling the enemy's exp and money/item drops, but i might just be able to make the enemy disappearing from the fight a final part of the skill, as if they ran away or whatnot...

---Skill leveling and evolution: I want the skills to level from repeated usage, aside for Lerial's, which will increase from more eating of the enemies. also, if you acquire skills in a similar area, sometimes the skills will 'fuse' granting you a new skill, for instance, if greater heal is level 5, and mass heal is level 5, then you will also get a new skill, greater mass heal at level1, whenever the conditions are met. thats just an example, but it works for all characters, even lerial.
(maybe linked to an item tied to commands, like if G.heal is lvl 5, and if mass heal is level 5, teach X G mass heal, then erase that command link from the item's menu afterwards.) that way i could tie other chara's abilities in as well, maybe. dunno.
       I have a script along this line, DerVVulfman skill leveling script, i'll be testing it out later, to see if it works well or not, hopefully it will work out well with the current scripts/any future scripts

---three styles of itemcrafting: alchemy, weapon+armor crafting, and demonic fusion. alchemy might be as simple as making potions from items, multicurative items, or potions to deal damage and cause statuses in and out of battle. Weapon and armor crafting is as it sounds, using ores and other items to craft weapons and armor. and demonic fusion, taking some of the intrinsic attributes of different plants and animals and making improved gears out of them, like status resistant armors, accessories, and weapons imbued with multiple sources of elemental and status afflicting abilities. ( this could be as simple as an area for an event, where if you can make said item, it shows you its stats and abilities/effects, and tells you the no. and type of items required, and you say yes. maybe have a workshop with three benches, one for alchemy, one for forging, and one between for the fusions...        I'll look for a script for this, after all, using the fusion to imbue basic armors with permanet stat boosts will take up a lot of inventory spaces, maybe make it so only armors of a certain quality can be imbued, ect. i'd love for it to be like a leather armor + 5 nails = weak tough leather armor, +10 nails a strong leather armor, +40 nails, titan leather armor, but with all the armor + ingredients, it just seems like too much of a strain, so i'll probably give like three classes of armors some basic stat increaser setups, and custom weaponry somewhat. ill say its like something about not all metals can hold these kinds of effects well...

---im thinking of having a elemental as a companion, one that can change into 5 different elements, but not quite sure how to work it out just yet... something like 5 different elementals, all named the same, with different skills... and a skill on the elemental that changes her type outside of battle...dunno how to tie the exp for one to all of them, though...    i dunno if the elemental tie in is doable w/o a script, so maybe i should be using red?

---speaking of the elemental, when lerial hits certain levels, he becomes strong enough to 'summon' parts of himself left behind in the Nothingness, like his elemental life force, given form, or a mechanical spellcaster, some of his ultimate gear, ectera, i think i can script that in fine, so np there.    Dunno why this would req a script, so i should be good.

---Some FF/pokemon esque skill effects, like absorbing hp, mp, % based attacks, ectera, i've got bag skill effects by Trickster (i think he's got some help with the collection, but thats where i started at.) the major things im interested in are the false swipe (hit dont kill the enemy) since lerial, to gain the stats/skill points, needs to land the killing blow with a certain skill, hp/mp absorption, mantra magic, form potion (for the alchemist chara) last stand (less allies = more damage, since using lerial's True Form will sacrifice all allies, but if it loses the fight, instant game over, and you can't revive them in battle, i could neglect that bit, but i like it.) the territory skill (damage and type depends on location, considering two of the charas are 'Nature's servants" this will be a nice touch)   like i said, i already have this script, and even a demo for it to see how it works, its bag skill effects by trickster... very nice one.

---changing how some skills react, like a water based healing skill harming a water weak chara, and healing more on a water resistant ally, while a water based attack will do lots more damage to a water weak foe, but potentially heal a water absorbing one, or be nullified by a water neutralizing one.   i think all of this can be done with built in element system, i did test both a water healing skill and a fire healing skill, as well as a water and a fire potion on a water at elem resist f and fire at elem resist a, one healed for 2x what it should have, and one did like 4X in damage, despite being a healing potion/skill, so cool.

I've got some other ideas, but they can wait, these are the more important ones to me, the others i could leave by the wayside and not mind as long as i had these, i would be more than satisfied with my work, and the works of others who contributed...


Here's the description of my game, this is just the script part...\/\/\/\/\/
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
Working on a game version of an idea me and my friends roleplay, and woulda made a D&D game out of, had we have been into D&D.

KK20

Unique Blue Mage System: Erm...still not 100% sure as to how it should be done. For one, you didn't really explain "eating" skills.

Crafting: http://forum.chaos-project.com/index.php/topic,6171.0.html

Elementals: So...another battle command? These elementals don't have stats, do they?

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

leeman27534

alright, the "eating" skills basically work like ffx's version of blue magic, you use a skill, and if that enemy has a learnable skill, you'll learn it, or blue magic not based off being hit by a move, but by using a skill on an appropriate enemy. my alterations are that, to get any stat or skill, the final blow must be dealt with that 'eating' skill, and every enemy will have some ammount of stats/skill to get. basically, if the 'eat' skill lands a killing blow, Lerial gets points toward a stat or skill, since i want a skill leveling system in there as well.

Elemental: the thought i had was, have 5 different elementals in my character queue, but dont have them show up in the party menus, and only be able to change them outside of battle, from a non-battle skill the elemental has.they would have slightly differing stat builds, and definitely differing skills, but tied together if at all possible, where one gets exp, they all get equal exp.
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
Working on a game version of an idea me and my friends roleplay, and woulda made a D&D game out of, had we have been into D&D.

ShadowPierce

Dude, try searching the forum first... I'm pretty sure Tons has that Blue Mage thing you're asking... Also, Blizz's RO Skill System combined with something similar to FF2's skill system will fit your Skill Leveling needs... There should be at least 5 Item Crafting systems around here... For that summoning-his-self stuff, I think it can be evented, or you can use LegacyBlade's class change system... Most of the effects you mentioned in your last 2 paragraphs are either already built into the game system or can be found in Tons of Add-Ons.

Hope I helped... :haha:

Spoiler: ShowHide
Quote from: Blizzard on February 16, 2011, 03:44:48 pmThere you go. It's the proof that SDK is crap. It's incompatible with itself.
3DS Friend Code: ShowHide
1161-0627-9890

leeman27534

As for the blacksmithing thing, i like it, i think ill give it a try, and ill see if i can make 2 different interfaces, or instead of an alchemy and a blacksmith one, ill just have it be called "crafting" and have them all be in one. the demon fusion thing is basically like the enchant, so cool, thanks very much for the help!

i did see the tons thing, but i didnt want to grab it for two scripts and have some huge amount of different scripts i dont want, then later have some bit i dont need jack up something i did want, plus, it says that that blue mage script works when you are hit by an attack that is learnable, and that isnt what i want. the blue mage bit i did want is to be able to get points towards learning a skill/gain stats from killing with a specific skill which i dunno if there are any blue mage scripts out there that work with the skill leveling system. im asking more for advice on where to start... item crafting i haven't checked into yet, im working on bag skill effects atm, which i have had some problems with recently, so here goes...

i've been trying to figure out how to add extra skills into the bag skills scripts, so its not solely just skill X is Y effect, and thats all i get, i want some varying skills, powers, elements, and not just everyone having skill X for if they have Y ability. so, heres been my attempts:
here's bag skill script for absorb
Spoiler: ShowHide
=begin
==============================================================================
●● Name: Absorb
   Effect: Damage is absorbed to the user of the skill
==============================================================================
=end
#--------------------------------------------------------------------------
# * Begin SDK Log
#--------------------------------------------------------------------------
SDK.log('Skill Effect Absorb', 'Trickster', 1.1, '4.22.07')
#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.enabled?('Skill Effect Absorb')

module Effects
 #--------------------------------------------------------------------------
 # * Absorb
 #   - syntax skill_id => absorb_percentage
 #--------------------------------------------------------------------------
 Absorb = {116 => 60}
 #--------------------------------------------------------------------------
 # * Default Absorb Effect
 #--------------------------------------------------------------------------
 Absorb.default = 50
 #--------------------------------------------------------------------------
 # * Absorb Element (Element Rates are not used)
 #--------------------------------------------------------------------------
 Absorb_Element = nil
 #--------------------------------------------------------------------------
 # * Do Not Touch
 #--------------------------------------------------------------------------
 Methods << :absorb
end

class Game_Battler
 #--------------------------------------------------------------------------
 # * Skill Effect Absorb
 #--------------------------------------------------------------------------
 def skill_effect_absorb(user, skill)
   # If A Absorb Effect
   if skill.has_effect?(:absorb)
     # Get Parameters
     percent = Effects.effect(:absorb, skill.id)
     # Get Damage
     @damage_hp = [self.hp, @damage_hp].min
     # If Damage is greater than 0
     if @damage_hp > 0
       # If 0 percentage (random)
       osmosed = percent == 0 ? rand(@damage_hp) + 1 : @damage_hp * percent / 100
       # Add to Hp
       user.hp += osmosed
       # Set Damage
       user.damage = -osmosed
     end
   end
 end
end
#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end

here's the alterations i made, mind, i have o real idea what i am doing scripting wise, i just followed what it looked like was done on the one other script by trickster that had more than one effect...
Spoiler: ShowHide
=begin
==============================================================================
●● Name: Absorb
   Effect: Damage is absorbed to the user of the skill
==============================================================================
=end
#--------------------------------------------------------------------------
# * Begin SDK Log
#--------------------------------------------------------------------------
SDK.log('Skill Effect Absorb', 'Trickster', 1.1, '4.22.07')
#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.enabled?('Skill Effect Absorb')

module Effects
 #--------------------------------------------------------------------------
 # * Absorb
 #   - syntax skill_id => absorb_percentage
 #--------------------------------------------------------------------------
 Absorb_ten = {81 => 10}
 Absorb_twenty_five = {82 => 25}
 Absorb_fourty = {83 => 40}
 Absorb_sixty = {116 => 60}
 Absorb_max = {84 => 100}
 #--------------------------------------------------------------------------
 # * Default Absorb Effect
 #--------------------------------------------------------------------------
 Absorb_ten.default = 50
 Absorb_twenty_five.default = 45
 Absorb_fourty.default = 40
 Absorb_sixty.default = 35
 Absorb_max.default = 30
 #--------------------------------------------------------------------------
 # * Absorb Element (Element Rates are not used)
 #--------------------------------------------------------------------------
 Absorb_ten_Element = nil
 Absorb_twenty_five_Element = nil
 Absorb_fourty_Element = nil
 Absorb_sixty_Element = nil
 Absorb_max_Element = nil
 #--------------------------------------------------------------------------
 # * Do Not Touch
 #--------------------------------------------------------------------------
 Methods << :Absorb_ten
 Methods << :Absorb_twenty_five
 Methods << :Absorb_fourty
 Methods << :Absorb_sixty
 Methods << :Absorb_max
end

class Game_Battler
 #--------------------------------------------------------------------------
 # * Skill Effect Absorb ten
 #--------------------------------------------------------------------------
 def skill_effect_Absorb_ten(user, skill)
   # If A Absorb Effect
   if skill.has_effect?(:Absorb_ten)
     # Get Parameters
     percent = Effects.effect(:Absorb_ten, skill.id)
     # Get Damage
     @damage_hp = [self.hp, @damage_hp].min
     # If Damage is greater than 0
     if @damage_hp > 0
       # If 0 percentage (random)
       osmosed = percent == 0 ? rand(@damage_hp) + 1 : @damage_hp * percent / 100
       # Add to Hp
       user.hp += osmosed
       # Set Damage
       user.damage = -osmosed
     end
   end
 end
end

class Game_Battler
 #--------------------------------------------------------------------------
 # * Skill Effect Absorb twenty five
 #--------------------------------------------------------------------------
 def skill_effect_Absorb_twenty_five(user, skill)
   # If A Absorb Effect
   if skill.has_effect?(:Absorb_twenty_five)
     # Get Parameters
     percent = Effects.effect(:Absorb_twenty_five, skill.id)
     # Get Damage
     @damage_hp = [self.hp, @damage_hp].min
     # If Damage is greater than 0
     if @damage_hp > 0
       # If 0 percentage (random)
       osmosed = percent == 0 ? rand(@damage_hp) + 1 : @damage_hp * percent / 100
       # Add to Hp
       user.hp += osmosed
       # Set Damage
       user.damage = -osmosed
     end
   end
 end
end

class Game_Battler
 #--------------------------------------------------------------------------
 # * Skill Effect Absorb fourty
 #--------------------------------------------------------------------------
 def skill_effect_Absorb_fourty(user, skill)
   # If A Absorb Effect
   if skill.has_effect?(:Absorb_fourty)
     # Get Parameters
     percent = Effects.effect(:Absorb_fourty, skill.id)
     # Get Damage
     @damage_hp = [self.hp, @damage_hp].min
     # If Damage is greater than 0
     if @damage_hp > 0
       # If 0 percentage (random)
       osmosed = percent == 0 ? rand(@damage_hp) + 1 : @damage_hp * percent / 100
       # Add to Hp
       user.hp += osmosed
       # Set Damage
       user.damage = -osmosed
     end
   end
 end
end

class Game_Battler
 #--------------------------------------------------------------------------
 # * Skill Effect Absorb sixty
 #--------------------------------------------------------------------------
 def skill_effect_Absorb_sixty(user, skill)
   # If A Absorb Effect
   if skill.has_effect?(:Absorb_sixty)
     # Get Parameters
     percent = Effects.effect(:Absorb_sixty, skill.id)
     # Get Damage
     @damage_hp = [self.hp, @damage_hp].min
     # If Damage is greater than 0
     if @damage_hp > 0
       # If 0 percentage (random)
       osmosed = percent == 0 ? rand(@damage_hp) + 1 : @damage_hp * percent / 100
       # Add to Hp
       user.hp += osmosed
       # Set Damage
       user.damage = -osmosed
     end
   end
 end
end

class Game_Battler
 #--------------------------------------------------------------------------
 # * Skill Effect Absorb max
 #--------------------------------------------------------------------------
 def skill_effect_Absorb_max(user, skill)
   # If A Absorb Effect
   if skill.has_effect?(:Absorb_max)
     # Get Parameters
     percent = Effects.effect(:Absorb_max, skill.id)
     # Get Damage
     @damage_hp = [self.hp, @damage_hp].min
     # If Damage is greater than 0
     if @damage_hp > 0
       # If 0 percentage (random)
       osmosed = percent == 0 ? rand(@damage_hp) + 1 : @damage_hp * percent / 100
       # Add to Hp
       user.hp += osmosed
       # Set Damage
       user.damage = -osmosed
     end
   end
 end
end
#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end


and heres the main problem...
script 'Skill Effects End (req) line 29:NameError occurred.
uninitialized constant Effects:: Absorb_Ten_Element
the script area that was messing up is:
Spoiler: ShowHide
class Game_Battler
 # Set Local String
 string = ""
 # Run Through Each Method
 Effects::Methods.each do |symbol|
   # Get Corresponding method name
   method_name = "skill_effect_#{symbol.id2name}"
   # Get Method Call
   string += method_name + '(user, skill); ' if self.method_defined?(method_name)
 end
 # Recreate Method
 eval("def skill_effects(user, skill);  #{string}; end")
end

module Effects
 # Setup Elements Hash
 Elements = {}
 # Setup Parameters Hash
 Parameters = {}
 # Run Through Methods Defined
 Methods.each do |symbol|
   # Convert to string
   string = symbol.id2name
   # s_t_r_i_n_g -> S_T_R_I_N_G
   string = string.split('_').collect {|str| str.capitalize}
   # Rejoin
   element, parameter = string.join('_') + '_Element', string.join('_')
   # Add to Elements Hash
   [color=red]Elements[symbol] = const_get(element)[/color]
   # Add to Parameters Hash
   Parameters[symbol] = const_get(parameter)
 end
end

after looking around a bit more, i seen something in hte shadowheal area that made me wonder if it would work...
Shadow_Heal = {114 => [50, 3, 60], 115 => [-30, 3, -100]}
the 114 =>, then 115 => makes it point to two different skills, with different strengths, 115 being a harmful skill...
would something like this make for extra spots for the same desired effect?
 Absorb_ten = {81 => 10, 85 => 10}
if skill 85 was just another 10% absorb, but with a differing power, hits all enemies, ect...
and could i use it something more like
Absorb = {81 => 10, 82 => 25, 83 => 40, 84 => 60, 85 => 100}
instead of making more skills like i did (^^ 60 was in the hundreds only because that was the original absorb)
also, after solving this bit, could i tie another script effect onto the same skill as 81, so it also drains mp as well as hp?

thanks much for the help, and any future help though, i need some suggestions as to where to go, since im a utter noob.

Please use code tags when posting scripts. ~ gameus
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
Working on a game version of an idea me and my friends roleplay, and woulda made a D&D game out of, had we have been into D&D.

KK20

QuoteAbsorb = {81 => 10, 82 => 25, 83 => 40, 84 => 60, 85 => 100}

That's how you're supposed to configure it, not by creating extra variables 'absorb_ten', etc. That's the only thing you touch in the script. Leave all the other things below it alone.

As for absorbing SP, that would be in Osmosis and Damage MP, configured much the same way.

No one can help you with your blue mage script if we don't even know how your skill leveling works.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

leeman27534

alright, the skill levelling script is...
Spoiler: ShowHide
#==============================================================================
# ** Skill Leveling
#------------------------------------------------------------------------------
#    by DerVVulfman
#    version 1.2
#    12-25-2009
#    RGSS / RPGMaker XP
#==============================================================================
#
#  INTRODUCTION:
#
#  This system allows you to increase your skill level with individual skills
#  through practice and use.   The more you use an individual skill, the more
#  powerful you can be with that skill and the amount of energy needed to use
#  a skill is reduced.
#
#
#------------------------------------------------------------------------------
#
#  SCRIPT CALLS:
#
#  -- Obtaining Current Skill Information --
#
#  Each actor  in your database  will have 'levels'  for each skill he or she
#  possesses.   So one character may have a healing spell at level 1,  a fire
#  spell at level 3 or so on.   But you may want to obtain the information on
#  how high a level,  or how low the cost of using a skill without going into
#  the menu.  ( A real plus for scripters ):
#
#  To obtain the information from each actor, use the following script calls:
#
#     For a skill's current experience point:
#         $game_actors[actor_id].skill_exp[skill_id]
#
#     For that skill's current level:
#         $game_actors[actor_id].skill_level[skill_id]
#
#     To get the current SP cost for a skill:
#         $game_actors[actor_id].skill_sp_cost[skill_id]
#
#     For that skill's current power level:
#         $game_actors[actor_id].skill_rate_power[skill_id]
#
#     For that skill's chance to-hit:
#         $game_actors[actor_id].skill_rate_tohit[skill_id]
#
#
#  As an example,  this simple script call can obtain Aluxes's current skill
#  level for the CrossCut skill and print it out with the default print cmd:
#
#     print $game_actors[1].skill_level[57]
#
#
#  -------------------------------------------------------------------------
#
#  -- Increasing or Decreasing Skill Levels --
#
#  Not only can you increase  a player/actor's skill level by combat, but by
#  use of script calls.   Rather necessary  if you wanted to increase a non-
#  combat skill.  As such, you have three types of script calls you can use:
#
#  skill_level_up(actor_id, skill_id)
#    This script call  can increase an  individual actor's skill level by a
#    factor of one.   As such, using    skill_level_up(1, 7)    would raise
#    Aluxes's Fire spell up one level in experience.
#
#  skill_level_down(actor_id, skill_id)
#    The polar opposite of 'skill_level_up', this script call will decrease
#    an individual actor's  skill level by one.   It is called  in the same
#    exact manner.
#
#  skill_level_set(actor_id, skill_id, level)
#    This script call can increase and/or decrease an actor's skill to what
#    ever the end user so desires. Rather than going by increments, it will
#    set that particular skill level to the level specified. As such, using
#    skill_level_set(2, 61, 6)   would set Basil's Leg Sweep up to level 6.
#
#
#------------------------------------------------------------------------------
#
#  TERMS AND CONDITIONS:
#
#  Free to use, even in commercial projects.  Just note that I need some form
#  of due credit... even a mere mention in some end titles.
#
#
#==============================================================================

# SWITCHES
 HIDE_1LEVEL         = false   # Defines if the default 'lv 1' text is attached
 FIELD_ENABLED       = true    # Defines if leveling allowed in field map
 SKILL_ANIMS         = true    # Defines if animations may change
 SKILL_LV_UP         = true    # Defines if the leveling popup window is shown

 
#  -------------------------------------------------------------------------


# LEVEL SUFFIX
 SKILL_SUFFIX        = "Lv"  # Txt added to describe the skill level
 SKILL_SUFFIX_STYLE  = 2     # 0 = parenthesis, 1, brackets, 2 = none

 
#  -------------------------------------------------------------------------

 
# LEVELING POP-UP WINDOW
 SKILL_LEVEL_SE          = "056-Right02"         # SE when levelling up
 SKILL_LEVEL_FONT        = "Arial Black"         # Font used in Pop-Up
 SKILL_LEVEL_FONT_SIZE   = 32                    # Size of Pop-Up Text
 SKILL_LEVEL_FONT_COLOR  = Color.new(255, 0, 0)  # Color of Pop-Up Text
 
 
#  -------------------------------------------------------------------------

 
# MASTER SKILL LEVEL SYSTEMS:
 # Define maximum level per skill
 # ==============================
 #   This system defines the maximum level a skill can obtain for each actor
 #   who uses it: syntax = { skill => {actor list}, skill => {actor list},... }
 #   The actor list is as follows { actor_id => max, actor_id => max, ... }
 #   If the actor ID is set to '0', then the max level applies to all unlisted
 #   actors.
   SKILL_LEVEL_MAX   = { 57 => { 0=>3,  1=>4} }
   
 # Define custom names for skills based on level  
 # =============================================
 #   This system defines individual/custom names for leveled skills.  It acts
 #   as a replacement if you do not want the traditional 'Skill (lv 3)' text
 #   to appear:  syntax = { skill => {name list}, skill => {name list},... }
 #   The name list is as follows { skill_lvl => text, skill_lvl => text, ... }
 #   Each skill level starts off at 1 and increases.  If there is no skill or
 #   skill level, the default text style will be used.
   SKILL_LEVEL_NAMES = { 57 => { 1 => "Cross Cut",  2 => "Cross Cut Mk II", 3 => "Master Cut", 4 => "Tornado Cut", 5 => "Phoenix Cut" } }

 # Define custom icons for skills based on level  
 # =============================================
 #   This system defines individual/custom icons for leveled skills.  It merely
 #   replaces the skill's icon with a newer one based on the skill as you wish
 #   it to appear:  syntax = { skill => {icon list}, skill => {icon list},... }
 #   The icon list is as follows { skill_lvl => icon, skill_lvl => icon, ... }
 #   Each skill level starts off at 1 and increases.  If there is no skill or
 #   skill level, the default text style will be used.    
   SKILL_LEVEL_ICONS = { 57 => { 1 => "050-Skill07", 2 => "050-Skill07", 3 => "001-Weapon01", 4 => "044-Skill01", 5 => "037-Item06" } }
   
 # Define custom anims for skills based on level  
 # =============================================
 #   This system defines individual/custom battle anims for leveled skills.
 #   Syntax:  syntax = { skill => {anim list}, skill => {anim list},... }
 #   The animation list is as follows { lvl => array, lvl => array, ... }
 #   And each array holds two values, the user and target IDs of your battle
 #   animations.
   SKILL_LEVEL_ANIMS = { 57 => { 1 => [5, 69], 2 => [11, 70] } }
 
 
#  -------------------------------------------------------------------------


# SKILL GROWTH SYSTEM  
 # Define experience points needed per level per skill
 # ===================================================
 #   This first system defines the basic number of experience points a skill
 #   must earn before attaining each level.  The format is very much like the
 #   skill max level system:  syntax = { skill => {list}, skill => {list},... }
 #   The actor list is as follows { actor_id => exp, actor_id => exp,... }
 #   If the actor ID is set to '0', then the experience points shown applies
 #   to all unlisted actors for that skill.
 SKILL_EXP_POINTS  = { 57 => { 0=>10, 1=>2} }
 
 # Define experience point curve per skill (no curve if skill undefined)
 # =====================================================================
 #   This system defines an escalating curve to the experience points needed
 #   for a skill to achieve each level.  The format is very much like the
 #   skill pts system (above): syntax = { skill => {exp}, skill => {exp},... }
 #   The actor list is as follows { actor_id => exp, actor_id => exp,... }
 #   If the actor ID is set to '0', then the experience points shown applies
 #   to all unlisted actors for that skill.  
   SKILL_EXP_CURVE   = { 58 => { 0=>0, 1=>5} }
   
 # Using both SKILL_EXP_POINTS and SKILL_EXP CURVE with the supplied example
 # would have the 'Cross Cut' skill go from LVL 1 to LVL 2 on 7 xp (2 + 5*1),
 # LVL 3 after 14 xp  (4 + 5*2), LVL 4 at 21 xp (6+ 5*3)
 
 
#  -------------------------------------------------------------------------

 
# SKILL INCREASE/DECREASE RATES
 # Defines the decreased SP cost per level of skill
 # ================================================
 #   This system defines the number of SP points you save with each subsequent
 #   level.  The higher the level of your spell, the lower your SP cost will
 #   be for each actor: syntax = { skill => {list}, skill => {list},... }
 #   The list is as follows { actor_id => SP saved , actor_id => SP saved, ... }
 #   If the actor ID is set to '0', then the saved SP cost applies to all
 #   unlisted actors.
   SKILL_RATE_SP     = { 57 => {0=>10}}
   
 # Defines the increased power for each skill
 # ==========================================
 #   This system defines the increase in power you can deliver with each sub-
 #   sequent level.  The higher the level of your spell, the higher the damage
 #   will be delivered: syntax = { skill => {list}, skill => {list},... }
 #   The list is as follows { actor_id => increase, actor_id => increase, ... }
 #   If the actor ID is set to '0', then the spell power increase applies to
 #   all unlisted actors.
   SKILL_RATE_POWER  = { 57 => {1=>500}}
   
 # Defines the increased chance to hit per level of skill
 # ======================================================
 #   This system defines the increased chance you have to perform a successful
 #   skill effect.  The higher the level of your spell, the higher the chance
 #   to perform a skill: syntax = { skill => {list}, skill => {list},... }
 #   The list is as follows { actor_id => increase, actor_id => increase, ... }
 #   If the actor ID is set to '0', then the spell's to hit chance applies to
 #   all unlisted actors.
   SKILL_RATE_TOHIT  = { 57 => {1=>50} }
 
   
 
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_accessor   :skill_exp               # Skill exp
 attr_accessor   :skill_level             # Skill Level
 attr_accessor   :skill_sp_cost           # Skill sp Adjustment
 attr_accessor   :skill_rate_power        # Skill power adjustment
 attr_accessor   :skill_rate_tohit        # Skill to hit adjustment
 attr_accessor   :skill_exp_list          # Skill experience chart
 attr_accessor   :skill_level_pop         # Leveling up flag
 #--------------------------------------------------------------------------
 # * Setup
 #     actor_id : actor ID
 #--------------------------------------------------------------------------
 alias setup_skill_levels setup
 def setup(actor_id)
   # Perform the original call
   setup_skill_levels(actor_id)
   # Create arrays for the actor's skills
   @skill_exp              = []
   @skill_level            = []
   @skill_sp_cost          = []
   @skill_rate_power       = []
   @skill_rate_tohit       = []
   @skill_exp_list         = []
   # Skill Level Popup Flag
   @skill_level_pop      = false    
   # Cycle through skills and load the array
   for id in 1...$data_skills.size
     @skill_exp[id]        = 0
     @skill_level[id]      = 0
     @skill_sp_cost[id]    = $data_skills[id].sp_cost
     @skill_rate_power[id] = $data_skills[id].power
     @skill_rate_tohit[id] = $data_skills[id].hit
     @skill_exp_list[id]   = make_skill_exp_list(actor_id, id)
   end    
 end
 #--------------------------------------------------------------------------
 # * Calculate Skill EXP
 #--------------------------------------------------------------------------
 def make_skill_exp_list(actor_id, id)
   # Obtain values to generate skill's experience curve
   base_increment    = skill_hash_acquire(SKILL_EXP_POINTS, actor_id, id )
   experience_curve  = skill_hash_acquire(SKILL_EXP_CURVE, actor_id, id )
   level_limit       = skill_hash_acquire(SKILL_LEVEL_MAX, actor_id, id )
   # Generate curve based on figures
   list = []
   list[0] = 0
   for lv in 1...level_limit+1
     exp = 0
     exp = list[lv-1] + experience_curve * lv + base_increment
     list[lv] = exp.truncate
   end
   # Return the generated list
   return list    
 end
end



#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  This class deals with battlers. It's used as a superclass for the Game_Actor
#  and Game_Enemy classes.
#==============================================================================

class Game_Battler
 #--------------------------------------------------------------------------
 # * Determine Usable Skills
 #     skill_id : skill ID
 #--------------------------------------------------------------------------
 alias skill_level_skill_can_use? skill_can_use?
 def skill_can_use?(skill_id)
   # Perform the original call
   effective = skill_level_skill_can_use?(skill_id)
   # Unless usable skill
   unless effective
     # If there's not enough SP, the skill cannot be used.
     if $data_skills[skill_id].sp_cost > self.sp
       # For actors
       if self.is_a?(Game_Actor)
         skill_sp_cost = self.skill_sp_cost[skill_id]
         # Reset effective to true if 'calculated' sp is enough.
         effective = true if skill_sp_cost < self.sp
       end
     end
   end
   # Return effective
   return effective
 end
 #--------------------------------------------------------------------------
 # * Apply Skill Effects
 #     user  : the one using skills (battler)
 #     skill : skill
 #--------------------------------------------------------------------------
 alias skill_level_skill_effect skill_effect
 def skill_effect(user, skill)
   # Set power and hit rate for actors
   if user.is_a?(Game_Actor)
     skill.power = user.skill_rate_power[skill.id]
     skill.hit   = user.skill_rate_tohit[skill.id]
   end
   # Perform the original call
   effective     = skill_level_skill_effect(user, skill)
   # Use skill leveling system for actors
   if user.is_a?(Game_Actor) and ($scene.is_a?(Scene_Battle) or FIELD_ENABLED)
     skill_level_engine(user, skill)
   end
   return effective
 end
 #--------------------------------------------------------------------------
 # * Skill Level Engine
 #     user  : the one using skills (battler)
 #     skill : skill  
 #--------------------------------------------------------------------------
 def skill_level_engine(user, skill)
   return if user.is_a?(Game_Enemy)
   # Increase EXP
   user.skill_exp[skill.id] += 1
   # Skill Max
   level_limit = skill_hash_acquire(SKILL_LEVEL_MAX, user.id, skill.id)
   # if the maximum skill level not reached
   if user.skill_level[skill.id] < level_limit
     # Retrieve skill experience list
     exp_list = user.skill_exp_list[skill.id]
     # If the skill reached enough points for a new skill level
     if user.skill_exp[skill.id] == exp_list[user.skill_level[skill.id]+1]
       # Increase the skill level
       user.skill_level[skill.id] += 1  
       # Turn on level flag
       user.skill_level_pop = true
       # Adjust the new SP cost
       skill_cost = skill_hash_acquire(SKILL_RATE_SP, user.id, skill.id)
       user.skill_sp_cost[skill.id] -= skill.sp_cost * skill_cost / 100
       user.skill_sp_cost[skill.id] = user.skill_sp_cost[skill.id].truncate
       # SP consumption cannot be 0 or less
       user.skill_sp_cost[skill.id] = 0 if user.skill_sp_cost[skill.id] < 0
       # Adjust the new skill power
       skill_rate_power = skill_hash_acquire(SKILL_RATE_POWER, user.id, skill.id)
       user.skill_rate_power[skill.id] += skill.power * skill_rate_power / 100
       user.skill_rate_power[skill.id] = user.skill_rate_power[skill.id].truncate
       # Adjust skill accuracy
       skill_rate_tohit = skill_hash_acquire(SKILL_RATE_TOHIT, user.id, skill.id)
       user.skill_rate_tohit[skill.id] += skill.hit * skill_rate_tohit / 100
       user.skill_rate_tohit[skill.id] = user.skill_rate_tohit[skill.id].truncate        
       # Hit Rate cannot be above 100
       user.skill_rate_tohit[skill.id] = 100 if user.skill_rate_tohit[skill.id] > 100
     end
   end
 end
 #--------------------------------------------------------------------------
 # * Skill Hash Acquisition System
 #     hash_array : hash value holding data
 #     user_id    : the one using skills (battler)
 #     id         : skill id  
 #--------------------------------------------------------------------------
 def skill_hash_acquire(hash_array, user_id, id)
   hash_temp     = {}
   skill_value   = 0
   hash_temp     = hash_array[id] if hash_array[id] != nil
   unless hash_temp == nil
     skill_value = hash_temp[0] if hash_temp[0] != nil
     skill_value = hash_temp[user_id] if hash_temp[user_id]  != nil
   end
   return skill_value
 end
end



#==============================================================================
# ** Window_Skill
#------------------------------------------------------------------------------
#  This window displays usable skills on the skill and battle screens.
#==============================================================================

class Window_Skill < Window_Selectable
 #--------------------------------------------------------------------------
 # * Draw Item
 #     index : item number
 #--------------------------------------------------------------------------
 def draw_item(index)
   # Get skill
   skill = @data[index]
   if @actor.skill_can_use?(skill.id)
     self.contents.font.color = normal_color
   else
     self.contents.font.color = disabled_color
   end
   x = 4 + index % 2 * (288 + 32)
   y = index / 2 * 32
   rect = Rect.new(x, y, self.width / @column_max - 32, 32)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   # Acquire skill level
   @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
   # Obtain current skill icon based on skill level
   name_icon  = skill_name_acquire(SKILL_LEVEL_ICONS, skill, @actor.skill_level[skill.id])
   name_icon  = skill.icon_name     if name_icon == nil
   # Obtain the bitmap
   bitmap = RPG::Cache.icon(name_icon)
   opacity = self.contents.font.color == normal_color ? 255 : 128
   # Draw Icon
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   # Obtain current skill name based on skill level
   name_level  = skill_name_acquire(SKILL_LEVEL_NAMES, skill, @actor.skill_level[skill.id])
   if name_level == nil
     name_level = skill.name
     unless @actor.skill_level[skill.id] == 0 && HIDE_1LEVEL
       case SKILL_SUFFIX_STYLE
       when 0: name_level = skill.name + " ("+SKILL_SUFFIX+" " + (@actor.skill_level[skill.id]+1).to_s + ")"
       when 1: name_level = skill.name + " ["+SKILL_SUFFIX+" " + (@actor.skill_level[skill.id]+1).to_s + "]"
       when 2: name_level = skill.name + " "+SKILL_SUFFIX+" " + (@actor.skill_level[skill.id]+1).to_s
       end
     end
   end
   # Draw Name
   self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
   # Display revised SP Cost
   @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
   self.contents.draw_text(x + 232, y, 48, 32, @actor.skill_sp_cost[skill.id].to_s, 2)
 end
 #--------------------------------------------------------------------------
 # * Skill Name Acquisition System
 #     hash_array : hash value holding name data
 #     skill      : skill  
 #     level      : Current level of the skill
 #--------------------------------------------------------------------------
 def skill_name_acquire(name_array, skill, level)
   hash_temp = {}
   skill_value = nil
   hash_temp     = name_array[skill.id]  if name_array[skill.id] != nil
   unless hash_temp == nil
     skill_value = hash_temp[1]          if hash_temp[1]         != nil
     skill_value = hash_temp[level+1]    if hash_temp[level+1]   != nil
   end
   return skill_value
 end
end


#==============================================================================
# ** Window_Skill_Popup
#------------------------------------------------------------------------------
#  This window is used to display a popup for leveled skills.
#==============================================================================

class Window_Skill_Popup < Window_Base
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     actor : actor
 #--------------------------------------------------------------------------
 def initialize(actor)
   super(actor.screen_x-140, 260, 250, 64)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.opacity = 0
   self.contents.font.name   = SKILL_LEVEL_FONT
   self.contents.font.size   = SKILL_LEVEL_FONT_SIZE
   self.contents.font.color  = SKILL_LEVEL_FONT_COLOR
   self.contents.draw_text(80, 0, 150, 32, "LEVEL UP!")
 end
end



#==============================================================================
# ** Interpreter
#------------------------------------------------------------------------------
#  This interpreter runs event commands. This class is used within the
#  Game_System class and the Game_Event class.
#==============================================================================

class Interpreter
 #--------------------------------------------------------------------------
 # * Skill Level Up
 #     actor_id  :   Actor ID
 #     skill_id  :   Skill ID
 #--------------------------------------------------------------------------
 def skill_level_up(actor_id, skill_id)
   actor = $game_actors[actor_id]
   skill_level_set(actor_id, skill_id, actor.skill_level[skill_id]+1)
 end
 #--------------------------------------------------------------------------
 # * Skill Level Down
 #     actor_id  :   Actor ID
 #     skill_id  :   Skill ID
 #--------------------------------------------------------------------------
 def skill_level_down(actor_id, skill_id)
   actor = $game_actors[actor_id]
   skill_level_set(actor_id, skill_id, actor.skill_level[skill_id]-1)
 end  
 #--------------------------------------------------------------------------
 # * Skill Level Setting
 #     actor_id  :   Actor ID
 #     skill_id  :   Skill ID
 #     level     :   Setting level
 #--------------------------------------------------------------------------
 def skill_level_set(actor_id, skill_id, level)
   actor = $game_actors[actor_id]
   skill = $data_skills[skill_id]
   # Calculate positive or negative level adjustment
   level_adjust =  level - actor.skill_level[skill.id]
   # Skill Max
   level_limit = skill_hash_acquire(SKILL_LEVEL_MAX, actor.id, skill.id)
   # Break if illegal level
   return if level > level_limit or level < 0
   # Level
   actor.skill_level[skill.id] = level
   # Reset Skill Experience
   use_list = actor.skill_exp_list[skill.id]
   actor.skill_exp[skill.id] = use_list[level]
   # Adjust the new SP cost
   skill_cost = (level_adjust * skill_hash_acquire(SKILL_RATE_SP, actor.id, skill.id))
   actor.skill_sp_cost[skill.id] -= skill.sp_cost * skill_cost / 100
   actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate    
   # SP consumption cannot be 0 or less
   actor.skill_sp_cost[skill.id] = 0 if actor.skill_sp_cost[skill.id] < 0
   # Adjust the new skill power
   skill_rate_power = (level_adjust * skill_hash_acquire(SKILL_RATE_POWER, actor.id, skill.id))
   actor.skill_rate_power[skill.id] += skill.power * skill_rate_power / 100
   actor.skill_rate_power[skill.id] = actor.skill_rate_power[skill.id].truncate
   # Adjust skill accuracy
   skill_rate_tohit = (level_adjust * skill_hash_acquire(SKILL_RATE_TOHIT, actor.id, skill.id))
   actor.skill_rate_tohit[skill.id] += skill.hit * skill_rate_tohit / 100
   actor.skill_rate_tohit[skill.id] = actor.skill_rate_tohit[skill.id].truncate    
   # Hit Rate cannot be above 100
   actor.skill_rate_tohit[skill.id] = 100 if actor.skill_rate_tohit[skill.id] > 100
 end
 #--------------------------------------------------------------------------
 # * Skill Hash Acquisition System
 #     hash_array : hash value holding data
 #     user_id    : the one using skills (battler)
 #     id         : skill id  
 #--------------------------------------------------------------------------
 def skill_hash_acquire(hash_array, user_id, id)
   hash_temp     = {}
   skill_value   = 0
   hash_temp     = hash_array[id] if hash_array[id] != nil
   unless hash_temp == nil
     skill_value = hash_temp[0] if hash_temp[0] != nil
     skill_value = hash_temp[user_id] if hash_temp[user_id]  != nil
   end
   return skill_value
 end
end



#==============================================================================
# ** Scene_Skill
#------------------------------------------------------------------------------
#  This class performs skill screen processing.
#==============================================================================

class Scene_Skill
 #--------------------------------------------------------------------------
 # * Frame Update (when target window is active)
 #--------------------------------------------------------------------------
 alias skill_level_update_target update_target
 def update_target
   # Set the use flag
   use_flag = false
   # Obtain skill cost difference
   current_skill_diff = @actor.skill_sp_cost[@skill.id] - @skill.sp_cost
   # Perform the original call
   skill_level_update_target
   # If C button was pressed
   if Input.trigger?(Input::C)
     # If unable to use because SP ran out
     use_flag = true if  @actor.skill_can_use?(@skill.id)
     # Perform if skill was usable
     if use_flag
       # Recalculate actor's SP
       @actor.sp -=  current_skill_diff
       # Refresh windows
       @target_window.refresh
       @status_window.refresh
     end
   return      
   end
 end
end



#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 alias skill_level_update update
 def update
   if SKILL_LV_UP
     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_level_pop and @skillup
       @skill_popup_window.contents_opacity -= 4
     end
   end
   # Perform the original call
   skill_level_update
 end  
 #--------------------------------------------------------------------------
 # * Make Skill Action Results
 #--------------------------------------------------------------------------
 alias skill_level_make_skill_action_result make_skill_action_result
 def make_skill_action_result
   # Obtain current effects prior to skill usage
   if @active_battler.is_a?(Game_Actor)
     # Get skill
     @skill = $data_skills[@active_battler.current_action.skill_id]      
     # Obtain skill cost difference
     current_skill_diff = @active_battler.skill_sp_cost[@skill.id]
     # Obtain battle animations based on skill per level
     @anime_1 = skill_animation_acquire(@skill, @active_battler.skill_level[@skill.id], 1)
     @anime_2 = skill_animation_acquire(@skill, @active_battler.skill_level[@skill.id], 2)
     # Obtain current skill name for help window
     @active_battler.skill_level[@skill.id] = 0 if @active_battler.skill_level[@skill.id] == nil
     name_level  = skill_name_acquire(SKILL_LEVEL_NAMES, @skill, @active_battler.skill_level[@skill.id])
     if name_level == nil
       name_level = @skill.name
       unless @active_battler.skill_level[@skill.id] == 0 && HIDE_1LEVEL
         case SKILL_SUFFIX_STYLE
         when 0: name_level = @skill.name + " ("+SKILL_SUFFIX+" " + (@active_battler.skill_level[@skill.id]+1).to_s + ")"
         when 1: name_level = @skill.name + " ["+SKILL_SUFFIX+" " + (@active_battler.skill_level[@skill.id]+1).to_s + "]"
         when 2: name_level = @skill.name + " "+SKILL_SUFFIX+" " + (@active_battler.skill_level[@skill.id]+1).to_s
         end
       end
     end      
   end
   # Perform the Original Call
   skill_level_make_skill_action_result
   # Apply reworked SP consumption and skill name
   if @active_battler.is_a?(Game_Actor)
     @active_battler.sp += @skill.sp_cost
     @active_battler.sp -= current_skill_diff
     @status_window.refresh
     @help_window.set_text(name_level, 1)
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (main phase step 2 : start action)
 #--------------------------------------------------------------------------
 alias skill_level_update_phase4_step2 update_phase4_step2
 def update_phase4_step2
   if SKILL_LV_UP
     @active_battler.skill_level_pop = false if @active_battler.is_a?(Game_Actor)
     @skillup = false
   end
   # Perform the original call
   skill_level_update_phase4_step2
 end    
 #--------------------------------------------------------------------------
 # * Frame Update (main phase step 3 : animation for action performer)
 #--------------------------------------------------------------------------
 alias skill_level_update_phase4_step3 update_phase4_step3
 def update_phase4_step3
   
   if SKILL_LV_UP
     if @active_battler.is_a?(Game_Actor) and @active_battler.skill_level_pop != false
       @skillup = true
       @skill_popup_window = Window_Skill_Popup.new(@active_battler)
       if SKILL_LEVEL_SE != nil
         Audio.se_play("Audio/SE/" + SKILL_LEVEL_SE)
         sleep(0.4)
       end
     end
   end    
   # Perform the original call
   skill_level_update_phase4_step3
   # Only if a skill is being performed
   return unless @active_battler.current_action.kind == 1
   # Only if an actor and changable animation
   if @active_battler.is_a?(Game_Actor) and SKILL_ANIMS
     # Reset animation to new animation
     @active_battler.animation_id = @anime_1
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (main phase step 4 : animation for target)
 #--------------------------------------------------------------------------
 alias skill_level_update_phase4_step4 update_phase4_step4
 def update_phase4_step4
   # Perform the original call
   skill_level_update_phase4_step4
   # Only if a skill is being performed
   return unless @active_battler.current_action.kind == 1
   # Only if an actor and changable animations
   if @active_battler.is_a?(Game_Actor) and SKILL_ANIMS
     # Animation for target
     for target in @target_battlers
       # Reset animation to new animation
       target.animation_id = @anime_2
     end
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (main phase step 5 : damage display)
 #--------------------------------------------------------------------------
 alias update_phase4_step5_skillup update_phase4_step5
 def update_phase4_step5
   if SKILL_LV_UP
     if @active_battler.is_a?(Game_Actor) and @skillup
       @skill_popup_window.dispose
       @active_battler.skill_level_pop = false
       @skillup = false
     end
   end
   # Perform the original call
   update_phase4_step5_skillup
 end  
 #----------------------- = name_array[skill.id] #--------------------------------------------------------------------------
---------------------------------------------------
 # * Skill Animation Acquisition System
 #     hash_array : hash value holding name data
 #     skill      : skill  
 #     level      : Current level of the skill
 #--------------------------------------------------------------------------
 def skill_animation_acquire(skill, level, index)
   hash_temp   = {}
   skill_temp  = []
   case index
   when 1: skill_value = @skill.animation1_id
   when 2: skill_value = @skill.animation2_id
   end
   hash_temp   = SKILL_LEVEL_ANIMS[skill.id]  if SKILL_LEVEL_ANIMS[skill.id] != nil
   unless hash_temp == nil
     skill_temp = hash_temp[1]          if hash_temp[1]         != nil
     skill_temp = hash_temp[level+1]    if hash_temp[level+1]   != nil
   end
   skill_value = skill_temp[index-1] if skill_temp[index-1] != nil
   return skill_value
 end
 #--------------------------------------------------------------------------
 # * Skill Name Acquisition System
 #     hash_array : hash value holding name data
 #     skill      : skill  
 #     level      : Current level of the skill
 #--------------------------------------------------------------------------
 def skill_name_acquire(name_array, skill, level)
   hash_temp = {}
   skill_value = nil
   hash_temp     = name_array[skill.id]  if name_array[skill.id] != nil
   unless hash_temp == nil
     skill_value = hash_temp[1]          if hash_temp[1]         != nil
     skill_value = hash_temp[level+1]    if hash_temp[level+1]   != nil
   end
   return skill_value
 end
end



but as of now, about the only thing i have added is bag skill, i got the skill leveling system ill add later, and see how it works, and the blacksmith system, but im worried about adding too much stuff at once, since i dont really know what im doing script-wise.

Use [code][/code] tags when posting code please. ~ gameus
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
Working on a game version of an idea me and my friends roleplay, and woulda made a D&D game out of, had we have been into D&D.

KK20

Yes, I know about the script and I've read through it already. It's how you want the script to work with your blue mage system. You didn't thoroughly explain conditions or go into much detail as to how it all works. I get the gist that using a specific skill and killing an enemy allows you to learn a skill or gain a stat increase. You're going to need to give me a full step-by-step example of how it all works.

Please do not fall for the "Lots of scripts = better game" mentality. It's also best to insert all the scripts you want to use together as to avoid incompatibility later on.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

leeman27534

EDIT: i also havent been able to constintently get the absorb hp and the absorb mp to work when on one skill, it usually does one, then another later, but apparently not at the same time, although, maybe one of them is hidden or something... yeah, seems like it is either both, or only one at a time, its not always both at once. made a 'harm' skill for testing, then kept draining high hp/sp, low atk enemies.

okay, take two: i dislike the idea of "more scripts, better game" i either really like whatever im trying to incorporate into the game, or i have it in there for a specific reasoning... like the crafting, that i wanted in there mostly to show a little more about their personalities of my three MCs, without any storyline at all, the girl is an alchemist, she spent years studying in a lab, knowing the ritualisms, the chemical combos, ectera.
the male that is related to her, feral, is a wannabe blacksmith, he wants to make a 'perfect blade', something that combines extreme beauty with an amazig blade. wants perfection from his work.
lerial, the MC, his products are nt nearly so nice, he is worried more about function over form, he could care less what it looks like, only if it is useful. he can take mundane items and amplify them far beyond what should be possible, at least if obeying the laws of reality... also to make items.

the psudeo-blue mage thing is lerial's whole gimmick, where he cannot become stronger by just doing, he cant gain muscle mass or memory by repeating the actions over and over, he can't learn by practicing over and over, w/o any input or stimulus, he would literally just sit there for the most part, at least in the beginning.
on the positive, his existence isnt dictated by his physical form, he has no need of organs, doesn't need eyes to see, ears to hear, neurons to send messages to his body, ectera. he doesn't need to eat, drink, sleep, to survive.

detail on lerial
Spoiler: ShowHide

but he can shapeshift into anything he's consumed, ripping the things apart down to the atomic level, and able to process all the bits, from the structure up to being able to shapeshift into any permutation that somebody's siblings coulda looked like, but its not like im likely going to be able to add that much detail to the game, so i didnt give it a second thought, and left it behind for a completely humanoid character, all the time, instead of transforming into various chimera. but the idea that, he doesnt have any knowledge of any skills or any abilities is something i do want, and that he has to get them from absorbing his enemies for their abilities.
i had an idea of having parts that you could equip in a menu, of differing creatures parts in different areas, and bonuses for combinations, that enhance abilities/give some, for instance, a smaller body and say mole hands could let you dig, or bird frame and arms could fly, an aquatic form for swimming, more powerful parts for moving stuff, smaller for getting into holes, ectera, or making custom builds, like having claws, sscaly skin, spiked tail, venom spitting, whatever,
but that idea was just a fantasy, and for something a lot more touchy than rpg maker xp...


how i wanted the blue mage script to work with the skill leveling is, and they dont actually have to work together if it can be accomplished another way, is kinda like the idea of skill leveling itself, you have to use the skill X times, then you get an upgrade to it, or in this case, stats/a skill... alright, ill try and simplify it even more, since i dont know what you're missing.

IF any 'eat' skill lays the final blow on an enemy, a point is given towards that enemy's counter, and when it reaches a certain level, something like 3/7/12/18/25 kills, you get a small boost in a stat or a skill level, depending on the enemy. like stealing, where the item is dependent on the enemy, if there is a stealing thing with steal-only items, except instead of stealing, you get a few stats/skill lvl. if said 'eat' skill does not land the final blow, then no point toward skill/stat is given. really similar to the skill leveling idea, skill succeeds, you get a point toward it going up, but if it fails, no point rewarded.
i dont honestly care if it works directly with the skill leveling system, as long as i can have both, i could have a conditional on them, like every eat skill had a huge common conditional on them, that would keep track of how many enemies of each type had been 'eaten', so that there wouldn't be a way to get infinite stats from continuously eating the same couple of monsters.
kinda want every skill and every enemy to have 5 levels on them, so that you can use that to improve up to 5X, but ill also have spell fusion, but i can do that with a event, all i gotta do is see if skill a is at level 5, and skill b is also at level 5, give that character skill c at level 1.
like one idea was a fire drive + quake = magma drive, and it gets rid of both the fire and the earth spell, but gives a much stronger fire + earth + water spell. most of the spell fusions will be just combining two skills, adding a third effect, and making that a new skill on their page, but maybe not erase EVERY older spell, since i might want like basic fire, ice, water, wind, earth to fuse with the other bases, make the spell stage twos, ectera.
but again, i can event that out, no script necessary.

i hope this is helpful, cause im having a hard time comprehending what you mean if it isnt, what i got from the last message was "how do i want my blue mage to work directly with the skill leveling" and in all honestly, it doesn't need to, as long as they can work simultaneously, since only lerial will be using the blue mage sys, and not the skill leveling, but the others will use the skill leveling, but not the blue mage.
i can exclude his spells, and his monster spells from actually being level-able, or maybe i can just do it by chara, and any of lerials skills have no way to level through usage.
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
Working on a game version of an idea me and my friends roleplay, and woulda made a D&D game out of, had we have been into D&D.

KK20

I'll see what I can do. Sounds like I need a module for configuration and modify Game_Actor/Battler.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

G_G

@leeman: Please, whenever you're posting a script or any sort of code, please use [code][/code] tags. It makes the post look nicer and reduces the chance of your script getting messed up when someone else copies it.

KK20

Spoiler: ShowHide
#=============================================================================
# BlueMageSystem                                                    Ver 1.0
# By KK20                                                           [11/22/12]
# Requested by leeman27534
#=============================================================================
module BlueMageSystem
#*******************************************************************************
#         B E G I N   C O N F I G U R A T I O N
#*******************************************************************************

  # Define what actors will use this system. Use actor's ID.
  ACTORS = [1]
 
  # Setup what skills can "eat"
  EATING_SKILLS = [81,82,83]
 
  def self.give_stats(enemy_id)
    case enemy_id
    #--------------------------------------------------------------------
    # Define what stats the enemy gives to the player upon absorbtion
    # level-up. The stats you can use are:
    # 'str', 'dex', 'int', 'agi', 'atk', 'pdef', 'mdef', 'eva', 'maxhp', 'maxsp'
    #--------------------------------------------------------------------
    when 1 then return [['str',10],['dex',10],['maxhp', 10],['maxsp',10],['atk',10]]
    when 2 then return [['pdef',5]]
    #when enemy_id then return [[stat, amount added to stat], ... ]
   
    #--------------------------------------------------------------------
    else
      return []
    end
  end
 
  def self.give_skills(enemy_id)
    case enemy_id
    #--------------------------------------------------------------------
    # Define what skill the enemy gives/levels up upon absorption level-up.
    # Number should be the skill's ID.
    #--------------------------------------------------------------------
    when 1 then return 20 # Greater Earth
    #when enemy_id then return skill_id
   
    #--------------------------------------------------------------------
    else
      return 0
    end
  end
 
  def self.exp_list(enemy_id)
    case enemy_id
    #--------------------------------------------------------------------
    # Define the number of times the player must absorb the enemy to level-up.
    # The maximum number of level-ups that can be earned is based on the size
    # of the array.
    #--------------------------------------------------------------------
    when 1 then return [2,5,10,20,40] # Maximum level is 5
    #when id then return [1,2,3,4,5, ... ]
    else
      #--------------------------------------------------------------------
      # This is the universal EXP list for all enemies undefined above
      #--------------------------------------------------------------------
      return [5,10,15,20,25]
    end
  end
end
#*******************************************************************************
#         E N D   O F   C O N F I G U R A T I O N
#*******************************************************************************

#=============================================================================
# Game_Actor
#=============================================================================
class Game_Actor < Game_Battler
  attr_reader :eat_counter
 
  alias apply_blue_mage_init initialize
  def initialize(actor_id)
    if BlueMageSystem::ACTORS.include?(actor_id)
      @eat_counter = []
    end
    @atk_plus = 0
    @pdef_plus = 0
    @mdef_plus = 0
    @eva_plus = 0   
    apply_blue_mage_init(actor_id)
  end
 
  def increase_stats(list)
    return if list.size == 0
    list.each{|stats|
      eval("self.#{stats[0]} += #{stats[1]}")
    }
  end

  def atk
    n = base_atk + @atk_plus
    for i in @states
      n *= $data_states[i].atk_rate / 100.0
    end
    return Integer(n)
  end

  def pdef
    n = base_pdef + @pdef_plus
    for i in @states
      n *= $data_states[i].pdef_rate / 100.0
    end
    return Integer(n)
  end

  def mdef
    n = base_mdef + @mdef_plus
    for i in @states
      n *= $data_states[i].mdef_rate / 100.0
    end
    return Integer(n)
  end

  def eva
    n = base_eva + @eva_plus
    for i in @states
      n += $data_states[i].eva
    end
    return n
  end
 
  def atk=(atk)
    @atk_plus += atk - self.atk
    @atk_plus = [[@atk_plus, -999].max, 999].min
  end
 
  def pdef=(pdef)
    @pdef_plus += pdef - self.pdef
    @pdef_plus = [[@pdef_plus, -999].max, 999].min
  end
 
  def mdef=(mdef)
    @mdef_plus += mdef - self.mdef
    @mdef_plus = [[@mdef_plus, -999].max, 999].min
  end
 
  def eva=(eva)
    @eva_plus += eva - self.eva
    @eva_plus = [[@eva_plus, -999].max, 999].min
  end
end
#=============================================================================
# Scene_Battle
#=============================================================================
class Scene_Battle
  alias apply_blue_mage_skills make_skill_action_result
  def make_skill_action_result
    # Alias method
    apply_blue_mage_skills
    # If the battler is a blue mage actor using an "eating" skill
    if @active_battler.is_a?(Game_Actor) and
        BlueMageSystem::ACTORS.include?(@active_battler.id) and
        BlueMageSystem::EATING_SKILLS.include?(@skill.id)
      # Create a dummy interpreter to use DerVVulfman's Skill Leveling Script
      dummy_intrp = Interpreter.new
      # Loop through each enemy battler
      @target_battlers.each{|battler|
        next if battler.is_a?(Game_Actor)
        # Find the EXP list for this enemy
        exp_list = BlueMageSystem.exp_list(battler.id).sort
        # Initialize the value of the actor's EXP list if it doesn't exist
        @active_battler.eat_counter[battler.id] = 0 if @active_battler.eat_counter[battler.id].nil?
        # If the enemy died from the skill and potential to "level-up"
        if battler.dead? and @active_battler.eat_counter[battler.id] < exp_list[exp_list.size-1]
          @active_battler.eat_counter[battler.id] += 1
          # If level up
          if exp_list.include?(@active_battler.eat_counter[battler.id])
            # Increase stats
            @active_battler.increase_stats(BlueMageSystem.give_stats(battler.id))
            # If the actor does not know the skill, learn it
            # Otherwise, level the skill up
            skill_id = BlueMageSystem.give_skills(battler.id)
            if @active_battler.skill_learn?(skill_id)
              dummy_intrp.skill_level_up(@active_battler.id, skill_id)
            else
              @active_battler.learn_skill(skill_id)
            end
          end
        end
      }
    end
  end
end

I wrote this while testing the Skill Leveling script at the same time. Looked fine to me.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

leeman27534

ah, thank you soo much, but can you give me explicit instructions as to what/where to change for different things, and what to mod for each enemy, so say enemy 1 on the list gives 5 atk each time, enemy 2 gives 5 def each time, ectera?
i have no idea at scripting, so i might need walked through it, some things i can look at and go, "well, this makes sense to me" but then i get like three, four patterns of that, like earlier. those examples i gave, one happened to be right, but i had no idea which, i thought a new whole area for each one was necessary...
also, can i set it up so certain enemies only have one 'eat' until a reward, since i kinda want to make a boss's eat stronger than a normal enemy, and you get unique skills from it, but on the offset, you wouldn't get any exp or any item from that boss,so its like something i wanted the players to choose, either some ability or some item.
i'll probably go through, and make usually one seem better than another, like any unique item will probably have a weaker skill, or a skill gainable later, and the unique skills will have a good healing item, or a weapon gettable later, some setup so perfectionists can get everything if they really want it, or maybe just a boss rush at some point with upgraded bosses...
i always hated in a game where you had two choices of epic, but only got one, so i'd like to avoid that.
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
Working on a game version of an idea me and my friends roleplay, and woulda made a D&D game out of, had we have been into D&D.

KK20

Forgot about the "if the enemy is eaten, no exp or items are rewarded" part. Here's the rewrite:
Spoiler: ShowHide
#=============================================================================
# BlueMageSystem                                                    Ver 1.0
# By KK20                                                           [11/22/12]
# Requested by leeman27534
#=============================================================================
module BlueMageSystem
#*******************************************************************************
#         B E G I N   C O N F I G U R A T I O N
#*******************************************************************************

  # Define what actors will use this system. Use actor's ID.
  ACTORS = [1]
 
  # Setup what skills can "eat"
  EATING_SKILLS = [81,82,83]
 
  def self.give_stats(enemy_id)
    case enemy_id
    #--------------------------------------------------------------------
    # Define what stats the enemy gives to the player upon absorbtion
    # level-up. The stats you can use are:
    # 'str', 'dex', 'int', 'agi', 'atk', 'pdef', 'mdef', 'eva', 'maxhp', 'maxsp'
    #--------------------------------------------------------------------
    when 1 then return [['str',10],['dex',10],['maxhp', 10],['maxsp',10],['atk',10]]
    when 2 then return [['pdef',5]]
    #when enemy_id then return [[stat, amount added to stat], ... ]
   
    #--------------------------------------------------------------------
    else
      return []
    end
  end
 
  def self.give_skills(enemy_id)
    case enemy_id
    #--------------------------------------------------------------------
    # Define what skill the enemy gives/levels up upon absorption level-up.
    # Number should be the skill's ID.
    #--------------------------------------------------------------------
    when 1 then return 20 # Greater Earth
    #when enemy_id then return skill_id
   
    #--------------------------------------------------------------------
    else
      return 0
    end
  end
 
  def self.exp_list(enemy_id)
    case enemy_id
    #--------------------------------------------------------------------
    # Define the number of times the player must absorb the enemy to level-up.
    # The maximum number of level-ups that can be earned is based on the size
    # of the array.
    #--------------------------------------------------------------------
    when 1 then return [2,5,10,20,40] # Maximum level is 5
    #when id then return [1,2,3,4,5, ... ]
    else
      #--------------------------------------------------------------------
      # This is the universal EXP list for all enemies undefined above
      #--------------------------------------------------------------------
      return [5,10,15,20,25]
    end
  end
end
#*******************************************************************************
#         E N D   O F   C O N F I G U R A T I O N
#*******************************************************************************

#=============================================================================
# Game_Actor
#=============================================================================
class Game_Actor < Game_Battler
  attr_reader :eat_counter
 
  alias apply_blue_mage_init initialize
  def initialize(actor_id)
    if BlueMageSystem::ACTORS.include?(actor_id)
      @eat_counter = []
    end
    @atk_plus = 0
    @pdef_plus = 0
    @mdef_plus = 0
    @eva_plus = 0   
    apply_blue_mage_init(actor_id)
  end
 
  def increase_stats(list)
    return if list.size == 0
    list.each{|stats|
      eval("self.#{stats[0]} += #{stats[1]}")
    }
  end

  def atk
    n = base_atk + @atk_plus
    for i in @states
      n *= $data_states[i].atk_rate / 100.0
    end
    return Integer(n)
  end

  def pdef
    n = base_pdef + @pdef_plus
    for i in @states
      n *= $data_states[i].pdef_rate / 100.0
    end
    return Integer(n)
  end

  def mdef
    n = base_mdef + @mdef_plus
    for i in @states
      n *= $data_states[i].mdef_rate / 100.0
    end
    return Integer(n)
  end

  def eva
    n = base_eva + @eva_plus
    for i in @states
      n += $data_states[i].eva
    end
    return n
  end
 
  def atk=(atk)
    @atk_plus += atk - self.atk
    @atk_plus = [[@atk_plus, -999].max, 999].min
  end
 
  def pdef=(pdef)
    @pdef_plus += pdef - self.pdef
    @pdef_plus = [[@pdef_plus, -999].max, 999].min
  end
 
  def mdef=(mdef)
    @mdef_plus += mdef - self.mdef
    @mdef_plus = [[@mdef_plus, -999].max, 999].min
  end
 
  def eva=(eva)
    @eva_plus += eva - self.eva
    @eva_plus = [[@eva_plus, -999].max, 999].min
  end
end

class Game_Troop
  attr_accessor :enemies
end

#=============================================================================
# Scene_Battle
#=============================================================================
class Scene_Battle
  alias apply_blue_mage_skills make_skill_action_result
  def make_skill_action_result
    # Alias method
    apply_blue_mage_skills
    # If the battler is a blue mage actor using an "eating" skill
    if @active_battler.is_a?(Game_Actor) and
        BlueMageSystem::ACTORS.include?(@active_battler.id) and
        BlueMageSystem::EATING_SKILLS.include?(@skill.id)
      # Create a dummy interpreter to use DerVVulfman's Skill Leveling Script
      dummy_intrp = Interpreter.new
      # Loop through each enemy battler
      @target_battlers.each{|battler|
        next if battler.is_a?(Game_Actor)
        # Find the EXP list for this enemy
        exp_list = BlueMageSystem.exp_list(battler.id).sort
        # Initialize the value of the actor's EXP list if it doesn't exist
        @active_battler.eat_counter[battler.id] = 0 if @active_battler.eat_counter[battler.id].nil?
        # If the enemy died from the skill and potential to "level-up"
        if battler.dead? and @active_battler.eat_counter[battler.id] < exp_list[exp_list.size-1]
          # Remove battler from the troop to prevent EXP/Item rewards
          $game_troop.enemies.delete(battler)
          @active_battler.eat_counter[battler.id] += 1
          # If level up
          if exp_list.include?(@active_battler.eat_counter[battler.id])
            # Increase stats
            @active_battler.increase_stats(BlueMageSystem.give_stats(battler.id))
            # If the actor does not know the skill, learn it
            # Otherwise, level the skill up
            skill_id = BlueMageSystem.give_skills(battler.id)
            if @active_battler.skill_learn?(skill_id)
              dummy_intrp.skill_level_up(@active_battler.id, skill_id)
            else
              @active_battler.learn_skill(skill_id)
            end
          end
        end
      }
    end
  end
end

I thought I did a pretty good job with the instructions (pretty standard for most scripts), but I guess I can give examples.

Assuming this is a new project in RMXP, Ghost is given an ID of 1 since it is the first monster in the database. If you want it so that when you eat this Ghost you are rewarded 5 STR, then do this under give_stats:
when 1 then return [['str',5]]
1 being the Ghost's ID, 'str' being the stat you want modified (and yes, it needs the quotes), and 5 being how much the stat increases. I already provided an example of how to do multiple stats (and single stats) in the script.

So if you want Basilisk (ID 2) to give 5 Weapon Defense, that would be
when 2 then return [['pdef',5]]


As for rewarding after one eat, that would be in exp_list. So if your boss monster had an ID of 20, it would look like
when 20 then return [1,#,#,#,#]

The first number should be a 1. The other 4 numbers (marked with # above) can be anything you want them to be.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

leeman27534

i just wanna be really sure, since i got major depression, so some times, i just dont do anything for extended peroids of time, but when im in a mood, im a fiend. i've sat down and done 20+ hours of work when i was riled up easily, and just crash later.
so i would much rather know for certain how it works, cause i might just say 'forget it' and leave it alone, and work on something else. i say 'work', but i mean anything from writing my story, read a book, play a video game, make geometrical designs i like on paint, surf wikipedia or encyclopedia dramatica, whatever floats my boat at the moment. soon, i'll add 'romp through the snow' ^.^
thanks again so much about making a script for me out of scratch, i appreciate it so much, its not a huge one, but you didnt have to do it, so great thanks to you, kk20!
http://forum.chaos-project.com/index.php/topic,12571.msg171698.html#msg171698
Working on a game version of an idea me and my friends roleplay, and woulda made a D&D game out of, had we have been into D&D.