Skills that cost HP
Version: 1.2
Author: modern algebra
Date: February 27, 2008
Description
This script allows you to assign hp cost to skills. This means that you can make it so that a skill can hurt (or heal) the user when he casts it.
Features
- Allows skills to have an HP basic cost, as well as a percentage cost
- Very intuitive configuration; it is easy to set up
Instructions
See inside the header for instructions
Script
#======================================================================
# Skills with HP Cost
# Author: modern algebra (rmrk.net)
# Version: 1.2
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Instructions:
# Set up the database below according to instructions
#======================================================================
# ** RPG::Skill
#======================================================================
class RPG::Skill
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * HP Cost
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def hp_cost
# Default value for skills with undefined HP cost
cost, percent = 0, 0
case @id
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Editable Region
#-----------------------------------------------------------------------------------------------------------------------
# For each skill to which you want to assign an hp_cost, set it up like so:
# when skill ID
# cost = <the amount of HP that you want to subtract from the user. If the number is
# negative, then the user of the skill will be healed by that amount>
# percent = <the percentage of max HP you wish to subtract from the user. If negative,
# then the user of the skill will be healed by that percentage>
#
# There are a couple of examples below. Feel free to delete them once you understand
# what is required of you
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
when 1 # Skill #1 in database
cost = 10 # The amount of HP to subtract from user
percent = 20 # The % of maxhp to subtract from user
when 5
cost = 100
when 33
percent = 10
end
percent = percent.to_f / 100
return cost, percent
end
end
#=====================================================================
# ** Game_Battler
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Summary of Changes:
# aliased methods - skill_can_use?, skill_effect
#=====================================================================
class Game_Battler
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Skill Can Use?
#-----------------------------------------------------------------------------------------------------------------------
# Added a requirement that a skill cannot be used if the user's HP is less than the HP Cost
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_hp_cost_skills_can_use? skill_can_use?
def skill_can_use? (skill)
if !skill.nil?
basic, percent = skill.hp_cost
return false if (basic + (percent*maxhp).to_i) > hp
end
return modalg_hp_cost_skills_can_use? (skill)
end
end
class Scene_Skill
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Skill Effect
#-----------------------------------------------------------------------------------------------------------------------
# Subtract the HP Cost from the user
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modalg_hp_cost_useskill_7uj3 use_skill_nontarget
def use_skill_nontarget (*args)
if !@skill.nil?
basic, percent = @skill.hp_cost
@actor.hp -= ((percent*@actor.maxhp).to_i + basic)
end
modalg_hp_cost_useskill_7uj3 (*args)
end
end
class Scene_Battle
#--------------------------------------------------------------------------
# * Execute Battle Action: Skill
#--------------------------------------------------------------------------
alias mala_hpcost_excut_skill_6yh1 execute_action_skill
def execute_action_skill (*args)
mala_hpcost_excut_skill_6yh1 (*args)
if @active_battler && @active_battler.action && @active_battler.action.skill
basic, percent = @active_battler.action.skill.hp_cost
@active_battler.hp -= ((percent*@active_battler.maxhp).to_i + basic)
end
end
end
Credit
Thanks
- Johnny Intergalactic Man, for requesting the script
Support
Just post in this topic at rmrk for quick support. I wrote this script very quickly and have not done any extensive testing, so please inform me if any issues arise.
Known Compatibility Issues
It should be compatible with any script that does not perform the same function as this one. If any issues arise, I will be happy to fix them for you.
This could come in handy for healing spells. Though it would be better if you could set a percentage value or a random value between numbers... But so far this sounds good. I'm definitely using this!
EDIT: I guess not! XD It only works for the user. Oh well. Could come to use sometime.
You can set healing spells in the database normally. Just set the damage effect to a negative value.
I know that, but it's a random value. I guess that's okay though, that's why there's such a thing as updating =P I remember in 2000 that you could set a spell to heal... I'll have to check it again.
random? set variance, pdef_f, and mdef_f to 0 and it will do the exact amount you set in basic effect
hate to rain on ur parade but.... this could be done with common events =P
Yeah, I know that, but it's easier through a script like this.
And also, you aren't able to disable the skill easily if the hero doesn't have enough HP to cast it through events. It's a huge pain. With scripts, it simply doesn't allow you to use the skill if you don't have enough HP to do so.
This script also works with MP. You just have to change few things that have hp in the script.
You can set the skill to decrease the user's MP through the database :P
Yea. but I wonder we can modify the script to do percent instead.
Yes...Very good script..
I might use this script..
If I found bug or other error I will post in this thread...
Thank you~^^
This is awesome! Thanks a lot.
Does this work with GubiD's Tactical Battle System VX?
I couldnt get it working on there for some reason. If there is a patch to make it work, or if you know it doesn't work, please get back to me on this one.
Thanks a lot. Jesse
Ps. You have made all of my favourite work. (Not a big Yanfly fan, not saying Yanfly is bad, just an opinion)
I don't know if it works with GubiD or not, but I would think it strange not to. Have you tried putting this script below Gubid's TBS in the Script Editor. It should still be above Main.
And thanks for the compliment.
Yeah, I've tried that. I'm not too skilled at scripting in general, but if I have a problem I can usually find a solution... But this eludes me at every turn... Theres no errors. No leads... Just... Nothing.
So there aren't any errors or anything - it just isn't being applied?
EDIT::
I just downloaded and tested - it worked for me - the HP was reduced, though there was no damage popup.
Hmm, I didnt even get that much out of it... What exactly did you do then? I may have written it wrong, or in the wrong place. Hence the fact that Im only human. xD Lol. And thanks for your help.
All I did was put it directly above Main and below all parts of Gubid's script
This looks nice...
but I want one for RMXP ;_;
Hello,
I got an error when using this script. The error comes when I attempt to use the skill of a hero who does not have any skills yet.
line 61: NoMethodError occurred.
undefined method 'hp_cost' for nil:NilClass
Thanks a bunch!
I updated the script in the main post. Replace your version with that and see if it works.
It works perfectly now! Thanks for your quick responses. I'm using a lot of your scripts because they are just too useful to pass up. ;D
Would it be possible to make something with a state like if inflicted with a state all skills that require MP will use up HP instead?
I smell my 13th class - heh heh heh :zwink:, the Bloodmage. Great job yet again.
hi would it be at all possible to have it so it shows the hp cost with the skill like it dse for mp
Hey Modern Algebra, just wanted to say that I can't seem to get this script functioning with Tankentai. I've tried placing this script into a fresh download of the SBS, changed the script to have a skill take 40% of my maximum HP, and when I use the skill, it kills the user.
I was attempting to make an attack that Drained his health and healed all the allies.
I made another attack that damaged all enemies and drained 10% of his Maximum HP, and it took way more than 10%. I've tried placing the script, above, below, all around and upside down in my list of scripts, and still doesn't seem to work. Any idea? I love this script and have a character in my RPG completely based around his skills functioning like this. I'm also not a complete newbie when it comes to editting scripts and customizing them a bit, so I do not think that is the issue. You placed a pretty easy to follow example in the script itself.
Hmm, it looks like it might not have anything to do with tankentai - just a straight up logic error - totally my fault. I'll fix it.
EDIT::
Alright, I did a quick and messy "fix" and it is now in the first post. It should fix the initial problem, which was that I was subtracting the HP every time the skill hit a target. So 3 targets meant 120% instead of 40%. However, I haven't tested the new fix so I might have screwed up with syntax or any other number of reasons it's dumb not to test things.
Also, now it really might not be compatible with Tankentai, as I directly alias a method in Scene_Battle, which may operate unexpectedly now. So test it out in a new project and see if everything is dandy before putting it in your main project. If I created an incompatibility or created a new error, just let me know and I will address the problem more fully once I have time.
Here is the error that I receive now. The skill fires off, but when it goes to calculate the HP done, this happens. I don't actually see the HP get subtracted.
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg835.imageshack.us%2Fimg835%2F4137%2Fhperror.jpg&hash=22668009ca0f7fccb21a4da19f503b534414f2d6) (http://img835.imageshack.us/i/hperror.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
Sorry, dumb mistake. I have again updated the first post so try it again.
Getting a similar problem to the guy above. The HP is subtracted after the skill is used, but then I get this error and the game crashes.
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi1141.photobucket.com%2Falbums%2Fn594%2FBreezer226%2FError.png&hash=8272acc3cd5d60418871c0793f3e8d655029483e)
Are you using a non-default battle system? Either way, you might be able to fix it by replacing:
class Scene_Battle
#--------------------------------------------------------------------------
# * Execute Battle Action: Skill
#--------------------------------------------------------------------------
alias mala_hpcost_excut_skill_6yh1 execute_action_skill
def execute_action_skill (*args)
mala_hpcost_excut_skill_6yh1 (*args)
basic, percent = @active_battler.action.skill.hp_cost
@active_battler.hp -= ((percent*@active_battler.maxhp).to_i + basic)
end
end
with:
class Scene_Battle
#--------------------------------------------------------------------------
# * Execute Battle Action: Skill
#--------------------------------------------------------------------------
alias mala_hpcost_excut_skill_6yh1 execute_action_skill
def execute_action_skill (*args)
mala_hpcost_excut_skill_6yh1 (*args)
return if !@active_battler || !@active_battler.action || !@active_battler.action.skill
basic, percent = @active_battler.action.skill.hp_cost
@active_battler.hp -= ((percent*@active_battler.maxhp).to_i + basic)
end
end
Ah, that took care of it. Thanks. I was using the Tankentai Side View System, which may have caused the problem. But that code took care of it.
How do I set up the displayed cost for a skill? To have either the text be misleading or have a skill cost both MP and HP is very annoying.