Advertiser Content
Seen 2 Days Ago
Posted 2 Weeks Ago
57 posts
1.8 Years
Hi, i want to create a new status effect, Bleeding. I thought it would be cool because is a status that makes sense for a lot of attacks of many types to be able to get. And would be cool for lots of new attacks like "Thorn whip" a physical grass move that has Bleeding as a possible effect.
The idea is that the status will work VERY similar to burn, you lost hp at the end of every turn but the difference is that it cuts down the defense stats. Also, this status can not affect ghost types (i don't think they can bleed right?)
I looked at the script of the burn status but i suck at scripting really. If someone is interested and likes the idea i would love to see how to put it in the game with its own status graphics and all.
Male
Seen 14 Hours Ago
Posted August 28th, 2019
5 posts
6.7 Years
This is actually something I've just started playing around with. I'm stuck on my current status effect so I'll give you a hand with yours. What you want is really straight forward so it shouldn't be any trouble.

First thing you wanna do is go into PBStatuses. This tells the game there is a condition. Just add the bleed stuff thats in red(don't miss the comma after the second frozen):
Spoiler:

#70925035
begin
module PBStatuses
SLEEP = 1
POISON = 2
BURN = 3
PARALYSIS = 4
FROZEN = 5
BLEED = 6

def PBStatuses.getName(id)
names = [
_INTL("healthy"),
_INTL("asleep"),
_INTL("poisoned"),
_INTL("burned"),
_INTL("paralyzed"),
_INTL("frozen"),
_INTL("bleeding")


]
return names[id]
end
end

rescue Exception
if $!.is_a?(SystemExit) || "#{$!.class}"=="Reset"
raise $!
end
end


Next, we go to PokeBattle_BattlerEffects. Here we want to find: Generalised status displays. This is just general stuff the game will say. Add what's in red.
Spoiler:

#===============================================================================
# Generalised status displays
#===============================================================================
def pbContinueStatus(showAnim=true)
case self.status
when PBStatuses::SLEEP
@battle.pbCommonAnimation("Sleep",self,nil)
@battle.pbDisplay(_INTL("{1} is fast asleep.",pbThis))
when PBStatuses::POISON
@battle.pbCommonAnimation("Poison",self,nil)
@battle.pbDisplay(_INTL("{1} was hurt by poison!",pbThis))
when PBStatuses::BURN
@battle.pbCommonAnimation("Burn",self,nil)
@battle.pbDisplay(_INTL("{1} was hurt by its burn!",pbThis))
when PBStatuses::PARALYSIS
@battle.pbCommonAnimation("Paralysis",self,nil)
@battle.pbDisplay(_INTL("{1} is paralyzed! It can't move!",pbThis))
when PBStatuses::FROZEN
@battle.pbCommonAnimation("Frozen",self,nil)
@battle.pbDisplay(_INTL("{1} is frozen solid!",pbThis))
when PBStatuses::BLEED
@battle.pbCommonAnimation("Bleed",self,nil)
@battle.pbDisplay(_INTL("{1} is bleeding!",pbThis))

end
end

def pbCureStatus(showMessages=true)
oldstatus=self.status
self.status=0
self.statusCount=0
if showMessages
case oldstatus
when PBStatuses::SLEEP
@battle.pbDisplay(_INTL("{1} woke up!",pbThis))
when PBStatuses::POISON
when PBStatuses::BURN
when PBStatuses::PARALYSIS
@battle.pbDisplay(_INTL("{1} was cured of paralysis.",pbThis))
when PBStatuses::FROZEN
@battle.pbDisplay(_INTL("{1} thawed out!",pbThis))
when PBStatuses::BLEED
@battle.pbDisplay(_INTL("{1} stopped bleeding!",pbThis))

end
end
PBDebug.log("[Status change] #{pbThis}'s status was cured")
end


Next, you wanna go to bottom and paste this. This going to tell the game who can get bleed.
Spoiler:

#===============================================================================
# Bleed
#===============================================================================
def pbCanBleed?(attacker,showMessages,move=nil)
return false if fainted?
if self.status==PBStatuses::BLEED
@battle.pbDisplay(_INTL("{1} is already bleeding.",pbThis)) if showMessages
return false
end
if self.status!=0 ||
(@effects[PBEffects::Substitute]>0 && (!move || !move.ignoresSubstitute?(attacker)))
@battle.pbDisplay(_INTL("But it failed!")) if showMessages
return false
end
if pbHasType?(:GHOST) && !hasWorkingItem(:RINGTARGET)
@battle.pbDisplay(_INTL("It doesn't affect {1}...",pbThis(true))) if showMessages
return false
end
if !attacker || !attacker.hasMoldBreaker
if (hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)) ||
(hasWorkingAbility(:LEAFGUARD) && (@battle.pbWeather==PBWeather::SUNNYDAY ||
@battle.pbWeather==PBWeather::HARSHSUN))
@battle.pbDisplay(_INTL("{1}'s {2} prevents bleeding!",pbThis,PBAbilities.getName(self.ability))) if showMessages
return false
end
if pbPartner.hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)
abilityname=PBAbilities.getName(pbPartner.ability)
@battle.pbDisplay(_INTL("{1}'s partner's {2} prevents bleeding!",pbThis,abilityname)) if showMessages
return false
end
end
if pbOwnSide.effects[PBEffects::Safeguard]>0 &&
(!attacker || !attacker.hasWorkingAbility(:INFILTRATOR))
@battle.pbDisplay(_INTL("{1}'s team is protected by Safeguard!",pbThis)) if showMessages
return false
end
return true
end

def pbCanBleedSynchronize?(opponent)
return false if fainted?
return false if self.status!=0
if pbHasType?(:FIRE) && !hasWorkingItem(:RINGTARGET)
@battle.pbDisplay(_INTL("{1}'s {2} had no effect on {3}!",
opponent.pbThis,PBAbilities.getName(opponent.ability),pbThis(true)))
return false
end
if (hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)) ||
(hasWorkingAbility(:LEAFGUARD) && (@battle.pbWeather==PBWeather::SUNNYDAY ||
@battle.pbWeather==PBWeather::HARSHSUN))
@battle.pbDisplay(_INTL("{1}'s {2} prevents {3}'s {4} from working!",
pbThis,PBAbilities.getName(self.ability),
opponent.pbThis(true),PBAbilities.getName(opponent.ability)))
return false
end
if pbPartner.hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)
@battle.pbDisplay(_INTL("{1}'s {2} prevents {3}'s {4} from working!",
pbPartner.pbThis,PBAbilities.getName(pbPartner.ability),
opponent.pbThis(true),PBAbilities.getName(opponent.ability)))
return false
end
return true
end

def pbBleed(attacker=nil,msg=nil)
self.status=PBStatuses::BLEED
self.statusCount=0
@battle.pbCommonAnimation("Bleed",self,nil)
if msg && msg!=""
@battle.pbDisplay(msg)
else
@battle.pbDisplay(_INTL("{1} was wounded!",pbThis))
end
PBDebug.log("[Status change] #{pbThis} was wounded")
if attacker && self.index!=attacker.index &&
self.hasWorkingAbility(:SYNCHRONIZE)
if attacker.pbCanBurnSynchronize?(self)
PBDebug.log("[Ability triggered] #{self.pbThis}'s Synchronize")
attacker.pbBurn(nil,_INTL("{1}'s {2} wounded {3}!",self.pbThis,
PBAbilities.getName(self.ability),attacker.pbThis(true)))
end
end
end


Next we are going drop the defense of wounded pokemon. Go to PokeBattle_Move and right under this:
Spoiler:

if !attacker.hasMoldBreaker
if opponent.hasWorkingAbility(:MARVELSCALE) &&
opponent.status>0 && pbIsPhysical?(type)
defmult=(defmult*1.5).round
end


Put this:
Spoiler:

if opponent.status=PBStatuses::BLEED
defmult=(defmult/2).round
end


Our next step is in PokeBattle_Battle. We are telling Shedskin, Hydration, and Healer that they can heal this condition. If you don't want it to do that then don't add the things in red.
Spoiler:

if (i.hasWorkingAbility(:SHEDSKIN) && pbRandom(10)<3) ||
(i.hasWorkingAbility(:HYDRATION) && (pbWeather==PBWeather::RAINDANCE ||
pbWeather==PBWeather::HEAVYRAIN))
if i.status>0
PBDebug.log("[Ability triggered] #{i.pbThis}'s #{PBAbilities.getName(i.ability)}")
s=i.status
i.pbCureStatus(false)
case s
when PBStatuses::SLEEP
pbDisplay(_INTL("{1}'s {2} cured its sleep problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::POISON
pbDisplay(_INTL("{1}'s {2} cured its poison problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BURN
pbDisplay(_INTL("{1}'s {2} healed its burn!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::PARALYSIS
pbDisplay(_INTL("{1}'s {2} cured its paralysis!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::FROZEN
pbDisplay(_INTL("{1}'s {2} thawed it out!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BLEED
pbDisplay(_INTL("{1}'s {2} healed its wound!",i.pbThis,PBAbilities.getName(i.ability)))

end
end
end
# Healer
if i.hasWorkingAbility(:HEALER) && pbRandom(10)<3
partner=i.pbPartner
if partner && partner.status>0
PBDebug.log("[Ability triggered] #{i.pbThis}'s #{PBAbilities.getName(i.ability)}")
s=partner.status
partner.pbCureStatus(false)
case s
when PBStatuses::SLEEP
pbDisplay(_INTL("{1}'s {2} cured its partner's sleep problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::POISON
pbDisplay(_INTL("{1}'s {2} cured its partner's poison problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BURN
pbDisplay(_INTL("{1}'s {2} healed its partner's burn!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::PARALYSIS
pbDisplay(_INTL("{1}'s {2} cured its partner's paralysis!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::FROZEN
pbDisplay(_INTL("{1}'s {2} thawed its partner out!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BLEED
pbDisplay(_INTL("{1}'s {2} healed its partner's wound!",i.pbThis,PBAbilities.getName(i.ability)))

end
end
end
end


Just a little further down is this piece of code
Spoiler:

# Burn
if i.status==PBStatuses::BURN
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Status damage] #{i.pbThis} took damage from burn")
if i.hasWorkingAbility(:HEATPROOF)
PBDebug.log("[Ability triggered] #{i.pbThis}'s Heatproof")
i.pbReduceHP((i.totalhp/16).floor)
else
i.pbReduceHP((i.totalhp/8).floor)
end
i.pbContinueStatus
end


Right underneath put this:
Spoiler:

# Bleed
if i.status==PBStatuses::BLEED
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Status damage] #{i.pbThis} is bleeding and lost some health! ")
i.pbReduceHP((i.totalhp/8).floor)
end
end
i.pbContinueStatus
end


Final bit of code here. This goes at the bottom of PokeBattle_MoveEffects. Make sure to change the XXX to an unused function code.
Spoiler:

################################################################################
# Gives the target Bleed.
################################################################################
class PokeBattle_Move_XXX < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !opponent.pbCanBleed?(attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbBleed(attacker)
return 0
end

def pbAdditionalEffect(attacker,opponent)
return if opponent.damagestate.substitute
if opponent.pbCanBleed?(attacker,false,self)
opponent.pbBleed(attacker)
end
end
end


Now just add this to the bottom of your Moves.pbs. Change YYY to an unused Id. And change XXX to whatever the you changed the XXX from above to.
Spoiler:

YYY,THORNWHIP,Thorn Whip,XXX,60,GRASS,Physical,100,20,30,00,0,abcef,"The user strikes the target with a whip covered in thorns. It may cause bleeding."


And for the cherry on top. The graphics. Put statuses into the folder Graphics/Pictures. Put icon_statues into Graphics/Pictures/Battle

That should be everything. Let me know if something didn't work. (It's 100% likely as I am still a newb)
Seen 2 Days Ago
Posted 2 Weeks Ago
57 posts
1.8 Years
This is actually something I've just started playing around with. I'm stuck on my current status effect so I'll give you a hand with yours. What you want is really straight forward so it shouldn't be any trouble.

First thing you wanna do is go into PBStatuses. This tells the game there is a condition. Just add the bleed stuff thats in red(don't miss the comma after the second frozen):
Spoiler:

#70925035
begin
module PBStatuses
SLEEP = 1
POISON = 2
BURN = 3
PARALYSIS = 4
FROZEN = 5
BLEED = 6

def PBStatuses.getName(id)
names = [
_INTL("healthy"),
_INTL("asleep"),
_INTL("poisoned"),
_INTL("burned"),
_INTL("paralyzed"),
_INTL("frozen"),
_INTL("bleeding")


]
return names[id]
end
end

rescue Exception
if $!.is_a?(SystemExit) || "#{$!.class}"=="Reset"
raise $!
end
end


Next, we go to PokeBattle_BattlerEffects. Here we want to find: Generalised status displays. This is just general stuff the game will say. Add what's in red.
Spoiler:

#===============================================================================
# Generalised status displays
#===============================================================================
def pbContinueStatus(showAnim=true)
case self.status
when PBStatuses::SLEEP
@battle.pbCommonAnimation("Sleep",self,nil)
@battle.pbDisplay(_INTL("{1} is fast asleep.",pbThis))
when PBStatuses::POISON
@battle.pbCommonAnimation("Poison",self,nil)
@battle.pbDisplay(_INTL("{1} was hurt by poison!",pbThis))
when PBStatuses::BURN
@battle.pbCommonAnimation("Burn",self,nil)
@battle.pbDisplay(_INTL("{1} was hurt by its burn!",pbThis))
when PBStatuses::PARALYSIS
@battle.pbCommonAnimation("Paralysis",self,nil)
@battle.pbDisplay(_INTL("{1} is paralyzed! It can't move!",pbThis))
when PBStatuses::FROZEN
@battle.pbCommonAnimation("Frozen",self,nil)
@battle.pbDisplay(_INTL("{1} is frozen solid!",pbThis))
when PBStatuses::BLEED
@battle.pbCommonAnimation("Bleed",self,nil)
@battle.pbDisplay(_INTL("{1} is bleeding!",pbThis))

end
end

def pbCureStatus(showMessages=true)
oldstatus=self.status
self.status=0
self.statusCount=0
if showMessages
case oldstatus
when PBStatuses::SLEEP
@battle.pbDisplay(_INTL("{1} woke up!",pbThis))
when PBStatuses::POISON
when PBStatuses::BURN
when PBStatuses::PARALYSIS
@battle.pbDisplay(_INTL("{1} was cured of paralysis.",pbThis))
when PBStatuses::FROZEN
@battle.pbDisplay(_INTL("{1} thawed out!",pbThis))
when PBStatuses::BLEED
@battle.pbDisplay(_INTL("{1} stopped bleeding!",pbThis))

end
end
PBDebug.log("[Status change] #{pbThis}'s status was cured")
end


Next, you wanna go to bottom and paste this. This going to tell the game who can get bleed.
Spoiler:

#===============================================================================
# Bleed
#===============================================================================
def pbCanBleed?(attacker,showMessages,move=nil)
return false if fainted?
if self.status==PBStatuses::BLEED
@battle.pbDisplay(_INTL("{1} is already bleeding.",pbThis)) if showMessages
return false
end
if self.status!=0 ||
(@effects[PBEffects::Substitute]>0 && (!move || !move.ignoresSubstitute?(attacker)))
@battle.pbDisplay(_INTL("But it failed!")) if showMessages
return false
end
if pbHasType?(:GHOST) && !hasWorkingItem(:RINGTARGET)
@battle.pbDisplay(_INTL("It doesn't affect {1}...",pbThis(true))) if showMessages
return false
end
if !attacker || !attacker.hasMoldBreaker
if (hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)) ||
(hasWorkingAbility(:LEAFGUARD) && (@battle.pbWeather==PBWeather::SUNNYDAY ||
@battle.pbWeather==PBWeather::HARSHSUN))
@battle.pbDisplay(_INTL("{1}'s {2} prevents bleeding!",pbThis,PBAbilities.getName(self.ability))) if showMessages
return false
end
if pbPartner.hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)
abilityname=PBAbilities.getName(pbPartner.ability)
@battle.pbDisplay(_INTL("{1}'s partner's {2} prevents bleeding!",pbThis,abilityname)) if showMessages
return false
end
end
if pbOwnSide.effects[PBEffects::Safeguard]>0 &&
(!attacker || !attacker.hasWorkingAbility(:INFILTRATOR))
@battle.pbDisplay(_INTL("{1}'s team is protected by Safeguard!",pbThis)) if showMessages
return false
end
return true
end

def pbCanBleedSynchronize?(opponent)
return false if fainted?
return false if self.status!=0
if pbHasType?(:FIRE) && !hasWorkingItem(:RINGTARGET)
@battle.pbDisplay(_INTL("{1}'s {2} had no effect on {3}!",
opponent.pbThis,PBAbilities.getName(opponent.ability),pbThis(true)))
return false
end
if (hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)) ||
(hasWorkingAbility(:LEAFGUARD) && (@battle.pbWeather==PBWeather::SUNNYDAY ||
@battle.pbWeather==PBWeather::HARSHSUN))
@battle.pbDisplay(_INTL("{1}'s {2} prevents {3}'s {4} from working!",
pbThis,PBAbilities.getName(self.ability),
opponent.pbThis(true),PBAbilities.getName(opponent.ability)))
return false
end
if pbPartner.hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)
@battle.pbDisplay(_INTL("{1}'s {2} prevents {3}'s {4} from working!",
pbPartner.pbThis,PBAbilities.getName(pbPartner.ability),
opponent.pbThis(true),PBAbilities.getName(opponent.ability)))
return false
end
return true
end

def pbBleed(attacker=nil,msg=nil)
self.status=PBStatuses::BLEED
self.statusCount=0
@battle.pbCommonAnimation("Bleed",self,nil)
if msg && msg!=""
@battle.pbDisplay(msg)
else
@battle.pbDisplay(_INTL("{1} was wounded!",pbThis))
end
PBDebug.log("[Status change] #{pbThis} was wounded")
if attacker && self.index!=attacker.index &&
self.hasWorkingAbility(:SYNCHRONIZE)
if attacker.pbCanBurnSynchronize?(self)
PBDebug.log("[Ability triggered] #{self.pbThis}'s Synchronize")
attacker.pbBurn(nil,_INTL("{1}'s {2} wounded {3}!",self.pbThis,
PBAbilities.getName(self.ability),attacker.pbThis(true)))
end
end
end


Next we are going drop the defense of wounded pokemon. Go to PokeBattle_Move and right under this:
Spoiler:

if !attacker.hasMoldBreaker
if opponent.hasWorkingAbility(:MARVELSCALE) &&
opponent.status>0 && pbIsPhysical?(type)
defmult=(defmult*1.5).round
end


Put this:
Spoiler:

if opponent.status=PBStatuses::BLEED
defmult=(defmult/2).round
end


Our next step is in PokeBattle_Battle. We are telling Shedskin, Hydration, and Healer that they can heal this condition. If you don't want it to do that then don't add the things in red.
Spoiler:

if (i.hasWorkingAbility(:SHEDSKIN) && pbRandom(10)<3) ||
(i.hasWorkingAbility(:HYDRATION) && (pbWeather==PBWeather::RAINDANCE ||
pbWeather==PBWeather::HEAVYRAIN))
if i.status>0
PBDebug.log("[Ability triggered] #{i.pbThis}'s #{PBAbilities.getName(i.ability)}")
s=i.status
i.pbCureStatus(false)
case s
when PBStatuses::SLEEP
pbDisplay(_INTL("{1}'s {2} cured its sleep problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::POISON
pbDisplay(_INTL("{1}'s {2} cured its poison problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BURN
pbDisplay(_INTL("{1}'s {2} healed its burn!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::PARALYSIS
pbDisplay(_INTL("{1}'s {2} cured its paralysis!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::FROZEN
pbDisplay(_INTL("{1}'s {2} thawed it out!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BLEED
pbDisplay(_INTL("{1}'s {2} healed its wound!",i.pbThis,PBAbilities.getName(i.ability)))

end
end
end
# Healer
if i.hasWorkingAbility(:HEALER) && pbRandom(10)<3
partner=i.pbPartner
if partner && partner.status>0
PBDebug.log("[Ability triggered] #{i.pbThis}'s #{PBAbilities.getName(i.ability)}")
s=partner.status
partner.pbCureStatus(false)
case s
when PBStatuses::SLEEP
pbDisplay(_INTL("{1}'s {2} cured its partner's sleep problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::POISON
pbDisplay(_INTL("{1}'s {2} cured its partner's poison problem!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BURN
pbDisplay(_INTL("{1}'s {2} healed its partner's burn!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::PARALYSIS
pbDisplay(_INTL("{1}'s {2} cured its partner's paralysis!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::FROZEN
pbDisplay(_INTL("{1}'s {2} thawed its partner out!",i.pbThis,PBAbilities.getName(i.ability)))
when PBStatuses::BLEED
pbDisplay(_INTL("{1}'s {2} healed its partner's wound!",i.pbThis,PBAbilities.getName(i.ability)))

end
end
end
end


Just a little further down is this piece of code
Spoiler:

# Burn
if i.status==PBStatuses::BURN
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Status damage] #{i.pbThis} took damage from burn")
if i.hasWorkingAbility(:HEATPROOF)
PBDebug.log("[Ability triggered] #{i.pbThis}'s Heatproof")
i.pbReduceHP((i.totalhp/16).floor)
else
i.pbReduceHP((i.totalhp/8).floor)
end
i.pbContinueStatus
end


Right underneath put this:
Spoiler:

# Bleed
if i.status==PBStatuses::BLEED
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Status damage] #{i.pbThis} is bleeding and lost some health! ")
i.pbReduceHP((i.totalhp/8).floor)
end
end
i.pbContinueStatus
end


Final bit of code here. This goes at the bottom of PokeBattle_MoveEffects. Make sure to change the XXX to an unused function code.
Spoiler:

################################################################################
# Gives the target Bleed.
################################################################################
class PokeBattle_Move_XXX < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !opponent.pbCanBleed?(attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbBleed(attacker)
return 0
end

def pbAdditionalEffect(attacker,opponent)
return if opponent.damagestate.substitute
if opponent.pbCanBleed?(attacker,false,self)
opponent.pbBleed(attacker)
end
end
end


Now just add this to the bottom of your Moves.pbs. Change YYY to an unused Id. And change XXX to whatever the you changed the XXX from above to.
Spoiler:

YYY,THORNWHIP,Thorn Whip,XXX,60,GRASS,Physical,100,20,30,00,0,abcef,"The user strikes the target with a whip covered in thorns. It may cause bleeding."


And for the cherry on top. The graphics. Put statuses into the folder Graphics/Pictures. Put icon_statues into Graphics/Pictures/Battle

That should be everything. Let me know if something didn't work. (It's 100% likely as I am still a newb)

Tested already. There are some problems.
1) If i edit PokeBattle_Battle y get a syntax error at the last line the las "end" line. If i simply erase that line i get a Name error at line 3438 "undefined local variable or method "priority" for pokemon_battle:Class. I left the Pokebattle_Battle by default to see if i can se the effect at least in the game. And it does, at least the BLD graphic appears.
2) BLD appears when you get hit by ANY attack. Not the status ones
3) The Bleed does not lower the pokemon HP every turn, neither defense.
4) Bleed affects GHOST types.
So basically the BLD graphic appears every time you do a damage-dealing attack, but has no real effect and affects ghost too.

mgriffin

Seen 1 Hour Ago
Posted 14 Hours Ago
700 posts
5.5 Years
Tested already. There are some problems.
1) If i edit PokeBattle_Battle y get a syntax error at the last line the las "end" line. If i simply erase that line i get a Name error at line 3438 "undefined local variable or method "priority" for pokemon_battle:Class. I left the Pokebattle_Battle by default to see if i can se the effect at least in the game. And it does, at least the BLD graphic appears.
3) The Bleed does not lower the pokemon HP every turn, neither defense.
Well these two are definitely related since the HP loss code comes from a change you're supposed to make in PokeBattle_Battle (the defense drop isn't visible, but you can see that it's applied in PokeBattle_Move). I imagine some or all of the other errors are also the result of misplaced code.
Seen 2 Days Ago
Posted 2 Weeks Ago
57 posts
1.8 Years
Well these two are definitely related since the HP loss code comes from a change you're supposed to make in PokeBattle_Battle (the defense drop isn't visible, but you can see that it's applied in PokeBattle_Move). I imagine some or all of the other errors are also the result of misplaced code.
I've followed all the steps given. Im using essentials 17.2.
The defense drop not working it's easy to check, i do the same attack before and after the status appear and the damage is the same. So it's not working either

mgriffin

Seen 1 Hour Ago
Posted 14 Hours Ago
700 posts
5.5 Years
I've followed all the steps given. Im using essentials 17.2.
The defense drop not working it's easy to check, i do the same attack before and after the status appear and the damage is the same. So it's not working either
Oh, I found it (and your #2 too):
if opponent.status=PBStatuses::BLEED
defmult=(defmult/2).round
end
This code always sets the status to bleed, it should say:
if opponent.status==PBStatuses::BLEED
defmult=(defmult/2).round
end
… which means the error you were seeing is actually the opposite of what you thought—the defense was always cut in half!
Seen 2 Days Ago
Posted 2 Weeks Ago
57 posts
1.8 Years
Oh, I found it (and your #2 too):
if opponent.status=PBStatuses::BLEED
defmult=(defmult/2).round
end
This code always sets the status to bleed, it should say:
if opponent.status==PBStatuses::BLEED
defmult=(defmult/2).round
end
… which means the error you were seeing is actually the opposite of what you thought—the defense was always cut in half!
Great, with this change the status works and i was able to edit PokeBattle_Battle.
The status appears only when it should, and GHOST type is not affected 😁.
The only thing not working (and that gives me the syntax error) is the hp loss every turn. Edit: BUT IT'S SOLVED

I edit because i've solved it 😀. The code for the hp loss has an "end" not needed.
This is the corrected code.
Spoiler:
# Bleed
if i.status==PBStatuses::BLEED
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Status damage] #{i.pbThis} is bleeding and lost some health! ")
i.pbReduceHP((i.totalhp/8).floor)
end

i.pbContinueStatus
end


All seems to be working well now, i must thank you very much both Szmygielski and mgriffin for your help.
Szmygielski your code was almost perfect, just a "=" and "end" that escaped you, but a great work indeed.

mgriffin

Seen 1 Hour Ago
Posted 14 Hours Ago
700 posts
5.5 Years
The only thing not working is the hp loss every turn. What could that be?
the HP loss code comes from a change you're supposed to make in PokeBattle_Battle
I guess you're gonna have to think about the syntax of the changes you're trying to make in there and check that you're actually adding the right number of ends, work out what the error about priority is coming from, etc.

mgriffin

Seen 1 Hour Ago
Posted 14 Hours Ago
700 posts
5.5 Years
Glad you guys fixed it! Sorry I posted poopy code. I'll be sure to test more thoroughly next time. It should be noted that you two are super excellent!
The effort that went into your code was amazing, and the code itself was pretty damn good too! It's an inspiration to us all :)
Seen 2 Days Ago
Posted 2 Weeks Ago
57 posts
1.8 Years
Glad you guys fixed it! Sorry I posted poopy code. I'll be sure to test more thoroughly next time. It should be noted that you two are super excellent!
As mgriffin said, your code was almost perfect and a great job. You helped me so quickly it's normal that a word or 2 of code can slip, it would have taken me a lot of time to "Frankenstein that code up" as i have almost no experience. Thank you.
Age 26
Male
Scotland
Seen 20 Hours Ago
Posted 2 Weeks Ago
3 posts
42 Days
You'll still need to change PScreen_Party to display the graphics properly or it will say Pokemon are fainted when actually just bleeding, around line 368 is where it draws the status, change this
# Draw status
status = -1
status = 6 if @pokemon.pokerusStage==1
status = @pokemon.status-1 if @pokemon.status>0
status = 5 if @pokemon.hp<=0
to this
# Draw status
status = -1
status = 7 if @pokemon.pokerusStage==1
status = @pokemon.status-1 if @pokemon.status>0
status = 6 if @pokemon.hp<=0
Advertiser Content