Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- =begin
- DO READ THIS PART! I MEAN IT!
- Since I am getting tired of answering the exact same question over and over
- again, I will just leave this little note here, at the top, thinking that maybe,
- just maybe, someone will actually read it before asking questions and/or
- reporting bugs which aren't even bugs...
- Read the green letters below! Read! Read them, just once! All of it.
- If you are still thinking about asking THAT question or reporting THAT "bug"
- after reading the green letters I wrote (for some mysterious reason, starting
- to think that it is just a colossal waste of time to even try to write a
- documentation for any script, since no one reads them if they are longer than
- 5 lines anyway...), please read those meany green letters again, carefully.
- IF you are still convinced that you have a valid question or a valid bug report,
- feel free to PM me on the forums.
- There, now you can start reading that documentation for real, thanks!
- =end
- #===============================================================================
- # * [ACE] Bug Fixes for Falcao's Pearl ABS Liquid v3
- #===============================================================================
- # * Made by: Sixth (www.rpgmakervxace.net, www.forums.rpgmakerweb.com)
- # * Version: 2.2
- # * Updated: 08/01/2017
- # * Requires: Falcao's Pearl ABS Liquid v3
- #-------------------------------------------------------------------------------
- # * < Change Log >
- #-------------------------------------------------------------------------------
- # * Version 1.0 (01/08/2015)
- # - Initial release.
- # * Version 1.1 (08/08/2015)
- # - Added settings to enable/disable the regen popups at will.
- # Cut-scenes just don't look nice while random numbers are on the screen...
- # - Added global cooldown note-tags for items.
- # You can now prevent the player from executing multiple tools at the same
- # time, so no more shooting fireballs and swinging your sword around while
- # drinking a potion, those times are over!
- # * Version 1.2 (27/08/2015)
- # - Added in the boss HP bar hiding feature.
- # You can now manually hide the HP bar of bosses anytime with eventing.
- # - Restored KO effect by slip damage.
- # * Version 1.3 (28/08/2015)
- # - Fixed an issue with the enemy auto-turn on casting feature.
- # Weapon and armor tools should no longer crash the game.
- # - Added in thanasulas's fix for the combo delay issue.
- # - I kinda missed the confusion state from this ABS, so...
- # Added a way to make confusion states possible in the ABS.
- # A character inflicted with confusion will get it's directions messed up!
- # This feature is optional, and configurable.
- # * Version 1.4 (02/09/2015)
- # - Fixed damage reduction on guarding. Damage will only be reduced if the
- # shield's user is facing towards the incoming tool attack.
- # The guarding state must be the default one (state 9) for this to work!
- # - Guarding did not work properly against tools with bigger sizes.
- # This is now fixed as well.
- # - Added a script call for changing the HP of the enemies manually.
- # - Added a note-tag that lets you make tools with "irregular" sizes.
- # This means that you are not limited to make tools with the same width and
- # height anymore. You can make a tool with 8 width and 1 height if you want,
- # for example (firewall, anyone?).
- # - Added a note-tag for reversing the targets of a tool. Since tools which
- # target allies work differently than tools which target enemies, it was not
- # possible to make a "Healing Glyph" skill, for example, without it healing
- # the enemies as well as the party members in range. Now you can make tools
- # like that and make them only affect the party/enemies, not both.
- # - Changed the way the effect of the tools are triggered. Turns out I did
- # this long time ago, and forgot about it. This resulted in me giving out
- # wrong advice on the forums. Now you can manipulate how many times a tool
- # hits the target(s) by adjusting it's effect and destroy delay properly.
- # For example, if you set the effect delay to 60, the tool would trigger
- # it's effect in every 60 seconds but only if the tool is not yet destroyed
- # (so the tool's destroy delay must be at least 2x more + 2 than the effect
- # delay to make a 2-hit tool, or it must be at least 3x more + 3 to make a
- # 3-hit tool, and so on)!
- # - By default, tools are destroyed immediately when the target guards it
- # completely ("Guard" text pops up). There are some tools which would not
- # work like this (Healing Glyph, Firewall, etc). Now you can note-tag your
- # tools to prevent their destruction when the target guards them.
- # - By default, all of the tools can be guarded, be it a restorative one or
- # an offensive one. You can note-tag any tools to make them ignore guarding.
- # - By default, if the target is hit by an offensive tool, the target gets a
- # 20 frames long invincibility effect (can not be hit with any other tool
- # for 20 frames). If the target is hit by multiple tools at the same time,
- # it is possible that only one of them will trigger it's effect, and I did
- # not like it this way. Also, since I changed the way when the effects are
- # triggered, this function is not really needed anymore, so I added an
- # option to completely remove it. This is an optional feature.
- # * Version 1.5 (04/09/2015)
- # - Made the new effect trigger feature an optional one.
- # Now you can use a note-tag to use my new effect trigger type.
- # Tools without that note-tag will behave the default way.
- # - Made another optional note-tag to set the invincible time of the targets
- # on a per tool basis instead of a global time for all tools.
- # You can set the default invincible time in the settings, and if you omit
- # the note-tag for this, that value will be loaded by default.
- # - Enemy sensors did not reset after a map change. This resulted in every
- # enemy in the range of the player when the map transfer took place
- # instantly become active after returning to the map at any later point,
- # regardless if the enemies were in range after a map reset or not.
- # This should be fixed now.
- # * Version 1.6 (05/10/2015)
- # - Enemy sensors were turned ON/OFF even for dead enemies.
- # This is not the case anymore.
- # This might increase performance if you have a lot of enemies on a map.
- # - Calling the tool/character selection menu was possible even when the
- # interpreter was running (during non-parallel events). This is fixed.
- # - Triggering a tool was possible even when the interpreter was running
- # (during non-parallel events). This is fixed.
- # - Added a switch setting to enable/disable the ABS tool triggers without
- # hiding the HUD.
- # - Added an experimental reflect feature. You can use it just like the normal
- # reflect feature, just add MRF to your actors/enemies/equips/etc in the
- # database. You can set which tools ignore the reflect state with a note-tag.
- # * Version 1.7 (06/05/2016)
- # - Added compatibility for Pikakapi's Battle Royale Addon.
- # - Fixed dual wield issues on tool usage. From now on, it will use the
- # correct tool type for dual wielding actors (meaning weapon tools and not
- # armor tools).
- # - It was not possible to equip weapons on the second tool slot from the
- # quick tool menu Falcao made. That is now fixed. It will check the actor's
- # second equip slot to determine if it should include weapons or armors on
- # the tool list. This is kinda necessary for the actors with dual wield
- # features.
- # - Now you can unequip any tool from the quick tool menu by pressing it's
- # hotkey in the menu. It was not possible to do this before.
- # * Version 1.8 (06/05/2016)
- # - Actors couldn't be equipped with any skills gained from equipment, state,
- # class or actor features with the 'set_skill' script call. Fixed it.
- # * Version 1.9 (01/07/2016)
- # - The characters will now be considered to be "acting" even if they guard.
- # - Added a compatibility patch for my Equip Engine. That is a private script,
- # so, if you are not me or the owner of that script, you don't have to worry
- # about this!
- # * Version 2.0 (22/07/2016)
- # - When used ally targeting items, the effect was based on the targets'
- # parameters instead of the user's parameters like it should be.
- # This is now fixed.
- # - Added a compatibility patch for my ABS Battle Royale script.
- # This is a private script, so if you are not me or the owner of that
- # script, you don't have to worry about this one!
- # * Version 2.1 (03/08/2016)
- # - Defeated enemy events did not reset their passive state.
- # This is now fixed.
- # * Version 2.2 (08/01/2017)
- # - Fixed a crash issue for enemies with the "Enemy Die Self Switch = x"
- # note-tag.
- # - Fixed drop items not showing up when using the above mentioned note-tag
- # on an enemy.
- #-------------------------------------------------------------------------------
- # * < Description >
- #-------------------------------------------------------------------------------
- # * This script fixes several bugs/weird behaviors found in Falcao's ABS, and
- # adds some new (optional) features too.
- # These include:
- # - The cooldown of the tools are updated even in the menu(s). Fixed.
- # - The player is able to change tools on cooldown. Fixed.
- # - The player is able to equip the same items/skills more than one time.
- # Fixed. Even if this is not a real thing which needed a fix, it was
- # necessary for the previous fix to work.
- # - The animation frames on iconset animation are wrong when the player faces
- # down. Fixed.
- # - The dead icon sprites above dead party members are not disposed upon a
- # map change. Fixed.
- # - The boss bar will not get disposed upon a map change. Fixed.
- # - The HP/MP/TP regen features are only working if these features are gained
- # with a state. Actor, class, equipment regen features aren't working. Fixed.
- # - HP/MP/TP regen states restore/damage the player in completely random
- # time intervals. Fixed. All regen effects will be executed in every second
- # from now on, instead of randomly triggering.
- # - Characters are able to move around freely even when they are in the middle
- # of casting. Fixed. This fix can be disabled at will.
- # - Even if you disable the player's movement on casting, you can still allow
- # the player to change directions during casting. This is not really a fix,
- # more like an optional feature which might come in handy if you disable
- # the player's movement during casting.
- # - It is not possible to disable a hotkey for a tool slot. Fixed. You can now
- # set 'nil' (without the apostrophes) for a tool's key setting to disable
- # that tool entirely. Note that it won't remove the visuals for the tool,
- # just restricts the usage of it!
- # - The player is able to trigger multiple tools at the same time. Fixed.
- # You need to tag your tools with the global cooldown note-tag for this!
- # - No way to implement any kind of confusion states. "Fixed".
- # Well, more like "added"...
- # - Multiple issues are found with the guard feature. Fixed.
- # - Added a new, optional feature for inverting the scope of the tools.
- # - Added a new, optional feature for changing the effect trigger type of
- # the tools.
- # - Added a new, optional feature for setting custom invincible times for
- # your tools.
- # - Added a new, optional feature for more freedom in creating tool sizes
- # with different width and height.
- #-------------------------------------------------------------------------------
- # * < Script Calls>
- #-------------------------------------------------------------------------------
- # * To hide the boss HP bar manually during the game, use this script call:
- #
- # hide_boss_bar
- #
- # This can come in handy in eventing.
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * To manually change an enemy's HP, you can use this script call:
- #
- # change_enemy_hp(id,val,allow_ko)
- #
- # id = The ID of the event on the map (NOT the ID of the enemy!).
- # val = The HP change value.
- # allow_ko = This can be true or false. If true, the enemy can be killed with
- # the script call in case it reaches 0 HP. If false, the enemy can
- # not be killed with the script call (the enemy's HP will not be
- # reduced below 1 HP ever).
- # This can be omitted at will. The default value is true, so if you
- # omit it, it will default to true.
- #
- # Examples:
- #
- # change_enemy_hp(2,-50,true)
- # This would reduce the HP of the event with ID 2 by 50, and in case it
- # reaches 0 HP, it will die.
- #
- # change_enemy_hp(2,-9999,false)
- # Same as above, but this time it reduces 9999 HP and the enemy will not be
- # killed no matter how many HP it had before the script call.
- #
- # change_enemy_hp(2,200)
- # This would add 200 HP to the enemy (for the event with ID 2 on the map).
- #-------------------------------------------------------------------------------
- # * < Note-tags >
- #-------------------------------------------------------------------------------
- # * To prevent the player from triggering multiple tools at the same time, you
- # must tag your tools with the following note-tag:
- #
- # Tool Global Cool = time
- #
- # The 'time' is the number of frames the character (so any character who can
- # use tools, not just the player) can NOT execute any other skills after using
- # the note-tagged tool.
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * To reverse the targets of the tool, you can use this note-tag:
- #
- # <reverse target>
- #
- # This means that if you set the scope of the tool for "All Allies" in the
- # database, and use this note-tag on the tool, it would hit all opponents,
- # instead of hitting all allies.
- # By default, tools with "One Ally", "All Allies", "One Ally (KO)" and
- # "All Allies (KO)" can not trigger their effects multiple times, only once,
- # regardless of their tool effect/destroy time. The easiest way to make that
- # happen is to reverse the scope of the target, and that is why this note-tag
- # has been made.
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * To make the tool ignore the guard effect (damage reduction, and full guard),
- # use the following note-tag:
- #
- # <ignore guard>
- #
- # This will make the tool be completely "un-guardable".
- # I'm pretty sure that this word does not exist, but who cares, right? :D
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * To make the tool ignore the reflect effect use the following note-tag:
- #
- # <ignore reflect>
- #
- # This will make the tool ignore the reflection and hit the target.
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * To make the tool stay even if the target guarded it,
- # use the following note-tag:
- #
- # <no guard destroy>
- #
- # This will prevent the destruction of the tool if the target guards it.
- # Useful for multiple-hit and area effect tools.
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * To set a custom invincibility frame for your tools, you can use the
- # following note-tag:
- #
- # <inv time: time>
- #
- # Replace 'time' with the time you want the target to be invincible after it's
- # hit with the (offensive) tool.
- # This is measured in frames, so 60 means 1 second!
- # If the target's invincibility frame is not 0, it can NOT be hit with any
- # offensive tools! An offensive tool means that it's scope is one of these:
- # One Enemy, All Enemy, X Random Enemies.
- # Invincibility frames are only triggered by offensive tools, regardless of
- # their effects (so, even a HP recovering tool will trigger it)!
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * To use my new way of triggering the effects of the tools, use the following
- # note-tag:
- #
- # <new effect delay> <inv time: 0>
- #
- # This will make the tool repeat it's effect periodically until it's destroyed.
- # Only effective for tools with the following scopes:
- # One Enemy, All Enemies, X Random Enemies.
- #
- # Here is an example using these tool settings:
- # Tool Effect Delay = 30
- # Tool Destroy Delay = 340
- # If you did not use the note-tag mentioned above, the tool will execute it's
- # effect on the target first after 30 frames of it's usage. After the first
- # effect trigger, the tool executes it's effect continuously until it is
- # destroyed. If there would be no invincibility time after each hit, you
- # would see hell of a lot damage popups within the blink of an eye. But
- # there is an invincibility time by default, and it is set to 20 frames.
- #
- # (You can now set the default invincibility time in this script, or you can
- # make separate times for each of your tools by using the new note-tag for it.
- # In the default system, it was set to 20, and you had no way to change it
- # without editing the script itself, that's why I go with 20 frames now.)
- #
- # Since there is an invincibility time after the effect triggering, any other
- # offensive tool which hits the target while the invincibility frame is not 0
- # will have absolutely no effect on the target.
- #
- # This means that the tool will execute it's effects in every 20 frames after
- # the effect delay countdown (which is 30 frames now). This also means that
- # the total number of hits (if the enemy is in the tool's range all the time)
- # equals:
- # (340 - 30) / 20 = 310 / 20 = 15.5
- # So, it would hit maximum 15 times.
- # This is with the default effect trigger system Falcao made.
- #
- # Now let's see what happens with my new trigger...
- # Same tool settings, but now I will set the tool's invincibility frame
- # trigger time to 0 with the new note-tag for it, and will use the note-tag
- # to set the tool's effect trigger type to my new one.
- # What happens now?
- #
- # The tool will hit the target first after 30 frames, same like before, but
- # now every other hit will be triggered after 30 frames. The tool will not
- # trigger any invincibility frames for the targets at all, which means that
- # multiple tools can hit the target at the same time (as long as they don't
- # trigger any invincibility frame, that is), and all of them will execute
- # their effects.
- # This means:
- # (340 - 30) / 30 = 10.3333...
- # So, 10 hits maximum, with the ability to hit the target with any other tools
- # in the meantime.
- # This means that if the target is staying in a Fire Wall, and the opponent
- # shoots arrows at it, AND an ally puts a Healing Glyph below it's feet, ALL
- # of these effects will be executed if none of these tools got any
- # invincibility frames set for them. This is the main reason I made this, to
- # enable multiple tools to hit the targets at the same time.
- #
- # I hope it's clear enough what's the difference.
- # In case you don't want to use my new effect trigger, just don't use this
- # note-tag on any of your tools, and set the default invincibility time to
- # 20 frames in the settings below. That results in the default system.
- #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- # * If you want to make tools with different width and height, you can use
- # this note-tag:
- #
- # <tool size ex: width, height, dir_based>
- #
- # Replace the width and height with the width and height of the tool.
- # These are measured in tiles, NOT in pixels!
- # Note that you still must use the default note-tag for size too!
- #
- # The 'dir_based' can be either 0 or 1.
- # 0 means that regardless of the direction of the tool (or user) it will
- # always have the same area of effect.
- # If it is set to 1, the area will change depending on the direction of the
- # tool. The note-tag represents the UP or DOWN directions in this case.
- # The LEFT and RIGHT directions will change the area of effect to be rotated
- # by 90 angles. So, the width and height will be exchanged in this case.
- #
- # Examples: <tool size ex: 4, 1, 0> | <tool size ex: 3, 2, 1>
- #
- # Now, these numbers aren't exactly what they seem to be. I will use the 1st
- # example to explain what they do.
- #
- # The 4 means that the tool will be (3*2+1) tiles wide. I bet you mean
- # WTFruit now, but look at the sketch below... (5 would be 4*2+1)
- #
- # -----------------------------
- # | 4 | 3 | 2 | 1 | 2 | 3 | 4 |
- # -----------------------------
- #
- # So, the 4 means the middle (indicated by an 1 on the sketch) plus the tiles
- # on the left and right sides (3 on both sides).
- #
- # If you would want a tool with 5 width, you would use 3 in the note-tag for
- # it's width, since the middle plus 2 tiles on both sides is 5.
- # Basically, just count from the middle and you will get the correct note-tag
- # values easily.
- #
- # The same applies to the height of the tools.
- #
- # Here is an example sketch for a tool with the second note-tag example:
- #
- # ---------------------
- # | 3 | 2 | 1 | 2 | 3 | This is the real tool size in the game with the
- # --------------------- note-tag <tool size ex: 3, 2, 1> used for the tool.
- # | 3 | 2 | 1 | 2 | 3 | The default note-tag that Falcao provided works
- # --------------------- the same way actually. Some examples for that can
- # | 3 | 2 | 1 | 2 | 3 | be found below for comparison.
- # ---------------------
- #
- # Falcao's tool size and note-tag examples: -----
- # | 3 |
- # ----- -------------
- # | 2 | | 2 | 2 | 2 |
- # ------------- <-- Tool Size = 2 ---------------------
- # | 2 | 1 | 2 | | 3 | 2 | 1 | 2 | 3 |
- # ------------- Tool Size = 3 --> ---------------------
- # | 2 | | 2 | 2 | 2 |
- # ----- -------------
- # | 3 |
- # See? It's the same eventually. -----
- # Just count from the middle and that's it.
- #
- # I made this feature for one-liner area effect tools, but you can use it for
- # making way bigger area effects too, if you want.
- #-------------------------------------------------------------------------------
- # * < Installation >
- #-------------------------------------------------------------------------------
- # * Place this script below all of Falcao's ABS scripts but above Main!
- # * If you are using my Stat Bonus Addon for Falcao's ABS, you must put this
- # script below that one!
- # * If you are using Pikakapi's Battle Royale Addon, this must be below that,
- # and the Battle Royale Compatibility Patch must be below this script!
- #-------------------------------------------------------------------------------
- # * < Compatibility Info >
- #-------------------------------------------------------------------------------
- # * No known incompatibilities.
- #-------------------------------------------------------------------------------
- # * < Known Issues >
- #-------------------------------------------------------------------------------
- # * No known issues.
- #-------------------------------------------------------------------------------
- # * < Terms of Use >
- #-------------------------------------------------------------------------------
- # * Free to use for whatever purposes you want.
- # * Credit me (Sixth) in your game, pretty please! :P
- # * Posting modified versions of this script is allowed as long as you notice me
- # about it with a link to it!
- #===============================================================================
- $imported = {} if $imported.nil?
- $imported["SixthFalcaoABSBugFixes"] = true
- #===============================================================================
- # Settings:
- #===============================================================================
- module Falcao_ABS_Fix1
- #-----------------------------------------------------------------------------
- # Regen Popup Settings
- #-----------------------------------------------------------------------------
- # You can enable or disable the regen pop up texts in the game with the
- # switches you set up here. Set them to 0 if you want them to be always enabled.
- # In case you don't want to show the MP regen texts, because the MP in your
- # game always increases slowly for the player, or you need to turn the popups
- # off because of a cut-scene, or for any other reason.
- # To show the popups, turn the assigned switches ON.
- # To hide them turn the switches OFF.
- #-----------------------------------------------------------------------------
- RegenPops = { :hp => 0, :mp => 0, :tp => 0 }
- #-----------------------------------------------------------------------------
- # Confusion Addon Settings
- #-----------------------------------------------------------------------------
- # These settings let you make a basic confusion state in the ABS system.
- # Like in many ABS based games, confusion messes up movement directions.
- # That is what this addon aims to do, mess up user directions when the user is
- # inflicted with confusion.
- # There are many settings for you to set up here.
- #
- # ConfEnabled = true/false
- # This can be true or false. Set it to false to completely disable this addon.
- # Set it to true to enable the confusion addon.
- #
- # ConfPlayerOnly = true/false
- # If you set this to true, only the player will be affected by the direction
- # changes on confusion. If it is set to false, enemies and followers alike
- # will be affected too!
- #
- # ConfStates = [state_id1, state_id2, ... , state_idN]
- # Any state IDs entered in the array here will be considered as a confusion
- # inflicting state. Add as many as you want.
- #
- # ConfType = :reverse/:random/:custom
- # You can set the type of confusion here. 3 options are available:
- # 1. :reverse = This simply inverts the movement directions when confused.
- # 2. :random = This will move in complete random directions when confused.
- # If you choose this type, you can be sure that this state will
- # be the most annoying state in your entire game!
- # You have been warned! :P
- # 3. :custom = With this type, you can set up your own unique directions for
- # the confusion state. You set up the direction groups in the
- # ConfCustom settings. Whenever the player is inflicted with a
- # confusion state, a random direction group will be selected
- # from those settings, and the movement of the characters will
- # depend on those settings until the confusion is cleared.
- # This type aims to give a slight random factor for confusion
- # directions while still keeping it below the uber-annoying
- # limits. Many games use this type of confusion mechanics, like
- # the YS series, for example.
- #
- # ConfCustom = {
- # setup1 => {dir1 => cdir1, dir2 => cdir2, dir3 => cdir3, dir4 => cdir4},
- # setup2 => {dir1 => cdir1, dir2 => cdir2, dir3 => cdir3, dir4 => cdir4},
- # ...
- # }
- # This is the place where you set up your own confusion directions. You can
- # add as many settings as you want here. When the player is inflicted with
- # confusion, a random setting will be loaded from here, and the directions
- # will depend on the selected setting.
- # The directions are named by numbers, and if you are ever in doubt which one
- # is which, just take a look at your numpad numbers and their placement.
- # In case you don't have a numpad (poor numpad-less laptops!):
- # 2 = Down, 4 = Left, 6 = Right, 8 = Up.
- # So, how to setup these groups correctly? First, name the group with a
- # unique name, it can be anything, numbers, strings, symbols, etc.
- # I used numbers, because I ... no real reasons, I always use numbers. :P
- # After this, in the group hash, you must pair the normal directions with
- # the confused directions. For example, 2 => 4 means that if the character is
- # confused, and when the character would like to move down (2), it will move
- # left (4) instead of down.
- # The left number represents the normal direction and the right number is the
- # direction change when confused.
- # You must set up all 4 directions for all of your groups!
- #-----------------------------------------------------------------------------
- ConfEnabled = false
- ConfPlayerOnly = false
- ConfStates = [73]
- ConfType = :custom
- ConfCustom = {
- 1 => { 2 => 6, 4 => 8, 6 => 2, 8 => 4 },
- 2 => { 2 => 6, 4 => 8, 6 => 4, 8 => 2 },
- 3 => { 2 => 2, 4 => 6, 6 => 4, 8 => 8 },
- 4 => { 2 => 8, 4 => 4, 6 => 6, 8 => 2 },
- 5 => { 2 => 8, 4 => 6, 6 => 4, 8 => 2 },
- # Add more direction settings here!
- }
- #-----------------------------------------------------------------------------
- # Cast Time Settings
- #-----------------------------------------------------------------------------
- # All of the these settings are for changing some behaviors regarding the
- # usage of tools with cast times.
- #
- # CastMoveDisableEnemy = true/false # <-- For the enemies.
- # CastMoveDisablePlayer = true/false # <-- For the player.
- # Setting these settings to 'true' will prevent enemy/player movement while
- # a tool is being casted. Setting them to 'false' will disable this feature.
- #
- # AutoTurnToPlayer = true/false
- # Setting this setting to 'true' will make the enemies always turn toward
- # the player on any enemy targeting tool usage.
- # Setting it to 'false' will disable this feature.
- # NOTE:
- # Setting this to true automatically blocks enemy movement during cast time!
- #
- # AllowPlayerDirChange = true/false
- # Set this to 'true' if you want to allow the player to change directions
- # during casting. Set this to 'false' to disable direction changes on casting.
- #-----------------------------------------------------------------------------
- CastMoveDisableEnemy = true # <-- For the enemies.
- CastMoveDisablePlayer = false # <-- For the player.
- AutoTurnToPlayer = true
- AllowPlayerDirChange = true
- #-----------------------------------------------------------------------------
- # Invincible Settings
- #-----------------------------------------------------------------------------
- # When a target is hit with an offensive tool (scope set to any kind of
- # "enemy" type), it will become invincible for 20 frames by default.
- # Now you can change the default time with this setting.
- # Unless you make a custom invincibility time for an offensive tool with the
- # provided new note-tags, this will be used for the tools.
- # Remember that it is measured in frames, so 60 means 1 second!
- #-----------------------------------------------------------------------------
- InvincibleTime = 10
- #-----------------------------------------------------------------------------
- # Switch Settings
- #-----------------------------------------------------------------------------
- # You can set up the switch used to enable/disable the tool usage of the
- # player, and the switch used to enable/disable the menu calling for the ABS
- # menus (tool selection and character selection).
- # When the assigned switches are turned ON, the features are enabled, when
- # they are turned OFF, they are disabled.
- #-----------------------------------------------------------------------------
- ToolToggleSwitch = 29
- MenuToggleSwitch = 30
- #-----------------------------------------------------------------------------
- # Tool Unequip Settings
- #-----------------------------------------------------------------------------
- # From v1.7, you can allow the player to unequip any tool from the quick tool
- # selection menu by pressing the assigned buttons for the tools in the menu.
- # It was not possible to unequip anything there before.
- # Set this setting to true to enable this feature or false to disable it!
- #-----------------------------------------------------------------------------
- ToolUnequip = true
- end
- #===============================================================================
- # End of Settings! Editing anything below may lead to... you know it, right?
- #===============================================================================
- module PearlKey
- def self.press?(key)
- return false if key.nil?
- return @press[key]
- end
- # Enables the disabling of certain tool trigger keys.
- def self.trigger?(key)
- return false if key.nil?
- return @trigger[key]
- end
- end
- class Game_Interpreter
- def hide_boss_bar
- SceneManager.scene.hide_boss_bar
- end
- def change_enemy_hp(id,val,allow_ko = true)
- return if $game_map.events[id].battler.nil? || $game_map.events[id].battler.dead?
- if allow_ko == false && val < 0
- val = [val,-($game_map.events[id].battler.hp-1)].max
- end
- $game_map.events[id].battler.hp += val
- $game_map.events[id].colapse_time = 60 if $game_map.events[id].battler.dead?
- end
- end
- class Game_Map
- alias fix_sensors5542 setup
- def setup(map_id)
- reset_enemy_sensors
- fix_sensors5542(map_id)
- end
- # Sensor reset fix.
- def reset_enemy_sensors
- @event_enemies.each do |ev|
- next unless $game_self_switches[[@map_id, ev.id, PearlKernel::Enemy_Sensor]]
- $game_self_switches[[@map_id, ev.id, PearlKernel::Enemy_Sensor]] = false
- end
- end
- end
- class Game_Party < Game_Unit
- def set_skill(actor_id, sid, slot)
- actor = $game_actors[actor_id] ; skill = $data_skills[sid]
- return unless actor.skills.include?(skill)
- case slot
- when Key::Skill[1].to_sym then actor.assigned_skill = skill
- when Key::Skill2[1].to_sym then actor.assigned_skill2 = skill
- when Key::Skill3[1].to_sym then actor.assigned_skill3 = skill
- when Key::Skill4[1].to_sym then actor.assigned_skill4 = skill
- end
- end
- end
- class Game_Player < Game_Character
- # Cast direction feature for player.
- alias cast_dir_fix9989 move_by_input
- def move_by_input
- if Falcao_ABS_Fix1::AllowPlayerDirChange &&
- !$game_map.interpreter.running? && @user_casting[0] > 0
- set_direction(Input.dir4) if Input.dir4 > 0
- else
- cast_dir_fix9989
- end
- end
- # Cast movement fix for player.
- alias cast_move_dis6653 movable?
- def movable?
- return false if Falcao_ABS_Fix1::CastMoveDisablePlayer && @user_casting[0] > 0
- cast_move_dis6653
- end
- alias fix_tool_usage8864 update_tool_usage
- def update_tool_usage
- return if $game_switches[Falcao_ABS_Fix1::ToolToggleSwitch] == false
- return if $game_map.interpreter.running?
- return if PearlSkillBar.hidden?
- return unless normal_walk?
- if trigger_tool?(Key::Armor[0], :keys) || trigger_tool?(2, :mouse)
- if actor.equips[1] && actor.equips[1].is_a?(RPG::Weapon)
- use_weapon(actor.equips[1].id) # Dual wield fix 1!
- return
- end
- end
- if trigger_tool?(Key::Weapon[0], :keys) || trigger_tool?(1, :mouse)
- if actor.equips[0] && actor.equips[0].is_a?(RPG::Armor)
- use_armor(actor.equips[0].id) # Patch for my Equip Engine 1!
- return
- end
- end
- fix_tool_usage8864
- end
- alias fix_menu_calls7731 update_menu_buttons
- def update_menu_buttons
- return if $game_map.interpreter.running?
- return if $game_switches[Falcao_ABS_Fix1::MenuToggleSwitch] == false
- fix_menu_calls7731
- end
- end
- class Game_Character < Game_CharacterBase
- attr_accessor :reflect_flag
- alias add_reflect_flags9942 init_public_members
- def init_public_members
- @reflect_flag = {}
- add_reflect_flags9942
- end
- def do_counter(tool,user)
- battler.reflecting = true
- @animation_id = 0
- @animation_id = 94
- while @animation_id > 0
- turn_toward_character(user)
- SceneManager.scene.update
- end
- case tool
- when RPG::Weapon
- use_weapon(tool.id)
- user.set_reflect_flag(tool)
- when RPG::Armor
- use_armor(tool.id)
- user.set_reflect_flag(tool)
- when RPG::Skill
- use_skill(tool.id)
- user.set_reflect_flag(tool)
- when RPG::Item
- use_item(tool.id)
- user.set_reflect_flag(tool)
- end
- battler.reflecting = false
- end
- def set_reflect_flag(tool)
- @reflect_flag[tool] = true
- end
- end
- class Game_Event < Game_Character
- # Cast movement fix for enemies.
- alias cast_move_dis5543 update_self_movement
- def update_self_movement
- if @user_casting[0] > 0
- if Falcao_ABS_Fix1::AutoTurnToPlayer == true && self.battler.is_a?(Game_Enemy)
- if @user_casting[1].is_a?(RPG::Weapon) || @user_casting[1].is_a?(RPG::Armor) ||
- [1,2,3,4,5,6].include?(@user_casting[1].scope)
- turn_toward_player
- end
- end
- if Falcao_ABS_Fix1::CastMoveDisableEnemy == false
- cast_move_dis5543
- end
- else
- cast_move_dis5543
- end
- end
- alias fix_ko_sensors6652 update_enemy_sensor
- def update_enemy_sensor
- return if collapsing?
- fix_ko_sensors6652
- end
- alias fix_revive1127 apply_respawn
- def apply_respawn
- @die_sswitch = nil
- fix_revive1127
- @epassive = @enemy.enemy.tool_data("Enemy Passive = ", false) == "true"
- end
- def run_assigned_commands # Overwrite!
- transform = @enemy.enemy.tool_data("Enemy Die Transform = ")
- switch = @enemy.enemy.tool_data("Enemy Die Switch = ")
- $game_switches[switch] = true if switch != nil
- variable = @enemy.enemy.tool_data("Enemy Die Variable = ")
- $game_variables[variable] += 1 if variable != nil
- self_sw = @enemy.enemy.tool_data("Enemy Die Self Switch = ", false)
- #$game_map.event_enemies.delete(self) if @enemy.object
- #$game_map.enemies.delete(@enemy) if @enemy.object
- if self_sw.is_a?(String)
- $game_self_switches[[$game_map.map_id, self.id, self_sw]] = true
- apply_respawn
- make_drop_items if transform.nil? #myadd
- $game_map.event_enemies.delete(self)
- $game_map.enemies.delete(@enemy)
- unless $game_system.remain_killed.has_key?($game_map.map_id)
- $game_system.remain_killed[$game_map.map_id] = []
- end
- $game_system.remain_killed[$game_map.map_id].push(self.id) unless
- $game_system.remain_killed[$game_map.map_id].include?(self.id)
- @die_sswitch = self_sw # Added!
- #@enemy = nil # Disabled by Sixth!
- else
- erase unless @deadposee
- respawn = @enemy.enemy.tool_data("Enemy Respawn Seconds = ")
- animation = @enemy.enemy.tool_data("Enemy Respawn Animation = ")
- @respawn_count = respawn * 60 unless respawn.nil?
- @respawn_anim = animation unless animation.nil?
- end
- if transform != nil
- @enemy = Game_Enemy.new(0, transform)
- apply_respawn
- end
- end
- end
- class Projectile < Game_Character
- alias add_new_stuffs6631 load_item_data
- def load_item_data
- add_new_stuffs6631
- @tool_effect_type = @original_item.effect_delay_type
- @tool_inv_time = @original_item.tool_inv_time
- @tool_ori_delay = @tool_effect_delay
- @tool_reverse_target = @original_item.reverse_target
- @tool_no_guard_destroy = @original_item.no_guard_destroy
- @tool_ignore_guard = @original_item.ignore_guard
- @tool_size = @original_item.tool_size_ex if !@original_item.tool_size_ex.nil?
- end
- # Fixing combo delays. Thanks thanasulas for pointing this out!
- def check_combo_effect
- c = PearlKernel.tool_combo
- return if c == 'nil' || c.nil?
- c = c.split(", ")
- return unless rand(101) <= c[2].to_i
- @user.combodata << [c[0].to_sym, c[1].to_i, c[3], @tool_destroy_delay]
- @has_combo = true
- end
- def apply_damageto_enemy
- return if @tool_effect_delay > 0
- $game_map.event_enemies.each do |event|
- next if event.collapsing?
- if event.battler.body_sized > 0
- enabled = body_size?([event.x, event.y], @tool_size)
- enabled = body_size?([event.x - 1, event.y], @tool_size) if !enabled
- enabled = body_size?([event.x, event.y - 1], @tool_size) if !enabled
- enabled = body_size?([event.x + 1, event.y], @tool_size) if !enabled
- if event.battler.body_sized == 2
- enabled = body_size?([event.x - 1, event.y-1], @tool_size) if !enabled
- enabled = body_size?([event.x, event.y - 2], @tool_size) if !enabled
- enabled = body_size?([event.x + 1, event.y-1], @tool_size) if !enabled
- end
- else
- enabled = body_size?([event.x, event.y], @tool_size)
- end
- if enabled and event.just_hitted == 0
- event.just_hitted = @tool_inv_time
- next if event.page.nil?
- if !enable_dame_execution?(event.battler)
- unless event.battler.object
- RPG::SE.new(Key::GuardSe, 80).play
- event.pop_damage('Guard')
- play_hit_animation(event)
- end
- return
- end
- #-------------------------
- execute_damageto_enemy(event)
- end
- end
- end
- def apply_damageto_player
- return if @tool_effect_delay > 0 || $game_player.battler.dead?
- if obj_size?($game_player, @tool_size) and $game_player.just_hitted == 0
- $game_player.just_hitted = @tool_inv_time
- return if guard_success?($game_player, 1)
- execute_damage($game_player)
- $game_player.damage_pop.push(DamagePop_Obj.new($game_player)) unless
- guard_success?($game_player, 2)
- apply_blow_power($game_player)
- end
- end
- def apply_damageto_followers
- return if @tool_effect_delay > 0
- # followers
- for actor in $game_player.followers
- next unless actor.visible?
- if obj_size?(actor, @tool_size) and actor.just_hitted == 0
- actor.just_hitted = @tool_inv_time
- next if actor.battler.dead?
- return if guard_success?(actor, 1)
- execute_damage(actor)
- $game_player.damage_pop.push(DamagePop_Obj.new(actor)) unless
- guard_success?(actor, 2)
- apply_blow_power(actor)
- end
- end
- end
- def can_reflect_tool?(target)
- return false if @original_item.reflect_pierce
- return false if target.reflect_flag[@original_item]
- return false unless target.tool_can_use?
- ref_sum = target.battler.features_sum(22, 5)
- return ref_sum > 0.0 && ref_sum > rand
- end
- alias fix_guard_dmg7753 execute_damage
- def execute_damage(target)
- if can_reflect_tool?(target)
- unless @tool_piercing
- @tool_distance = 0
- @tool_destroy_delay = 0
- end
- if target.battler.is_a?(Game_Enemy)
- target.awareness = true
- end
- target.do_counter(@original_item,@user)
- return
- end
- if target.battler_guarding[0]
- if faceto_face?(target) && !@tool_ignore_guard
- target.battler.add_state(9)
- else
- target.battler.remove_state(9)
- end
- end
- fix_guard_dmg7753(target)
- @user.reflect_flag[@original_item] = false if @user.reflect_flag[@original_item]
- end
- unless $imported && $imported["SixthABSBattleRoyale"]
- def apply_self_effect(target, pop=true)
- target.battler.item_apply(@user.battler, @item)
- target.animation_id = animation
- $game_player.damage_pop.push(DamagePop_Obj.new(target))
- @destroy_it = true
- end
- def update_damage
- if @user.battler.is_a?(Game_Actor)
- apply_damageto_enemy unless @tool_reverse_target
- if @tool_selfdamage || @tool_reverse_target
- apply_damageto_player
- apply_damageto_followers unless @ignore_followers
- end
- elsif @user.battler.is_a?(Game_Enemy)
- if $game_player.normal_walk? && !@tool_reverse_target
- apply_damageto_player
- apply_damageto_followers unless @ignore_followers
- end
- apply_damageto_enemy if @tool_selfdamage || @tool_reverse_target
- end
- end
- end
- def update_timer
- update_tool_movement
- @mini_opacity -= 1 if @mini_opacity > 0
- @opacity = 255 if @mini_opacity == 1
- # Edited!!! - by Sixth
- if @tool_effect_type
- @tool_effect_delay -= 1 if @tool_effect_delay >= 0
- if @tool_ori_delay != 0 && @tool_effect_delay < 0
- @tool_effect_delay = @tool_ori_delay
- end
- else
- @tool_effect_delay -= 1 if @tool_effect_delay > 0
- end
- # Edit END!!! - by Sixth
- if @tool_distance == 0
- @tool_destroy_delay -= 1 if @tool_destroy_delay > 0
- @destroy_it = true if @tool_destroy_delay == 0
- end
- update_animation_setting
- end
- def guard_success?(userr, type)
- return false if @tool_ignore_guard
- if userr.battler_guarding[0]
- # guard
- if type == 1
- if rand(101) <= userr.battler_guarding[1]
- return false unless faceto_face?(userr)
- RPG::SE.new(Key::GuardSe, 80).play
- $game_player.damage_pop.push(DamagePop_Obj.new(userr, 2))
- unless @user.making_spiral || @tool_no_guard_destroy
- @tool_distance = 0
- @tool_destroy_delay = 0
- end
- play_hit_animation(userr)
- return true
- end
- # block
- elsif type == 2
- return false unless faceto_face?(userr)
- $game_player.damage_pop.push(DamagePop_Obj.new(userr, 1))
- return true
- end
- end
- return false
- end
- end
- module DisplayTools
- # Tools can't be changed on cooldown from now on.
- def self.tool_cool(type)
- case type
- when :wp
- return @pearl_tool_sprite.weapon_cooldown > 0
- when :ar
- return @pearl_tool_sprite.armor_cooldown > 0
- when :i1
- return @pearl_tool_sprite.item_cooldown > 0
- when :i2
- return @pearl_tool_sprite.item_cooldown2 > 0
- when :s1
- return @pearl_tool_sprite.skill_cooldown > 0
- when :s2
- return @pearl_tool_sprite.skill_cooldown2 > 0
- when :s3
- return @pearl_tool_sprite.skill_cooldown3 > 0
- when :s4
- return @pearl_tool_sprite.skill_cooldown4 > 0
- end
- end
- end
- class << Input
- # Now only reducing cooldown time on the Map and not in the menus!
- def update_pearl_abs_cooldown
- PearlKey.update # Removed!
- if SceneManager.scene_is?(Scene_Map)
- eval_cooldown($game_party.all_members) if !$game_party.nil?
- eval_cooldown($game_map.enemies) if !$game_map.nil?
- end
- end
- alias add_glob_cool3321 eval_cooldown
- def eval_cooldown(operand)
- operand.each { |char| char.glob_cool -= 1 if char.glob_cool > 0 }
- add_glob_cool3321(operand)
- end
- end
- class RPG::BaseItem
- def glob_cool
- @note =~ /Tool Global Cool = (\d+)/i ? $1.to_i : 0
- end
- def reverse_target
- @note =~ /<reverse target>/i ? true : false
- end
- def tool_size_ex
- @note =~ /<tool size ex: (\d+), (\d+), (\d+)>/i ? [$1.to_i,$2.to_i,$3.to_i] : nil
- end
- def no_guard_destroy
- @note =~ /<no guard destroy>/i ? true : false
- end
- def ignore_guard
- @note =~ /<ignore guard>/i ? true : false
- end
- def effect_delay_type
- @note.include?("<new effect delay>") ? true : false
- end
- def tool_inv_time
- @note =~ /<inv time: (\d+)>/i ? $1.to_i : Falcao_ABS_Fix1::InvincibleTime
- end
- def reflect_pierce
- @note.include?("<ignore reflect>") ? true : false
- end
- end
- class Game_Battler < Game_BattlerBase
- attr_accessor :pop_fix, :glob_cool, :conf_type, :reflecting
- alias fix_regen_posp5542 initialize
- def initialize
- @glob_cool = 0
- @conf_type = nil
- @reflecting = false
- @pop_fix = {:hp => false, :mp => false, :tp => false}
- fix_regen_posp5542
- end
- alias conf_addon7411 add_new_state
- def add_new_state(state_id)
- if Falcao_ABS_Fix1::ConfStates.include?(state_id)
- @conf_type = Falcao_ABS_Fix1::ConfCustom.keys.sample
- end
- conf_addon7411(state_id)
- end
- def regenerate_hp
- old_hp = self.hp
- damage = -(mhp * hrg).to_i
- perform_map_damage_effect if $game_party.in_battle && damage > 0
- @result.hp_damage = [damage, max_slip_damage].min
- self.hp -= @result.hp_damage
- @pop_fix[:hp] = old_hp != self.hp ? true : false
- end
- def regenerate_mp
- old_mp = self.mp
- @result.mp_damage = -(mmp * mrg).to_i
- self.mp -= @result.mp_damage
- @pop_fix[:mp] = old_mp != self.mp ? true : false
- end
- def regenerate_tp
- old_tp = self.tp
- @result.tp_damage = -(max_tp * trg).to_i
- self.tp -= @result.tp_damage
- @pop_fix[:tp] = old_tp != self.tp ? true : false
- end
- # Global cooldowns.
- alias add_glob_cool7764 apply_cooldown
- def apply_cooldown(item, value)
- @glob_cool = item.glob_cool
- add_glob_cool7764(item, value)
- end
- end
- class Game_CharacterBase
- attr_accessor :die_sswitch
- alias fix_act_check8836 battler_acting?
- def battler_acting?
- return true if @battler_guarding[0]
- fix_act_check8836
- end
- if Falcao_ABS_Fix1::ConfEnabled == true
- alias confusion_addon7743 move_straight
- def move_straight(d, turn_ok = true)
- unless battler.nil? || self.is_a?(Projectile)
- if !Falcao_ABS_Fix1::ConfPlayerOnly || (Falcao_ABS_Fix1::ConfPlayerOnly && self.is_a?(Game_Player))
- case Falcao_ABS_Fix1::ConfType
- when :reverse
- d = Falcao_ABS_Fix1::ConfStates.any? {|id| battler.state?(id)} ? reverse_dir(d) : d
- when :random
- d = Falcao_ABS_Fix1::ConfStates.any? {|id| battler.state?(id)} ? [2,4,6,8].sample : d
- when :custom
- d = Falcao_ABS_Fix1::ConfStates.any? {|id| battler.state?(id)} ?
- Falcao_ABS_Fix1::ConfCustom[battler.conf_type][d] : d
- end
- end
- confusion_addon7743(d, turn_ok)
- else
- confusion_addon7743(d, turn_ok)
- end
- end
- end
- # Guard fix - part 2.
- def faceto_face?(target)
- if @tool_size.is_a?(Array)
- case @direction
- when 2
- return @tool_size[1] > 1 ? @y > target.y : target.direction == 8
- when 4
- return @tool_size[0] > 1 ? @x < target.x : target.direction == 6
- when 6
- return @tool_size[0] > 1 ? @x > target.x : target.direction == 4
- when 8
- return @tool_size[1] > 1 ? @y < target.y : target.direction == 2
- end
- else
- case @direction
- when 2
- return @tool_size > 1 ? @y > target.y : target.direction == 8
- when 4
- return @tool_size > 1 ? @x < target.x : target.direction == 6
- when 6
- return @tool_size > 1 ? @x > target.x : target.direction == 4
- when 8
- return @tool_size > 1 ? @y < target.y : target.direction == 2
- end
- end
- end
- alias size_addon5543 obj_size?
- def obj_size?(target, size)
- return false if size.nil? || target.nil?
- if size.is_a?(Array)
- distx = (@x - target.x).abs
- disty = (@y - target.y).abs
- if [4,6].include?(@direction) && size[2] == 1
- return true if distx <= size[1] - 1 && disty <= size[0] - 1
- else
- return true if distx <= size[0] - 1 && disty <= size[1] - 1
- end
- else
- size_addon5543(target,size)
- end
- end
- alias size_addon7721 body_size?
- def body_size?(target, size)
- #return false if size.nil?
- if size.is_a?(Array)
- distx = (@x - target[0]).abs
- disty = (@y - target[1]).abs
- if [4,6].include?(@direction) && size[2] == 1
- return true if distx <= size[1] - 1 && disty <= size[0] - 1
- else
- return true if distx <= size[0] - 1 && disty <= size[1] - 1
- end
- else
- size_addon7721(target,size)
- end
- end
- def update_state_action_steps
- # New way of handling Regen features!
- if battler.alive?
- if Graphics.frame_count % 60 == 0 && battler.features_sum(22, 7) != 0.0
- battler.regenerate_hp
- if battler.dead?
- @colapse_time = 80
- if $imported && $imported["SixthABSBattleRoyale"]
- self.aggro_data = {} #if target.battler.is_a?(Game_Actor)
- @agroto_f = nil
- @chasetime = 0 if self.is_a?(Game_Event)
- $game_map.battler_data_ko << self if !$game_map.battler_data_ko.include?(self)
- $game_map.battler_data.delete(self) if $game_map.battler_data.include?(self)
- end
- end
- unless self.battler.is_a?(Game_Enemy) && self.battler.object == true
- pop_damage if battler.pop_fix[:hp] == true && check_popup_enable(:hp)
- end
- end
- if Graphics.frame_count % 60 == 20 && battler.features_sum(22, 8) != 0.0
- battler.regenerate_mp
- pop_damage if battler.pop_fix[:mp] == true && check_popup_enable(:mp)
- end
- if Graphics.frame_count % 60 == 40 && battler.features_sum(22, 9) != 0.0
- battler.regenerate_tp
- pop_damage(battler.trg) if battler.pop_fix[:tp] == true && check_popup_enable(:tp)
- end
- end
- for state in battler.states
- if state.remove_by_walking
- if !battler.state_steps[state.id].nil? &&
- battler.state_steps[state.id] > 0
- battler.state_steps[state.id] -= 1
- end
- if battler.state_steps[state.id] == 0
- battler.remove_state(state.id)
- pop_damage
- end
- end
- if state.restriction == 4
- @stopped_movement = 10
- @pattern = 2 if @knockdown_data[0] == 0 && !@die_sswitch
- end
- state.features.each do |feature|
- if feature.code == 22 && !@die_sswitch
- @knockdown_data[0] = 10 if state.restriction == 4 && feature.data_id == 1
- # Removed the default way...
- #next unless feature.data_id.between?(7, 9)
- #apply_regen_state(state, feature.data_id)
- end
- end
- end
- end
- def check_popup_enable(data)
- if Falcao_ABS_Fix1::RegenPops[data] == 0 ||
- $game_switches[Falcao_ABS_Fix1::RegenPops[data]]
- return true
- end
- return false
- end
- # Added global cooldown checks here.
- alias add_glob_cool1126 tool_can_use?
- def tool_can_use?
- return false if battler.nil? || battler.glob_cool > 0
- #return false if battler.reflecting
- add_glob_cool1126
- end
- end
- class Sprite_Character < Sprite_Base
- # Fixed wrong animation frames when the character is facing down.
- def perform_animated(pattern)
- case pattern
- when 0
- apply_angle_pattern(10, -12, -166) if @character.user.direction == 2
- if @character.user.direction == 4 || @character.user.direction == 6
- apply_angle_pattern(-8, -26, -46)
- self.z = @character.user.screen_z - 1
- end
- apply_angle_pattern(-22, -10, 0) if @character.user.direction == 8
- when 1
- apply_angle_pattern(8, -5, -210) if @character.user.direction == 2
- apply_angle_pattern(-20, -10, 12) if @character.user.direction == 4
- apply_angle_pattern(7, -20, -78) if @character.user.direction == 6
- if @character.user.direction == 8
- apply_angle_pattern(-8, -26, -46)
- self.z = @character.user.screen_z - 1
- end
- when 2
- apply_angle_pattern(0, 0, -266) if @character.user.direction == 2
- apply_angle_pattern(-10, 2, 52) if @character.user.direction == 4
- apply_angle_pattern(8, -15, -126) if @character.user.direction == 6
- apply_angle_pattern(10, -16, - 100) if @character.user.direction == 8
- end
- end
- end
- class Spriteset_Map
- # Dispose fix for dead icons on the map.
- alias fix_dead_icons5542 create_pearl_abs_sprites
- def create_pearl_abs_sprites
- fix_dead_icons5542
- @dead_characters = []
- @dead_iconsprites = []
- for follower in $game_player.followers
- next if follower.visible? == nil
- next unless follower.battler.dead?
- unless @dead_characters.include?(follower)
- sprite = Sprite_DeadIcon.new(@viewport1, follower)
- @dead_iconsprites.push(sprite)
- @dead_characters.push(follower) if !@dead_characters.include?(follower)
- end
- end
- end
- alias fix_dead_icons8888 dispose_pearlabs_sprites
- def dispose_pearlabs_sprites
- fix_dead_icons8888
- @dead_iconsprites.each {|dsprite| dsprite.dispose}
- @dead_iconsprites.clear
- @dead_characters = []
- end
- def hide_boss_bar
- if !@enemyhpsp.nil?
- @enemyhpsp.dispose
- @enemyhpsp = nil
- $game_system.enemy_lifeobject = nil
- @enemy_lifeobject = nil
- end
- end
- end
- class Sprite_LifeBars < Sprite
- # Boss bar disposal fix on map changes.
- alias fix_map_change_bar6322 initialize
- def initialize(viewport, character)
- @map_id = $game_map.map_id
- fix_map_change_bar6322(viewport, character)
- end
- alias fix_map_change_bar5542 update
- def update
- fix_map_change_bar5542
- if boss?
- dispose if !self.disposed? && @map_id != $game_map.map_id
- end
- end
- end
- class Scene_Map < Scene_Base
- def hide_boss_bar
- @spriteset.hide_boss_bar
- end
- end
- class Window_SlotConfirm < Window_Command
- # SE fix.
- def process_ok
- if current_item_enabled?
- Input.update
- deactivate
- call_ok_handler
- else
- Sound.play_buzzer
- end
- end
- end
- class Window_ActorQuickTool < Window_Selectable
- def refresh(actor, kind) # Dual wield fix 2!
- self.contents.clear if self.contents != nil
- @data = []
- case kind
- when :weapon, :armor
- type = kind == :weapon ? actor.equip_slots[0] : actor.equip_slots[1]
- equips = $game_party.equip_items
- equips << actor.equips[0] if actor.equips[0] && !equips.include?(actor.equips[0])
- equips << actor.equips[1] if actor.equips[1] && !equips.include?(actor.equips[1])
- equips.each do |eq|
- next if eq.etype_id > 1
- next unless actor.equippable?(eq)
- next if eq.etype_id != type
- next if eq.tool_data("Exclude From Tool Menu = ", false) == "true"
- @data.push(eq)
- end
- when :skill
- actor.skills.each do |sk|
- next if sk.tool_data("Exclude From Tool Menu = ", false) == "true"
- @data.push(sk)
- end
- when :item
- $game_party.items.each do |it|
- next if it.tool_data("Exclude From Tool Menu = ", false) == "true"
- @data.push(it)
- end
- end
- @item_max = @data.size
- if @item_max > 0
- self.contents = Bitmap.new(width - 32, row_max * 24)
- for i in 0...@item_max
- draw_item(i)
- end
- end
- end
- end
- class Scene_QuickTool < Scene_MenuBase
- # Tool equip fixes.
- def perform_item_ok
- return if @items_w.item.nil?
- case @type_select.current_symbol
- when :weapon
- if DisplayTools.tool_cool(:wp) || $game_player.in_combat_mode?
- Sound.play_buzzer
- else
- actor.change_equip_by_id(0, @items_w.item.id)
- equip_play
- end
- when :armor
- if DisplayTools.tool_cool(:ar) || $game_player.in_combat_mode?
- Sound.play_buzzer
- else
- actor.change_equip_by_id(1, @items_w.item.id)
- equip_play
- end
- when :item
- activate_slots
- when :skill
- activate_slots
- end
- DisplayTools.sprite.refresh_texts
- end
- def open_slots
- if @type_select.current_symbol == :item
- case @slot_confirm.current_symbol
- when :slot1
- if DisplayTools.tool_cool(:i1) || $game_player.in_combat_mode? ||
- actor.assigned_item2 == @items_w.item
- Sound.play_buzzer
- else
- actor.assigned_item = @items_w.item; equip_play
- end
- when :slot2
- if DisplayTools.tool_cool(:i2) || $game_player.in_combat_mode? ||
- actor.assigned_item == @items_w.item
- Sound.play_buzzer
- else
- actor.assigned_item2 = @items_w.item; equip_play
- end
- end
- else
- case @slot_confirm.current_symbol
- when :slot1
- if DisplayTools.tool_cool(:s1) || $game_player.in_combat_mode? ||
- [actor.assigned_skill2,actor.assigned_skill3,actor.assigned_skill4].any? {|skill| skill == @items_w.item}
- Sound.play_buzzer
- else
- actor.assigned_skill = @items_w.item; equip_play
- end
- when :slot2
- if DisplayTools.tool_cool(:s2) || $game_player.in_combat_mode? ||
- [actor.assigned_skill,actor.assigned_skill3,actor.assigned_skill4].any? {|skill| skill == @items_w.item}
- Sound.play_buzzer
- else
- actor.assigned_skill2 = @items_w.item; equip_play
- end
- when :slot3
- if DisplayTools.tool_cool(:s3) || $game_player.in_combat_mode? ||
- [actor.assigned_skill2,actor.assigned_skill,actor.assigned_skill4].any? {|skill| skill == @items_w.item}
- Sound.play_buzzer
- else
- actor.assigned_skill3 = @items_w.item; equip_play
- end
- when :slot4
- if DisplayTools.tool_cool(:s4) || $game_player.in_combat_mode? ||
- [actor.assigned_skill2,actor.assigned_skill3,actor.assigned_skill].any? {|skill| skill == @items_w.item}
- Sound.play_buzzer
- else
- actor.assigned_skill4 = @items_w.item; equip_play
- end
- end
- end
- deactivate_slots
- DisplayTools.sprite.refresh_texts
- end
- alias add_tool_remove9937 update
- def update
- add_tool_remove9937
- update_tool_remove if Falcao_ABS_Fix1::ToolUnequip
- end
- def update_tool_remove
- if PearlKey.trigger?(Key::Weapon[0])
- return unless actor.equips[0]
- if actor.equip_change_ok?(0)
- actor.change_equip(0, nil)
- Sound.play_equip; DisplayTools.sprite.refresh_texts
- else
- Sound.play_buzzer
- end
- end
- if PearlKey.trigger?(Key::Armor[0])
- return unless actor.equips[1]
- if actor.equip_change_ok?(1)
- actor.change_equip(1, nil)
- Sound.play_equip; DisplayTools.sprite.refresh_texts
- else
- Sound.play_buzzer
- end
- end
- if PearlKey.trigger?(Key::Skill[0]) && actor.assigned_skill
- actor.assigned_skill = nil
- Sound.play_equip; DisplayTools.sprite.refresh_texts
- elsif PearlKey.trigger?(Key::Skill2[0]) && actor.assigned_skill2
- actor.assigned_skill2 = nil
- Sound.play_equip; DisplayTools.sprite.refresh_texts
- elsif PearlKey.trigger?(Key::Skill3[0]) && actor.assigned_skill3
- actor.assigned_skill3 = nil
- Sound.play_equip; DisplayTools.sprite.refresh_texts
- end
- if PearlKey.trigger?(Key::Item[0]) && actor.assigned_item
- actor.assigned_item = nil
- Sound.play_equip; DisplayTools.sprite.refresh_texts
- end
- end
- end
- #==============================================================================
- # !!END OF SCRIPT - OHH, NOES!!
- #==============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement