SP Damage help - Steel Beast 6Beets - 02-05-2014
Same here. I just chalk it up to XP being a thing of the past and everyone else moving to both VX and VXACE.
I'm just looking for a basic script that allow me to set skills that damages/absorbs MP from a character/foe. A way to differentiate between MP damage and normal, round-of-the-mill HP damage (i.e different colored damage numbers) would be a nice thing to have as well but not necessary.
Have for example this HP Absorption Script created by RPG Advocate:
Code: # HP Absorbption Skills
# by RPG Advocate
# Sample code used for an 'absorb' common event:
#
# absorb = $game_temp.damage_hook * -1
# $scene.active_battler.damage = absorb
# $scene.active_battler.damage_pop=true
# $scene.active_battler.hp -= absorb
#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
# This class handles temporary data that is not included with save data.
# Refer to "$game_temp" for the instance of this class.
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :damage_hook # damage hook
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias has_initialize initialize
def initialize
# Original call
has_initialize
# Initialize damage hook
@damage_hook = 0
end
end
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass for the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Apply Skill Effects
# user : the one using skills (battler)
# skill : skill
#--------------------------------------------------------------------------
alias has_skill_effect skill_effect
def skill_effect(user, skill, dilute = 1)
# Original call
effective = has_skill_effect(user, skill)
# Set hook to damage
if self.damage.is_a?(Numeric)
$game_temp.damage_hook += self.damage
end
# End Method
return effective
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :active_battler
#--------------------------------------------------------------------------
# * Frame Update (main phase step 1 : action preparation)
#--------------------------------------------------------------------------
alias has_up4s1 update_phase4_step1
def update_phase4_step1
# Reset damage hook
$game_temp.damage_hook = 0
# Original call
has_up4s1
end
end
Something like this would be ideal.
RE: What's up, RMers? - DerVVulfman - 02-06-2014
Um, I wrote one almost two years ago. It's called Simple SP Bonus Damage, and comes with a damage pop add-on. You'll want the damage pop add-on or else you won't see the SP damage in the popups.
RE: What's up, RMers? - Steel Beast 6Beets - 02-06-2014
Oh, thanks DerWulfman. I've got a question though: you say it comes with a damage pop add-on yet in the script says the user may wish to add a compatible SP Damage Pop script because there is no damage pop for this effect.
Also, I can't help but notice this script isn't included in the Master List.
[split] What's up, RMers? - Steel Beast 6Beets - 02-07-2014
(02-07-2014, 04:31 AM)DerVVulfman Wrote: @Steel Beast 6Beets: While the script said it would need a compatible SP damage pop script, you can look further down and grab one. And the SP damage system is listed in the Skills Development spoiler. I see, I see. Seems I misinterpreted your post yesterday, I blame lack of sleep. I tested the script today and everything works perfectly now.
One last thing though: could the SP damage pop script be made compatible with the SP drain common call I posted?
RE: What's up, RMers? - DerVVulfman - 02-08-2014
The damage pop uses a few values to see if a battler has a damage pop and sends it into my damage pop system. IF your Drain/Osmosis script performs changes to the Game_Battler class, you need very few changes if you're using this one too.
The SP damage system adds @dvv_sp_damage_pop (a boolean or true/false/nil) value to see if the actor needs a SP damage pop to show, and @dvv_sp_damage, which holds the value of SP damage (nil by default). And, it sends the value to the Damage Pop sprite system by using self.dvv_sp_damage much the same way as self.damage is used to send damage values to the default pop system.
Just look at the Initialize and the end of the skill_effect methods in the Simple SP Damage script.
RE: What's up, RMers? - Steel Beast 6Beets - 02-08-2014
(02-08-2014, 04:24 AM)DerVVulfman Wrote: The damage pop uses a few values to see if a battler has a damage pop and sends it into my damage pop system. IF your Drain/Osmosis script performs changes to the Game_Battler class, you need very few changes if you're using this one too.
The SP damage system adds @dvv_sp_damage_pop (a boolean or true/false/nil) value to see if the actor needs a SP damage pop to show, and @dvv_sp_damage, which holds the value of SP damage (nil by default). And, it sends the value to the Damage Pop sprite system by using self.dvv_sp_damage much the same way as self.damage is used to send damage values to the default pop system.
Just look at the Initialize and the end of the skill_effect methods in the Simple SP Damage script. The Draining script does modify the Game_Battler class:
Code: #==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass for the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Apply Skill Effects
# user : the one using skills (battler)
# skill : skill
#--------------------------------------------------------------------------
alias has_skill_effect skill_effect
def skill_effect(user, skill, dilute = 1)
# Original call
effective = has_skill_effect(user, skill)
# Set hook to damage
if self.damage.is_a?(Numeric)
$game_temp.damage_hook += self.damage
end
# End Method
return effective
end
end
I really ought to learn about coding stuff.
RE: SP Damage help - DerVVulfman - 02-09-2014
I split these posts from the What's Up RMers topic as it became a support topic all its own.
I see that you are using HP Absorb from Good Ol' RPG Advocate. It's an old script, but reliable. However, it does not perform SP damage on its own. I am assuming that you want to have a skill you can use to hurt a target's SP reservoir and absorb it. For this, you would need either a new script, or my Simple SP Damage script and an 'edit/alter' of the HP Absorb script.
If you wish to alter the HP Absorb script, I would suggest changing every variable that relates to normal damage. Mainly you would change the self.damage value in RPG Advocate's Game_Battler class should be replaced with self.dvv_sp_damage, and any instance of damage_hook to sp_damage_hook.
You would have this script below my Simple SP Damage so my SP damage gets checked first before the SP Absorbtion script takes place... and lastly the SP damage pop below all three.
Oh, and if you plan to have HP absorbtion.... change the names of your aliased methods like changing has_initialize to has_sp_initialize. You don't want two similarly designed scripts screwing each other up.
RE: SP Damage help - Steel Beast 6Beets - 02-09-2014
Alright, I edited the HP absorption script to a SP absorption script:
Code: # SP Absorbption Skills
# by RPG Advocate
# Sample code used for an 'absorb' common event:
#
# absorb = $game_temp.sp_damage_hook * -1
# $scene.active_battler.damage = absorb
# $scene.active_battler.damage_pop=true
# $scene.active_battler.sp -= absorb
#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
# This class handles temporary data that is not included with save data.
# Refer to "$game_temp" for the instance of this class.
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :sp_damage_hook # sp damage hook
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias has_sp_initialize initialize
def initialize
# Original call
has_sp_initialize
# Initialize damage hook
@sp_damage_hook = 0
end
end
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass for the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Apply Skill Effects
# user : the one using skills (battler)
# skill : skill
#--------------------------------------------------------------------------
alias has_skill_effect skill_effect
def skill_effect(user, skill, dilute = 1)
# Original call
effective = has_skill_effect(user, skill)
# Set hook to damage
if self.dvv_sp_damage.is_a?(Numeric)
$game_temp.sp_damage_hook += self.dvv_sp_damage
end
# End Method
return effective
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :active_battler
#--------------------------------------------------------------------------
# * Frame Update (main phase step 1 : action preparation)
#--------------------------------------------------------------------------
alias has_up4s1 update_phase4_step1
def update_phase4_step1
# Reset damage hook
$game_temp.sp_damage_hook = 0
# Original call
has_up4s1
end
end
And ran into a "stack level too deep" error at line 84:
Code: $game_temp.sp_damage_hook = 0
RE: SP Damage help - DerVVulfman - 02-10-2014
Odd... unless you are also using HP absorption. If this is the case, you would need to change the aliases like so:
Code: # SP Absorbption Skills
# by RPG Advocate
# Sample code used for an 'absorb' common event:
#
# absorb = $game_temp.sp_damage_hook * -1
# $scene.active_battler.dvv_sp_damage_pop = absorb
# $scene.active_battler.dvv_sp_damage_pop=true
# $scene.active_battler.sp -= absorb
#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
# This class handles temporary data that is not included with save data.
# Refer to "$game_temp" for the instance of this class.
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :sp_damage_hook # damage hook
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias has_sp_initialize initialize
def initialize
# Original call
has_sp_initialize
# Initialize damage hook
@sp_damage_hook = 0
end
end
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass for the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Apply Skill Effects
# user : the one using skills (battler)
# skill : skill
#--------------------------------------------------------------------------
alias has_sp_skill_effect skill_effect
def skill_effect(user, skill)
# Original call
effective = has_sp_skill_effect(user, skill)
# Set hook to damage
if self.dvv_sp_damage.is_a?(Numeric)
$game_temp.sp_damage_hook += self.dvv_sp_damage
end
# End Method
return effective
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :active_battler
#--------------------------------------------------------------------------
# * Frame Update (main phase step 1 : action preparation)
#--------------------------------------------------------------------------
alias has_sp_up4s1 update_phase4_step1
def update_phase4_step1
# Reset damage hook
$game_temp.sp_damage_hook = 0
# Original call
has_sp_up4s1
end
end
This would be shown in your editor as:
> SP DAMAGE SCRIPT
> SP ABSORBTION SCRIPT
> SP DAMAGE POP SCRIPT
Oh, I removed the ,dilute=1 as I think it was a leftover piece. It's not referenced anywhere in any other part of the HP absorption system.
RE: SP Damage help - Steel Beast 6Beets - 02-10-2014
I tested the script again and ran into a NoMethodError:
Code: undefined method 'dvv_sp_damage_p' for #<Game_actor:0x8d93d10>
|