Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
- # Passive Augments by Xelias
- # Version: 1.01
- # Type: Skill Enhacement
- # Date v1.01: 18.12.2009
- #
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
- #
- # This work is protected by the following license:
- # #----------------------------------------------------------------------------
- # #
- # # Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
- # # ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
- # #
- # # You are free:
- # #
- # # to Share - to copy, distribute and transmit the work
- # # to Remix - to adapt the work
- # #
- # # Under the following conditions:
- # #
- # # Attribution. You must attribute the work in the manner specified by the
- # # author or licensor (but not in any way that suggests that they endorse you
- # # or your use of the work).
- # #
- # # Noncommercial. You may not use this work for commercial purposes.
- # #
- # # Share alike. If you alter, transform, or build upon this work, you may
- # # distribute the resulting work only under the same or similar license to
- # # this one.
- # #
- # # - For any reuse or distribution, you must make clear to others the license
- # # terms of this work. The best way to do this is with a link to this web
- # # page.
- # #
- # # - Any of the above conditions can be waived if you get permission from the
- # # copyright holder.
- # #
- # # - Nothing in this license impairs or restricts the author's moral rights.
- # #
- # #----------------------------------------------------------------------------
- #
- # Version history
- #
- # 1.01
- #
- # *Added new Passive Skills (From RESIST_STATES to GEOMANCY)
- # *Fixed a bug
- #
- # #----------------------------------------------------------------------------
- # This script creates "Passive Skills". The "Passive Skills" you list in
- # PASSIVE_SKILLS_IDS = [] are displayed in a separate menu.
- # They are simple skills you can give an Icon, a name, a description...
- # You can change the menu's name in PASSIVE_WORD = "Augments"
- # Replace "Augments" by whatever name you want.
- #
- # Passive Skills only work on actors !
- #
- # Passive skills effects are listed here :
- #
- # GUARD_PLUS will decrease even more the damage taken while defending.
- # REFLECT_GUARD will counterattack a physical attack while defending.
- # MAGIC_REFLECT will counterattack a magical attack while defending.
- # ARTFUL_DODGER will allow a certain percentage chance to dodge an attack while defending.
- # MP_SHIELD will allow damage to be inflicted on SP instead of HP until you run out of SP.
- # MARTYR allows the character to gain SP when taking damage
- # INQUISITOR allows the character to gain SP when dealing physical damage.
- # WARMAGE allows the character to gain SP when dealing damage with spells.
- # BLOOD_PRICE allows the character to pay HP instead of SP. HP cost is SP cost*5
- # DEMI_MP allows the character to cast spells for half the SP cost
- # TURBO_MP doubles the SP cost as well as the power of the skills.
- # SPELLBREAKER increases the damage dealt by spells when you have low HP
- # ADRENALINE increases the damage dealt by attacks when you have low HP
- # LAST_STAND decreases the damage taken when you have low HP
- # CHARGED_ATTACKS increases the power of physical attacks for 6 SP a hit until you run out of SP.
- # BRAWLER allows you to inflict more damage when no weapons are equipped. Note that
- # thanks to this script, bare-handed attacks are available. Just modify the BARE_ANIMATION_SELF_ID
- # and BARE_ANIMATION_ID to modify the animations that play on the attacker and on the enemy
- # while attacking without weapons, respectively.
- # CRITICAL_BOOST increases the critical hit ratio
- # VITAL_POINT increases the critical hit damage <-- needs to be redone
- # FOCUS slightly increases the damage dealt by attacks when at full HP
- # SERENITY slightly increases the damage dealt by spells when at full HP
- # ONCE_MORE allows the actor to survive all hits when his HP are higher than 1 : then his
- # HP will become 1, and next strike will be deadly. Think about Kingdom Hearts for this one.
- # LEARNING allows the actor to learn blue magic. This blue magic is set in BLUE_SKILLS_IDS = []
- # HEALER increases the potency of healing spells and objects on the actor.
- # STATE_RESIST halves the chances the actor will be affected by a status effect
- # BLOOD_SWORD absorbs 1/4 of damage done by physical attacks as HP for the actor.
- # ELEMENTALISM reduces an enemy's resistance to elemental spells
- # GEOMANCY increases the user's resistance to elemental spells.
- # SLAYER increases the user's Light spell damage against Evil foes (specified with EVIL_ID)
- #
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
- # Passive Skills
- GUARD_PLUS_ID = 401
- REFLECT_GUARD_ID = 0
- MAGIC_REFLECT_ID = 0
- ARTFUL_DODGER_ID = 0
- MP_SHIELD_ID = 402
- MARTYR_ID = 420
- INQUISITOR_ID = 419
- WARMAGE_ID = 418
- BLOOD_PRICE_ID = 403
- DEMI_MP_ID = 405
- TURBO_MP_ID = 406
- SPELLBREAKER_ID = 407
- ADRENALINE_ID = 408
- LAST_STAND_ID = 409
- CHARGED_ATTACKS_ID = 410
- BRAWLER_ID = 400
- CRITICAL_BOOST_ID = 411
- VITAL_POINT_ID = 421
- FOCUS_ID = 0
- SERENITY_ID = 0
- ONCE_MORE_ID = 412
- LEARNING_ID = 0
- HEALER_ID = 413
- STATE_RESIST_ID = 414
- BLOOD_SWORD_ID = 404
- ELEMENTALISM_ID = 415
- GEOMANCY_ID = 416
- SLAYER_ID = 417
- ICEHAND_ID = 422
- #BLUE_SKILLS_IDS = []
- BLUE_SKILLS = (2..114).to_a
- BARE_ANIMATION_SELF_ID = 0
- BARE_ANIMATION_ID = 4
- EVIL_IDS = [4,10,14,15,16,17,20,21,36,37,38,39,41,49,54,55,61,65,78,79,504,656,999]
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- #
- # Passive skills can also be used to equip weapons and armors, and to be able to use skills.
- # Configure it like that :
- #
- # When [weapon/armor id] then return [passive skill id]
- # When [skill id] then return [passive skill id]
- #
- # Note that passive skills overwrite class restrictions : if a warrior gets a "Equip Staffs"
- # passive ability, he will be able to equip staffs.
- #
- # On a sad note, all weapons/armors need to be set to a skill in order to be equipped.
- # If you put "nil" or "0", the game will crash.
- # So set a skill for each different weapon or armor. Default is 100
- # The same applies for skills. Skills won't crash, but won't be able to be used. Which is bad.
- # However if you put "when skill X then return skill X", the skill will be usable if you have it, which
- # means you won't have to learn another passive skill.
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
- # Alternative Attack Algorithms by Xelias
- # Version: 1.00
- # Type: Battle Add-ON
- # Date v1.00: 7.11.2009
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
- #
- # How to use this script :
- # This allows your weapons to follow different damage algorithms. Before that, you
- # MUST place your weapons following a normal algorithm in the
- # NORMAL_WEAPONS_IDS, or else... It wouldn't be good for your game.
- # Also place all weapons ID except SP damaging and absorbing ones, into the
- # "ALL_WEAPONS_IDS", because if you don't, a nasty bug will prevent you from
- # dealing damage with normal attack. Cool, huh ?
- #
- # ATMA_WEAPON_IDS = [X,X...] : A weapon with an ID equal to X will inflict
- # more damage depending on the user’s HP. If HP are full, attack power is doubled.
- # If HP are at minimum, attack power is normal. If HP are equal to half, attack power
- # is equal to 1,5 of the normal Attack power, and so on...
- # VALIANT_KNIFE_IDS = [X, X...] : The opposite effect of Atma Weapon.
- # If HP are at minimum, attack power is doubled, and so on...
- # LIMITED_MOON_IDS = [X, X...] : Follows the same formula than Atma Weapon
- # but works with SP
- # CONFORMER_IDS = [X, X...] : Deals damage based on user’s Level.
- # At Level 1, attack power is normal. At Level 99, attack power is doubled. You get
- # the idea
- # MASAMUNE_IDS = [X, X...] : Deals more damage the weaker the enemy is
- # For an enemy with 100% HP, attack power is normal. For an enemy with 1 HP,
- # attack power is doubled (which is pretty useless). For an enemy with half HP,
- # attack power is equal to 1,5 of the normal attack power, and so on...
- # PROJECTILE_IDS = [X, X...] : Ignores the opponent's defense in the damage
- # calculation. However, the Attack power is halved, preventing an attack to inflict
- # max damage at an opponent with max defense. Otherwise, it wouldn't be fair.
- # BOW_IDS = [X, X...] : inflicts damage based on user's Dexterity instead of Strength
- # DAGGER_IDS = [X, X...] : inflicts damage based on user's Agility instead of Strength
- # MIND_BLASTER_IDS = [X, X...] : Damage is inflicted to SP. Damage
- # relies also on the opponent's Magic Defense and your Intelligence
- # BLOOD_SWORD_W_IDS = [X, X...] & PERCENT_DRAINED = X :
- # some damage is absorbed from the attack. How many? PERCENT_DRAINED %
- # GUARD_BREAKER_IDS = [X, X...] : Damage ignores if enemy is defending.
- # As simple as that.
- # GENJI_WEAPON_IDS = [X, X...] : Critical Hit Ratio is doubled.
- # KIKU_ICHIMONJI_IDS = [X, X...] : Critical Hit power is doubled.
- # ROBOT_WEAPON_IDS = [X, X...] : Weapons that inflicts damage based on a combination of str, dex and agl.
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
- # Alternate Attack Algorithms
- OTHER_WEAPONS_IDS = [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49,
- 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
- 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
- 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 304, 306, 307, 309, 310, 311, 313, 314, 315, 316, 317, 318, 319, 320, 335, 336, 337]
- ALL_WEAPONS_IDS = []
- ATMA_WEAPON_IDS = [0]
- VALIANT_KNIFE_IDS = [0]
- LIMITED_MOON_IDS = [0]
- CONFORMER_IDS = [0]
- MASAMUNE_IDS = [0]
- PROJECTILE_IDS = [0]
- BOW_IDS = [200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 301, 302, 303, 313, 321]
- DAGGER_IDS = [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72 ,73 ,74, 75, 321, 322]
- MIND_BLASTER_IDS = [0]
- BLOOD_SWORD_W_IDS = [0]
- PERCENT_DRAINED = 10
- GUARD_BREAKER_IDS = [0]
- GENJI_WEAPON_IDS = [0]
- KIKU_ICHIMONJI_IDS = [0]
- ROBOT_WEAPON_IDS = [323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334]
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- #==============================================================================
- # % based weapons (& skills) states rates
- # By gerkrt/gerrtunk
- # Version: 1.0
- # Date: 23/12/2010
- #
- # Modified By Midnight Moon to support skills.
- # Date: 08/08/2011
- #==============================================================================
- =begin
- --------Introduction-----------
- Normally you can add any combination of states for weapons and skills,
- but you dont have any other control. With this you can use any state based on %.
- You can ask for bugs, suggerences, compatibilitzations and any other things.
- The % means the posibilities that have the state to impact the enemy. After that
- impact, the traditional formula(versus random+abdce) is applied. It works like
- old rpgmakers state affliction.
- weapon_id=>[[state_id1, possibility], [state_id2, possibility]]
- Weap_state_rates = {3=>[[2, 100], [4,100]], 11=>[[2, 100], [4,100]] }
- You can add any number of states for weapon, and weapons, just add a , before these.
- and respect the {}.
- ---------Syntax notes--------------
- You can divide long lines like this:
- Weap_state_rates = {3=>[[2, 100], [4,100]],
- 11=>[[2, 100], [4,100]] ,
- 15=>[[2, 100], [4,100]] }
- See that the new line have to be after a , and that the final one dont put a
- final ,.
- =end
- module Wep
- # Set Weapon_state_rates to nil if you want to deactivate
- # % based weapons states rates
- Weapon_state_rates = {}
- # Set Skill_state_rates to nil if you want to deactivate
- # % based skills states rates
- # Skill_state_rates = {
- # SKILL_ID => [ [ADD_STATE_1, PERCENT_CHANCE_SUCCESS, [REMOVE_STATE_1,
- # REMOVE_STATE_2, ... ]], [ADD_STATE_2, PERCENT_CHANCE_SUCCESS, [REMOVE_STATE_1,
- # REMOVE_STATE_2, ... ]], ... ]
- # The removed states occur if the PERCENT_CHANCE_SUCCESS is successful--there is
- # no separate percent chance of removal. You can omit them entirely actually.
- # [ [ADD_STATE_1, PERCENT_CHANCE_SUCCESS], [ADD_STATE_2, PERCENT_CHANCE_SUCCESS], ... ]
- # If you want to just remove states and not add any, set the ADD_STATE value to 0.
- Skill_state_rates = {
- 1=>[[1, 100,[]]],
- 11=>[[11, 10,[12, 13]]],
- 12=>[[11, 20,[12, 13]]],
- 13=>[[11, 30,[12, 13]]],
- 14=>[[2, 10,[]]],
- 15=>[[2, 20,[]]],
- 16=>[[9, 30,[]]],
- 17=>[[12, 10,[11, 13]]],
- 18=>[[12, 20,[11, 13]]],
- 19=>[[12, 30,[11, 13]]],
- 21=>[[6, 20,[]]],
- 22=>[[6, 40,[]]],
- 23=>[[13, 10,[]]],
- 25=>[[13, 30,[]]],
- 33=>[[6, 20,[]]],
- 34=>[[4, 10,[]], [5, 10,[]], [6, 10,[]]],
- 38=>[[4, 10,[]]],
- 39=>[[4, 20,[]]],
- 40=>[[4, 30,[]]],
- 44=>[[3, 30,[]]],
- 45=>[[3, 40,[]]],
- 46=>[[3, 50,[]]],
- 49=>[[2, 40,[]]],
- 56=>[[11, 20,[12, 13]]],
- 57=>[[11, 40,[12, 13]]],
- 58=>[[1, 50,[]]],
- 145=>[[2, 20,[]]],
- 149=>[[4, 30,[]]],
- 150=>[[5, 30,[]]],
- 151=>[[6, 30,[]]],
- 152=>[[9, 10,[]]],
- 153=>[[9, 20,[]]],
- 154=>[[9, 30,[]]],
- 164=>[[9, 50,[]]],
- 166=>[[1, 50,[]]],
- 180=>[[2, 20,[]]],
- 188=>[[11, 10,[12, 13]]],
- 189=>[[11, 20,[12, 13]]],
- 190=>[[11, 30,[12, 13]]],
- 191=>[[12, 10,[11, 13]]],
- 192=>[[12, 20,[11, 13]]],
- 193=>[[12, 30,[11, 13]]],
- 197=>[[1, 50,[]]],
- 200=>[[2, 20,[]]],
- 203=>[[11, 10,[12, 13]]],
- 204=>[[11, 20,[12, 13]]],
- 205=>[[11, 30,[12, 13]]],
- 206=>[[12, 10,[11, 13]]],
- 207=>[[12, 20,[11, 13]]],
- 208=>[[12, 30,[11, 13]]],
- 209=>[[9, 10,[]]],
- 210=>[[9, 20,[]]],
- 211=>[[9, 30,[]]],
- 216=>[[9, 10,[]]],
- 217=>[[11, 10,[12, 13]]],
- 218=>[[12, 10,[11, 13]]],
- 220=>[[2, 20,[]]],
- 223=>[[9, 10,[]]],
- 224=>[[9, 20,[]]],
- 225=>[[9, 30,[]]],
- 226=>[[11, 10,[12, 13]]],
- 227=>[[11, 20,[12, 13]]],
- 228=>[[11, 30,[12, 13]]],
- 229=>[[12, 10,[11, 13]]],
- 230=>[[12, 20,[11, 13]]],
- 231=>[[12, 30,[11, 13]]],
- 240=>[[19, 40,[27]]],
- 241=>[[20, 40,[26]]],
- 260=>[[3, 40,[]]],
- 265=>[[4, 20,[]]],
- 266=>[[4, 40,[]]],
- 267=>[[4, 60,[]]],
- 268=>[[5, 20,[]]],
- 269=>[[5, 40,[]]],
- 270=>[[5, 60,[]]],
- 271=>[[6, 20,[]]],
- 272=>[[6, 40,[]]],
- 273=>[[6, 60,[]]],
- 277=>[[22, 50,[]]],
- 278=>[[1, 50,[]]],
- 281=>[[5, 10,[]]],
- 282=>[[5, 20,[]]],
- 283=>[[6, 10,[]]],
- 284=>[[6, 20,[]]],
- 286=>[[11, 10,[12, 13]]],
- 287=>[[11, 20,[12, 13]]],
- 288=>[[11, 30,[12, 13]]],
- 289=>[[12, 10,[11, 13]]],
- 290=>[[12, 40,[11, 13]]],
- 291=>[[12, 30,[11, 13]]],
- 292=>[[13, 10,[]]],
- 293=>[[13, 20,[]]],
- 294=>[[13, 30,[]]],
- 298=>[[1, 50,[]]],
- 299=>[[12, 50,[11, 13]]],
- 515=>[[12, 10,[11, 13]]],
- 516=>[[2, 100,[]]],
- 517=>[[21, 100,[24, 25]]],
- 518=>[[12, 30,[11, 13]]],
- 521=>[[9, 30,[]],[12, 30,[]]],
- 522=>[[11, 30,[]],[12, 30,[]]],
- 523=>[[12, 30,[11, 13]]],
- 524=>[[1, 100,[]]],
- 525=>[[12, 50,[11, 13]]],
- 526=>[[12, 50,[11, 13]]],
- 571=>[[2, 20,[]]],
- 572=>[[2, 20,[]]],
- 573=>[[2, 20,[]]],
- 574=>[[1, 50,[]]],
- 576=>[[9, 30,[]]],
- 605=>[[3, 30,[]]],
- 606=>[[2, 20,[]]],
- 615=>[[2, 20,[]]],
- 619=>[[3, 20,[]]],
- 620=>[[3, 30,[]]],
- 624=>[[2, 20,[]]],
- 647=>[[1, 50,[]]],
- 648=>[[1, 30,[]]],
- 650=>[[1, 85,[]]],
- 651=>[[11, 10,[12, 13]]],
- 652=>[[11, 20,[12, 13]]],
- 653=>[[11, 30,[12, 13]]],
- 654=>[[2, 10,[]]],
- 655=>[[2, 20,[]]],
- 656=>[[9, 30,[]]],
- 657=>[[12, 10,[11, 13]]],
- 658=>[[12, 20,[11, 13]]],
- 659=>[[12, 30,[11, 13]]],
- 661=>[[6, 20,[]]],
- 662=>[[6, 40,[]]],
- 663=>[[13, 10,[]]],
- 665=>[[13, 30,[]]],
- 673=>[[6, 20,[]]],
- 674=>[[4, 10,[]], [5, 10,[]], [6, 10,[]]],
- 678=>[[4, 10,[]]],
- 679=>[[4, 20,[]]],
- 680=>[[4, 30,[]]],
- 684=>[[3, 30,[]]],
- 685=>[[3, 40,[]]],
- 686=>[[3, 50,[]]],
- 689=>[[2, 40,[]]],
- 696=>[[11, 20,[12, 13]]],
- 697=>[[11, 40,[12, 13]]],
- 698=>[[1, 50,[]]],
- 704=>[[14, 20,[]]],
- 704=>[[14, 20,[]]],
- 712=>[[2, 30,[]]],
- 721=>[[12, 10,[11, 13]]],
- 722=>[[2, 100,[]]],
- 723=>[[21, 100,[24, 25]]],
- 724=>[[12, 30,[11, 13]]],
- 726=>[[1, 80,[]]],
- 727=>[[11, 20,[12, 13]]],
- 728=>[[9, 100,[]]],
- 729=>[[11, 10,[11, 13]]],
- 730=>[[11, 30,[11, 13]]],
- 733=>[[13, 20,[]]],
- 735=>[[22, 90,[28]]],
- 738=>[[7, 100,[]]],
- 739=>[[2, 50,[]]],
- 740=>[[6, 30,[]]],
- 741=>[[2, 10,[]]],
- 745=>[[9, 10,[]]],
- 746=>[[11, 10,[12, 13]]],
- 747=>[[12, 10,[11, 13]]],
- 751=>[[2, 20,[]]],
- 758=>[[11, 10,[12, 13]]],
- 759=>[[11, 20,[12, 13]]],
- 760=>[[11, 30,[12, 13]]],
- 761=>[[12, 10,[11, 13]]],
- 762=>[[12, 20,[11, 13]]],
- 763=>[[12, 30,[11, 13]]],
- 767=>[[1, 50,[]]],
- }
- end
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- class Game_Battler
- def states_plus(plus_state_set)
- # 有効フラグをクリア
- effective = false
- # ループ (付加するステート)
- for i in plus_state_set
- # このステートが防御されていない場合
- unless self.state_guard?(i)
- # このステートがフルでなければ有効フラグをセット
- effective |= self.state_full?(i) == false
- # ステートが [抵抗しない] の場合
- if $data_states[i].nonresistance
- # ステート変化フラグをセット
- @state_changed = true
- # ステートを付加
- add_state(i)
- # このステートがフルではない場合
- elsif self.state_full?(i) == false
- # ステート有効度を確率に変換し、乱数と比
- if self.is_a?(Game_Actor) && self.skill_learn?(STATE_RESIST_ID)
- if rand(100) < [0,50,40,30,20,10,0][self.state_ranks[i]]
- # ステート変化フラグをセット
- @state_changed = true
- # ステートを付加
- add_state(i)
- end
- end
- unless self.is_a?(Game_Actor) && self.skill_learn?(STATE_RESIST_ID)
- if rand(100) < [0,100,80,60,40,20,0][self.state_ranks[i]]
- @state_changed = true
- # ステートを付加
- add_state(i)
- end
- end
- end
- end
- end
- # メソッド終了
- return effective
- end
- #==============================================================================
- # ** Game_Battler (part 3)
- #------------------------------------------------------------------------------
- # This class deals with battlers. It's used as a superclass for the Game_Actor
- # and Game_Enemy classes.
- #==============================================================================
- #--------------------------------------------------------------------------
- # * Applying Normal Attack Effects
- # attacker : battler
- #--------------------------------------------------------------------------
- def attack_effect(attacker)
- # Clear critical flag
- self.critical = false
- # First hit detection
- hit_result = (rand(100) < attacker.hit)
- # If hit occurs
- if hit_result == true
- # Calculate basic damge
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- if attacker.is_a?(Game_Actor)
- if ATMA_WEAPON_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2,0].max
- atk2 = atk * (attacker.str) / 10
- self.damage = atk2 + ((atk2*((attacker.hp*100)/attacker.maxhp))/100)
- end
- if VALIANT_KNIFE_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2,0].max
- atk2 = atk * (attacker.str) / 10
- minushp = attacker.maxhp - attacker.hp
- self.damage = atk2 + ((atk2*((minushp*100)/attacker.maxhp))/100)
- end
- if LIMITED_MOON_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2,0].max
- atk2 = atk * (attacker.str) / 10
- self.damage = atk2 + ((atk2*((attacker.sp*100)/attacker.maxsp))/100)
- end
- if CONFORMER_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2,0].max
- atk2 = atk * (attacker.str) / 10
- self.damage = atk2 + (atk2*(((attacker.level*100) / 99)/100))
- end
- if MASAMUNE_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2,0].max
- atk2 = atk * (attacker.str) / 10
- minushp = self.maxhp - self.hp
- self.damage = atk2 + ((atk2*((minushp*100)/self.maxhp))/100)
- end
- if PROJECTILE_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk,0].max
- self.damage = atk * (attacker.str) / 10
- end
- if BOW_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.dex) / 10
- end
- if DAGGER_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(452)
- self.damage = atk * 2 * (attacker.agi) / 10
- else
- self.damage = atk * (attacker.agi) / 10
- end
- end
- if BLOOD_SWORD_W_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- if MIND_BLASTER_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - ((self.pdef+self.mdef)) / 4, 0].max
- self.damage = atk * (((attacker.str + attacker.int)/2)) / 10
- end
- if GUARD_BREAKER_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- if GENJI_WEAPON_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- if KIKU_ICHIMONJI_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- if ROBOT_WEAPON_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (((attacker.str) / 3) + ((attacker.dex) / 3) + ((attacker.agi) / 3)) / 10
- end
- if OTHER_WEAPONS_IDS.include?(attacker.weapon_id)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- if attacker.is_a?(Game_Actor) && attacker.atk == 0
- atk = [attacker.str - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- if attacker.skill_learn?(400)
- atk = [10 + attacker.str/1 - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- if attacker.is_a?(Game_Enemy)
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (attacker.str) / 10
- end
- end
- # Element correction
- self.damage *= elements_correct(attacker.element_set)
- self.damage /= 100
- # If damage value is strictly positive
- if self.damage > 0
- # Critical correction
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(411)
- if rand(100) < 10 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- if attacker.is_a?(Game_Actor)
- if GENJI_WEAPON_IDS.include?(attacker.weapon_id)
- if rand(100) < 8 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- end
- if KIKU_ICHIMONJI_IDS.include?(attacker.weapon_id)
- if rand(100) < 4 * attacker.dex / self.agi
- self.damage *= 4
- self.critical = true
- end
- end
- else
- if rand(100) < 2 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- end
- end
- # Guard correction
- if self.guarding?
- self.damage /= 2
- end
- if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(401)
- if rand(100) < 50
- hp_recovery = self.maxhp/10
- self.hp += hp_recovery
- self.damage *= 0
- else
- self.damage /= 16
- end
- end
- end
- # Dispersion
- if self.damage.abs > 0
- amp = [self.damage.abs * 15 / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # Second hit detection
- eva = 2 * self.agi / attacker.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- end
- # If hit occurs
- if hit_result == true
- # State Removed by Shock
- remove_states_shock
- # Subtract damage from HP
- if attacker.is_a?(Game_Actor)
- if MIND_BLASTER_IDS.include?(attacker.weapon_id)
- self.sp -= self.damage
- self.damage = sprintf('%+d %s', -self.damage, $data_system.words.sp)
- end
- if BLOOD_SWORD_W_IDS.include?(attacker.weapon_id)
- healing = (self.damage*PERCENT_DRAINED)/100
- self.hp -= self.damage
- attacker.hp += healing
- end
- if ALL_WEAPONS_IDS.include?(attacker.weapon_id)
- self.hp -= self.damage
- end
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(420) && self.damage > 0
- sp_recovery = self.damage/10
- self.sp += sp_recovery
- end
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(419)
- sp_recovery = self.damage/10
- attacker.sp += sp_recovery
- end
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(408) && ((attacker.hp*100)/attacker.maxhp) < 30
- self.damage*= 2
- end
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(FOCUS_ID) && attacker.hp = attacker.maxhp
- self.damage*= 2
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(409) && ((self.hp*100)/self.maxhp) < 30
- self.damage/= 8
- end
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(403) && self.hp > 1
- attacker.hp -= attacker.hp/10
- self.damage += self.damage/2
- end
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(410) && attacker.sp > 0
- attacker.sp -= 6
- self.damage += self.damage/3
- end
- if attacker.is_a?(Game_Actor) && attacker.skill_learn?(404)
- hp_recovery = self.damage/10
- attacker.hp += hp_recovery
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(412) && self.hp > 1 && self.damage > self.hp
- self.damage = self.hp - 1
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(402) && self.sp > 0
- self.sp -= (self.damage*0.8).to_i
- self.hp -= (self.damage*0.2).to_i
- else
- self.hp -= self.damage
- end
- # State change
- # Check to add unique states for weapons
- if attacker.is_a? Game_Actor and Wep::Weapon_state_rates[attacker.weapon_id] != nil
- state_add = []
- state_remove = []
- # Loop over state rates and check the posibilties. Create a state list.
- for state_rate in Wep::Weapon_state_rates[attacker.weapon_id]
- if rand(100) < state_rate[1]
- state_add.push(state_rate[0])
- for s in state_rate[2]
- state_remove.push(s)
- end
- end
- end
- states_plus(state_add)
- states_remove(state_remove)
- else
- @state_changed = false
- states_plus(attacker.plus_state_set)
- states_minus(attacker.minus_state_set)
- end
- # When missing
- else
- # Set damage to "Miss"
- self.damage = "Miss!"
- # Clear critical flag
- self.critical = false
- end
- # End Method
- return true
- end
- #--------------------------------------------------------------------------
- # * Apply Skill Effects
- # user : the one using skills (battler)
- # skill : skill
- #--------------------------------------------------------------------------
- def skill_effect(user, skill)
- # Clear critical flag
- self.critical = false
- # If skill scope is for ally with 1 or more HP, and your own HP = 0,
- # or skill scope is for ally with 0, and your own HP = 1 or more
- if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
- ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
- # End Method
- return false
- end
- # Clear effective flag
- effective = false
- # Set effective flag if common ID is effective
- effective |= skill.common_event_id > 0
- # First hit detection
- hit = skill.hit
- if skill.atk_f > 0 && skill.power > 0 && skill.int_f < 1
- hit *= user.hit / 100
- end
- hit_result = (rand(100) < hit)
- # Set effective flag if skill is uncertain
- effective |= hit < 100
- # If hit occurs
- if hit_result == true
- # Calculate power
- if user.is_a?(Game_Actor) && user.skill_learn?(452)
- power = skill.power + (user.atk * 2) * skill.atk_f / 100
- else
- power = skill.power + user.atk * skill.atk_f / 100
- if power > 0
- power -= self.pdef * skill.pdef_f / 200
- power -= self.mdef * skill.mdef_f / 200
- power = [power, 0].max
- end
- end
- # Calculate rate
- rate = 20
- rate += (user.str * skill.str_f / 100)
- rate += (user.dex * skill.dex_f / 100)
- rate += (user.agi * skill.agi_f / 100)
- rate += (user.int * skill.int_f / 100)
- # Calculate basic damage
- self.damage = power * rate / 20
- # Element correction
- elements = (elements_correct(skill.element_set))
- if user.is_a?(Game_Actor) && user.skill_learn?(415) && skill.int_f > 0 && self.damage > 0
- elements *= 2
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(416) && skill.mdef_f > 0 && self.damage > 0
- elements /= 2
- end
- self.damage *= elements
- self.damage /= 100
- # If damage value is strictly positive
- if self.damage > 0
- # Critical
- if rand(100) < 4 * user.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- # Guard correction
- if self.guarding?
- self.damage /= 2
- end
- if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(401) && skill.int_f < 1 && self.damage > 0
- if rand(100) < 50
- hp_recovery = self.maxhp/4
- self.hp += hp_recovery
- self.damage *= 0
- else
- self.damage /= 16
- end
- end
- if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(401) && skill.int_f > 0 && self.damage > 0
- if rand(100) < 25
- self.damage *= 0
- else
- self.damage /= 4
- end
- end
- if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(ARTFUL_DODGER_ID) && self.damage > 0
- if rand(100) < 4 * self.agi / self.dex
- self.damage = "Miss!"
- else
- self.damage /= 2
- end
- end
- end
- # Dispersion
- if skill.variance > 0 and self.damage.abs > 0
- amp = [self.damage.abs * skill.variance / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # Second hit detection
- eva = self.eva
- #eva = 8 * self.agi / user.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- # Set effective flag if skill is uncertain
- effective |= hit < 100
- end
- # If hit occurs
- if hit_result == true
- # If physical attack has power other than 0
- if skill.power != 0 and skill.atk_f > 0
- # State Removed by Shock
- remove_states_shock
- # Set to effective flag
- effective = true
- end
- # Subtract damage from HP
- last_hp = self.hp
- if self.is_a?(Game_Actor) && self.skill_learn?(420) && self.damage > 0
- sp_recovery = self.damage/10
- self.sp += sp_recovery
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(419) && self.damage > 0 && skill.int_f < 1
- sp_recovery = self.damage/10
- user.sp += sp_recovery
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(418) && self.damage > 0 && skill.int_f > 0
- sp_recovery = self.damage/10
- user.sp += sp_recovery
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(404) && skill.pdef_f > 0
- hp_recovery = self.damage/4
- user.hp += hp_recovery
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(403) && skill.int_f > 1 && skill.pdef_f > 0
- user.hp -= user.maxhp/20
- self.damage*=4
- self.damage = self.damage.to_i
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(406) && skill.mdef_f > 0
- self.damage*=3
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(453) && skill.atk_f > 0 && skill.element_set.include?(2)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(425) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(426) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(426) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(427) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(427) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=1.2
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(427) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(428) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(428) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(429) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(430) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(430) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(431) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(431) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=1.2
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(431) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(432) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(432) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(433) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=1.5
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(433) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(434) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(434) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(434) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(435) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(435) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(435) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(436) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(436) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(436) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(437) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(438) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(438) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(439) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(439) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(440) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=1.8
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(440) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=1.2
- self.damage = self.damage.to_i
- elsif user.is_a?(Game_Actor) && user.skill_learn?(440) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=1.2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(441) && skill.atk_f > 0 && skill.element_set.include?(24)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(442) && skill.atk_f > 0 && skill.element_set.include?(27)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(443) && skill.atk_f > 0 && skill.element_set.include?(25)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(444) && skill.atk_f > 0 && skill.element_set.include?(20)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(445) && skill.atk_f > 0 && skill.element_set.include?(21)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(446) && skill.atk_f > 0 && skill.element_set.include?(22)
- self.damage*=3
- elsif user.is_a?(Game_Actor) && user.skill_learn?(446) && skill.atk_f > 0 && skill.element_set.include?(26)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(447) && skill.atk_f > 0 && skill.element_set.include?(23)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(448) && skill.atk_f > 0 && skill.element_set.include?(24)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(449) && skill.atk_f > 0 && skill.element_set.include?(27)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(450) && skill.atk_f > 0 && skill.element_set.include?(25)
- self.damage*=3
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(460) && skill.atk_f > 0 && skill.element_set.include?(1)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(461) && skill.atk_f > 0 && skill.element_set.include?(2)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(462) && skill.atk_f > 0 && skill.element_set.include?(3)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(463) && skill.atk_f > 0 && skill.element_set.include?(4)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(464) && skill.atk_f > 0 && skill.element_set.include?(5)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(465) && skill.atk_f > 0 && skill.element_set.include?(6)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(466) && skill.atk_f > 0 && skill.element_set.include?(7)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(467) && skill.atk_f > 0 && skill.element_set.include?(12)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(468) && skill.atk_f > 0 && skill.element_set.include?(13)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(469) && skill.atk_f > 0 && skill.element_set.include?(10)
- self.damage*=1.5
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(470) && skill.power < 0 && skill.element_set.include?(17)
- self.damage*=2
- self.damage = self.damage.to_i
- else
- self.damage*=1
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(417) && skill.atk_f > 0 && skill.element_set.include?(13)
- if self.is_a?(Game_Enemy) && EVIL_IDS.include?(self.id)
- self.damage*=7
- else
- self.damage*=1
- end
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(407) && skill.mdef_f > 0 && ((user.hp*100)/ user.maxhp) < 30
- self.damage*=2
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(408) && skill.pdef_f > 0 && ((user.hp*100)/ user.maxhp) < 30
- self.damage*=4
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(SERENITY_ID) && skill.mdef_f > 0 && user.hp = user.maxhp
- self.damage += self.damage/3
- end
- if user.is_a?(Game_Actor) && user.skill_learn?(FOCUS_ID) && skill.pdef_f > 0 && user.hp = user.maxhp
- self.damage += self.damage/3
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(409) && ((self.hp*100)/self.maxhp) < 50
- self.damage/= 4
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(412) && self.hp > 1 && self.damage > self.hp
- self.damage = self.hp - 1
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(413) && self.damage < 0
- self.damage *= 3
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(LEARNING_ID) && BLUE_SKILLS_IDS.include?(skill.id)
- learn_skill(skill.id)
- end
- if self.is_a?(Game_Actor) && self.skill_learn?(402) && self.sp > 0 && self.damage > 0
- self.sp -= (self.damage*0.9).to_i
- self.hp -= (self.damage*0.1).to_i
- else
- self.hp -= self.damage
- end
- effective |= self.hp != last_hp
- # State change
- @state_changed = false
- if Wep::Skill_state_rates[skill.id] != nil
- state_add = []
- state_remove = []
- # Loop over state rates and check the posibiltys. Create a state list.
- for state_rate in Wep::Skill_state_rates[skill.id]
- if rand(100) < state_rate[1]
- state_add.push(state_rate[0])
- for s in state_rate[2]
- state_remove.push(s)
- end
- end
- end
- states_plus(state_add)
- states_minus(state_remove)
- #effective |= states_plus(state_add)
- #effective |= states_minus(state_remove)
- else
- states_plus(skill.plus_state_set)
- states_minus(skill.minus_state_set)
- #effective |= states_plus(skill.plus_state_set)
- #effective |= states_minus(skill.minus_state_set)
- end
- # If power is 0
- if skill.power == 0
- # Set damage to an empty string
- self.damage = ""
- # If state is unchanged
- unless @state_changed
- # Set damage to "Miss"
- self.damage = "Miss!"
- end
- end
- # If miss occurs
- else
- # Set damage to "Miss"
- self.damage = "Miss!"
- end
- # If not in battle
- unless $game_temp.in_battle
- # Set damage to nil
- self.damage = nil
- end
- # End Method
- return effective
- end
- #--------------------------------------------------------------------------
- # * Application of Item Effects
- # item : item
- #--------------------------------------------------------------------------
- def item_effect(item)
- # Clear critical flag
- self.critical = false
- # If item scope is for ally with 1 or more HP, and your own HP = 0,
- # or item scope is for ally with 0 HP, and your own HP = 1 or more
- if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
- ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
- # End Method
- return false
- end
- # Clear effective flag
- effective = false
- # Set effective flag if common ID is effective
- effective |= item.common_event_id > 0
- # Determine hit
- hit_result = (rand(100) < item.hit)
- # Set effective flag is skill is uncertain
- effective |= item.hit < 100
- # If hit occurs
- if hit_result == true
- # Calculate amount of recovery
- recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
- recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
- if recover_hp < 0
- recover_hp += self.pdef * item.pdef_f / 20
- recover_hp += self.mdef * item.mdef_f / 20
- recover_hp = [recover_hp, 0].min
- end
- # Element correction
- recover_hp *= elements_correct(item.element_set)
- recover_hp /= 100
- recover_sp *= elements_correct(item.element_set)
- recover_sp /= 100
- # Dispersion
- if item.variance > 0 and recover_hp.abs > 0
- amp = [recover_hp.abs * item.variance / 100, 1].max
- recover_hp += rand(amp+1) + rand(amp+1) - amp
- end
- if item.variance > 0 and recover_sp.abs > 0
- amp = [recover_sp.abs * item.variance / 100, 1].max
- recover_sp += rand(amp+1) + rand(amp+1) - amp
- end
- # If recovery code is negative
- if recover_hp < 0
- # Guard correction
- if self.guarding?
- recover_hp /= 2
- end
- end
- # Set damage value and reverse HP recovery amount
- if self.is_a?(Game_Actor) && self.skill_learn?(413) && recover_hp > 0
- recover_hp *= (1.5).to_i
- end
- self.damage = -recover_hp
- # HP and SP recovery
- last_hp = self.hp
- last_sp = self.sp
- self.hp += recover_hp
- self.sp += recover_sp
- effective |= self.hp != last_hp
- effective |= self.sp != last_sp
- # State change
- @state_changed = false
- effective |= states_plus(item.plus_state_set)
- effective |= states_minus(item.minus_state_set)
- # If parameter value increase is effective
- if item.parameter_type > 0 and item.parameter_points != 0
- # Branch by parameter
- case item.parameter_type
- when 1 # MaxHP
- @maxhp_plus += item.parameter_points
- when 2 # MaxSP
- @maxsp_plus += item.parameter_points
- when 3 # Strength
- @str_plus += item.parameter_points
- when 4 # Dexterity
- @dex_plus += item.parameter_points
- when 5 # Agility
- @agi_plus += item.parameter_points
- when 6 # Intelligence
- @int_plus += item.parameter_points
- end
- # Set to effective flag
- effective = true
- end
- # If HP recovery rate and recovery amount are 0
- if item.recover_hp_rate == 0 and item.recover_hp == 0
- # Set damage to empty string
- self.damage = ""
- # If SP recovery rate / recovery amount are 0, and parameter increase
- # value is ineffective.
- if item.recover_sp_rate == 0 and item.recover_sp == 0 and
- (item.parameter_type == 0 or item.parameter_points == 0)
- # If state is unchanged
- unless @state_changed
- # Set damage to "Miss"
- self.damage = "Miss!"
- end
- end
- end
- # If miss occurs
- else
- # Set damage to "Miss"
- self.damage = "Miss!"
- end
- # If not in battle
- unless $game_temp.in_battle
- # Set damage to nil
- self.damage = nil
- end
- # End Method
- return effective
- end
- #--------------------------------------------------------------------------
- # * Application of Slip Damage Effects
- #--------------------------------------------------------------------------
- def slip_damage_effect
- # Set damage
- self.damage = self.maxhp / 8
- # Dispersion
- if self.damage.abs > 0
- amp = [self.damage.abs * 15 / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # Subtract damage from HP (Prevent Slip Damage from Killing)
- if self.damage > self.hp
- self.damage = self.hp-1
- self.hp -= self.damage
- else
- self.hp -= self.damage
- # End Method
- return true
- end
- end#
- end
- #--------------------------------------------------------------------------
- # * Calculating Element Correction
- # element_set : element
- #--------------------------------------------------------------------------
- def elements_correct(element_set)
- # If not an element
- if element_set == []
- # Return 100
- return 100
- end
- # Return the weakest object among the elements given
- # * "element_rate" method is defined by Game_Actor and Game_Enemy classes,
- # which inherit from this class.
- weakest = -100
- for i in element_set
- weakest = [weakest, self.element_rate(i)].max
- end
- return weakest
- end
- class Scene_Battle
- def make_skill_action_result
- # Get skill
- @skill = $data_skills[@active_battler.current_action.skill_id]
- # If not a forcing action
- unless @active_battler.current_action.forcing
- # If unable to use due to SP running out
- unless @active_battler.skill_can_use?(@skill.id)
- # Clear battler being forced into action
- $game_temp.forcing_battler = nil
- # Shift to step 1
- @phase4_step = 1
- return
- end
- end
- # Use up SP
- if @active_battler.is_a?(Game_Actor) && @active_battler.skill_learn?(403)
- @active_battler.hp -= (@skill.sp_cost)
- else
- @active_battler.sp -= @skill.sp_cost
- end
- # Refresh status window
- @status_window.refresh
- # Show skill name on help window
- @help_window.set_text(@skill.name, 1)
- # Set animation ID
- @animation1_id = @skill.animation1_id
- @animation2_id = @skill.animation2_id
- # Set command event ID
- @common_event_id = @skill.common_event_id
- # Set target battlers
- set_target_battlers(@skill.scope)
- # Apply skill effect
- for target in @target_battlers
- target.skill_effect(@active_battler, @skill)
- end
- end
- end
- class Game_Actor < Game_Battler
- def animation1_id
- weapon = $data_weapons[@weapon_id]
- return weapon != nil ? weapon.animation1_id : BARE_ANIMATION_SELF_ID
- end
- def animation2_id
- weapon = $data_weapons[@weapon_id]
- return weapon != nil ? weapon.animation2_id : BARE_ANIMATION_ID
- end
- def element_set
- weapon = $data_weapons[@weapon_id]
- return weapon != nil ? weapon.element_set : [18]
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement