PDA

View Full Version : [Essentials tutorial] Turn HM moves into items


FL
July 13th, 2013, 1:29 PM
In this tutorial I explain how to turn HMs and/or other moves that work outside of battle to items.

First, in PokemonHiddenMoves script section comment the 'HiddenMoveHandlers::CanUseMove' proc (all the code, inclusive the '})'). Change the line 'if $DEBUG || movefinder' (there's one for each move) to 'if $DEBUG || ($PokemonBag.pbQuantity(PBItems::YOURITEMINTERNALNAME)>0'. There's a item example for item.txt PBs:

601,SURFBOARD,Surfboard,Surfboards,8,0,"Insert description here.",0,0,6

Adding the move in the "Use" item command

In item PBS data change the '0,0,6' to '2,0,6'. Copy the content of 'HiddenMoveHandlers::CanUseMove' proc (the code between the first line and the '})') and put between a method who start in the first line like 'def canUseMoveSurf?' and ends with 'end'. Do the same with 'HiddenMoveHandlers::UseMove' and name the method something like 'def useMoveSurf'. For this last one remember to change pokemon.name to $Trainer.name, pbHiddenMoveAnimation(pokemon) to pbHiddenMoveAnimation(nil) and PBMoves.getName(move) to the move name (e. g. "Surf"). In PokemonItemEffects script section, add the two item handlers:

ItemHandlers::UseFromBag.add(:YOURITEMINTERNALNAME,proc{|item|
next canUseMoveSurf? ? 2 : 0
})

ItemHandlers::UseInField.add(:YOURITEMINTERNALNAME,proc{|item|
useMoveSurf if canUseMoveSurf?
})

I suggest to change the text like "used Surf" to "used Surfboard". Mark HIDDENMOVESCOUNTBADGES as true and all badges to 0 to remove the badge requirements.

Example

I will made an example of the adding in the "use" item command using a knife item for Cut. First, I changed the seventh value to 2.

602,KNIFE,Knife,Knifes,8,0,"Cut down thin trees.",2,0,6

So I made the two methods before the two handlers:

def canUseMoveCut?
if !$DEBUG &&
!(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORCUT : $Trainer.badges[BADGEFORCUT])
Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
return false
end
facingEvent=$game_player.pbFacingEvent
if !facingEvent || facingEvent.name!="Tree"
Kernel.pbMessage(_INTL("Can't use that here."))
return false
end
return true
end

def useMoveCut
if !pbHiddenMoveAnimation(nil)
Kernel.pbMessage(_INTL("{1} used {2}!",$Trainer.name,"Cut"))
end
facingEvent=$game_player.pbFacingEvent
if facingEvent
facingEvent.erase
$PokemonMap.addErasedEvent(facingEvent.id)
end
return true
end

And I added at PokemonItemEffects script section:

ItemHandlers::UseFromBag.add(:KNIFE,proc{|item|
next canUseMoveCut? ? 2 : 0
})

ItemHandlers::UseInField.add(:KNIFE,proc{|item|
useMoveCut if canUseMoveCut?
})

Rayquaza.
December 23rd, 2013, 2:24 AM
I too am finding it difficult to understand what you've stated in the 'Adding the move in the "Use" item command'.

Is there no way that it could be better explained?

p.claydon
December 23rd, 2013, 8:37 AM
thank yu for this its pretty straight forward if you follow the steps

Rayquaza.
December 23rd, 2013, 9:34 AM
thank yu for this its pretty straight forward if you follow the steps

I am following the steps. But the middle section isn't very clear to me.

p.claydon
December 24th, 2013, 3:47 AM
well bit busy atm (sortting new laptop out) but when able (prob boxing day) i'll see if i can do a better tutorial

Rayquaza.
December 24th, 2013, 5:23 AM
Okay. Does that mean you and FL are the same person or something?

FL
December 26th, 2013, 6:34 AM
Topic updated with an example.

Okay. Does that mean you and FL are the same person or something?Yeah! And in this post (http://www.pokecommunity.com/showpost.php?p=7989315&postcount=35) I'm talking with myself!

Just joking. I'm not p.claydon.

Rayquaza.
December 27th, 2013, 3:51 AM
I'm still having trouble with the script. It keeps coming up with syntax errors and I'm unsure why.

FL
December 28th, 2013, 11:49 AM
I'm still having trouble with the script. It keeps coming up with syntax errors and I'm unsure why.Post the script parts here and I try to help you.

Your problem may be the same problem of other people that will uses this tutorial.

mej71
March 23rd, 2014, 12:01 AM
How does one alter this code for moves like Fly or Flash in which the if $DEBUG || movefinder lines do not exist? I am getting syntax errors.

Derxwna Kapsyla
March 24th, 2014, 8:37 PM
I'm actually curious about how to bind Fly to an item as well. My scripters and I have been unable to really figure out how to bind what fly does to an individual item, despite searching through the code for fly to find a clue, and I have it planned for a Fly item to appear in the next demo of my game, and I'd rather not delay the item or the game if it's unavoidable

FL
March 25th, 2014, 10:22 AM
How does one alter this code for moves like Fly or Flash in which the if $DEBUG || movefinder lines do not exist? I am getting syntax errors.For these moves that only can be triggered at menu screen just don't change HiddenMoveHandlers::CanUseMove code since it's can't be called when the player haven't a pokémon with this move.

mej71
March 25th, 2014, 1:48 PM
I can't get the item to be useable for fly. For the cut example, that line you said to initially change is not located in CanUseMove, it's in Kernel.pbCut, and returns sytnax errors if you change it.
Sorry if I'm just incompetent, but it's really confusing me.

FL
March 27th, 2014, 12:34 PM
Sorry! Fly is an exception since $PokemonTemp.flydata had some definitions at the summary screen, so the methods should be:

def canUseMoveFly?
if !$DEBUG &&
!(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORFLY : $Trainer.badges[BADGEFORFLY])
Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
return false
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
return false
end
if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
Kernel.pbMessage(_INTL("Can't use that here."))
return false
end
return true
end

def useMoveFly
scene=PokemonRegionMapScene.new(-1,false)
screen=PokemonRegionMap.new(scene)
ret=screen.pbStartFlyScreen
return false if !ret
$PokemonTemp.flydata=ret
if !$PokemonTemp.flydata
Kernel.pbMessage(_INTL("Can't use that here."))
end
if !pbHiddenMoveAnimation(nil)
Kernel.pbMessage(_INTL("{1} used {2}!",$Trainer.name,"Fly"))
end
pbFadeOutIn(99999){
Kernel.pbCancelVehicles
$game_temp.player_new_map_id=$PokemonTemp.flydata[0]
$game_temp.player_new_x=$PokemonTemp.flydata[1]
$game_temp.player_new_y=$PokemonTemp.flydata[2]
$PokemonTemp.flydata=nil
$game_temp.player_new_direction=2
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
pbEraseEscapePoint
return true
end

Tested.

Mugendai
March 27th, 2014, 12:40 PM
This is my attempt at turning Fly into a key item, called the Mini Teleporter, but it doesn't work. HM Fly works normally, but if I press F5, it says "Can't use that here." and if I bypass that part of the code, the game has a scripting error.

I assume it's because specifically $PokemonTemp.flydata is missing; $PokemonTemp itself exists to the code. How would I fix this?


ItemHandlers::UseInField.add(:TELEPORTER,proc{|item|
if !$PokemonTemp.flydata || !pbGetMetadata($game_map.map_id,MetadataOutdoor)
Kernel.pbMessage(_INTL("Can't use that here."))
next false
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
next false
end
Kernel.pbMessage(_INTL("{1} used the Mini Teleporter!",$Trainer.name))
pbFadeOutIn(99999){
$game_temp.player_new_map_id=$PokemonTemp.flydata[0]
$game_temp.player_new_x=$PokemonTemp.flydata[1]
$game_temp.player_new_y=$PokemonTemp.flydata[2]
$PokemonTemp.flydata=nil
$game_temp.player_new_direction=2
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
pbEraseEscapePoint
next true
})
Here's the error if I bypass the "Can't use that here." message:


---------------------------
Touhoumon Faith & Prayer Version 1.8
---------------------------
Exception: NoMethodError

Message: undefined method `[]' for nil:NilClass

PokemonItemEffects:996

PokemonItemEffects:995:in `pbFadeOutIn'

PokemonItemEffects:995

PokemonItemEffects:985:in `call'

PBEvent:150:in `trigger'

PokemonItems:186:in `triggerUseInField'

PokemonItems:379:in `pbUseKeyItemInField'

PokemonField:2276:in `pbUseKeyItem'

Scene_Map:170:in `update'

Scene_Map:68:in `main'



This exception was logged in

C:\Users\Mugendai\Saved Games/Touhoumon Faith _ Prayer Version 1_8/errorlog.txt.

Press Ctrl+C to copy this message to the clipboard.
---------------------------
OK
---------------------------


Edit: Sorry, didn't see new post above.

mej71
March 27th, 2014, 12:44 PM
Worked. Thank you so much!

Mugendai
March 28th, 2014, 5:27 AM
It worked for me as well, thanks.

C me
November 13th, 2014, 4:55 AM
What does this look like in a hex editor? I dont't understand what to do with these ASM commands.

Maruno
November 13th, 2014, 12:17 PM
This isn't the ROM Hacking section. We don't use hex editors here.

arktyz
August 8th, 2015, 12:28 PM
i am getting this message for when making a surfboard as an item, i do not know what i am doing wrong i followed everything, can anyone offer help? am i not seeing my mistake?

---------------------------
Pokemon Essentials
---------------------------
Exception: NameError

Message: undefined local variable or method `terrain' for nil:NilClass

PokemonHiddenMoves:455:in `canUseMoveSurf?'

PokemonItemEffects:131

PokemonItemEffects:130:in `call'

PBEvent:150:in `trigger'

PokemonItems:165:in `triggerUseFromBag'

PokemonItems:520:in `pbUseItem'

PokemonBag:677:in `pbStartScreen'

PokemonBag:651:in `loop'

PokemonBag:716:in `pbStartScreen'

PokemonPauseMenu:189:in `pbStartPokemonMenu'



This exception was logged in

FL
August 9th, 2015, 9:47 AM
i am getting this message for when making a surfboard as an item, i do not know what i am doing wrong i followed everything, can anyone offer help? am i not seeing my mistake?

---------------------------
Pokemon Essentials
---------------------------
Exception: NameError

Message: undefined local variable or method `terrain' for nil:NilClass

PokemonHiddenMoves:455:in `canUseMoveSurf?'

PokemonItemEffects:131

PokemonItemEffects:130:in `call'

PBEvent:150:in `trigger'

PokemonItems:165:in `triggerUseFromBag'

PokemonItems:520:in `pbUseItem'

PokemonBag:677:in `pbStartScreen'

PokemonBag:651:in `loop'

PokemonBag:716:in `pbStartScreen'

PokemonPauseMenu:189:in `pbStartPokemonMenu'



This exception was logged inPost your changes.

arktyz
August 9th, 2015, 10:24 AM
Post your changes.
This is what i edited for the surf in PokemonHiddenMoves

def Kernel.pbSurf
if $game_player.pbHasDependentEvents?
return false
end
if $DEBUG ||
(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
movefinder=Kernel.pbCheckMove(:SURF)
if $DEBUG || $PokemonBag.pbQuantity(PBItems::SURFBOARD)>0
if Kernel.pbConfirmMessage(_INTL("The tides look nasty would you like to go surfing?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("You started surfing!",speciesname))

surfbgm=pbGetMetadata(0,MetadataSurfBGM)
if surfbgm
pbCueBGM(surfbgm,0.5)
end
pbStartSurfing()
return true
end
end
end
return false
end

def pbStartSurfing()
Kernel.pbCancelVehicles
$PokemonEncounters.clearStepCount
$PokemonGlobal.surfing=true
Kernel.pbUpdateVehicle
Kernel.pbJumpToward
Kernel.pbUpdateVehicle
$game_player.check_event_trigger_here([1,2])
end

def pbEndSurf(xOffset,yOffset)
return false if !$PokemonGlobal.surfing
x=$game_player.x
y=$game_player.y
currentTag=$game_map.terrain_tag(x,y)
facingTag=Kernel.pbFacingTerrainTag
if pbIsSurfableTag?(currentTag) && !pbIsSurfableTag?(facingTag)
if Kernel.pbJumpToward
Kernel.pbCancelVehicles
$game_map.autoplayAsCue
$game_player.increase_steps
result=$game_player.check_event_trigger_here([1,2])
Kernel.pbOnStepTaken(result)
end
return true
end
return false
end

Events.onAction+=proc{|sender,e|
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if pbIsWaterTag?(terrain) && !$PokemonGlobal.surfing &&
!pbGetMetadata($game_map.map_id,MetadataBicycleAlways) && notCliff
Kernel.pbSurf
return
end
}
def canUseMoveSurf?
if !$DEBUG &&
!(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
return false
end
if $PokemonGlobal.surfing
Kernel.pbMessage(_INTL("You're already surfing."))
return false
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
return false
end
if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
return false
end
if !pbIsWaterTag?(terrain) || !notCliff
Kernel.pbMessage(_INTL("No surfing here!"))
return false
end
return true
end
def UseMoveSurf
if !pbHiddenMoveAnimation(nil)
Kernel.pbMessage(_INTL("{1} used {2}!",$Trainer.name,PBMoves.getName(Surf)))
end
pbStartSurfing()
return true
end

#HiddenMoveHandlers::CanUseMove.add(:SURF,proc{|move,pkmn|
# terrain=Kernel.pbFacingTerrainTag
# notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
# if !$DEBUG &&
# !(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
# Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
# return false
# end
# if $PokemonGlobal.surfing
# Kernel.pbMessage(_INTL("You're already surfing."))
# return false
# end
# if $game_player.pbHasDependentEvents?
# Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
# return false
# end
# if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
# Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
# return false
# end
# if !pbIsWaterTag?(terrain) || !notCliff
# Kernel.pbMessage(_INTL("No surfing here!"))
# return false
# end
# return true
#})

HiddenMoveHandlers::UseMove.add(:SURF,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbStartSurfing()
return true
})


This is in PokemonItemEffects

ItemHandlers::UseInField.add(:SURFBOARD,proc{|item|
useMoveSurf if canUseMoveSurf?
})

ItemHandlers::UseFromBag.add(:SURFBOARD,proc{|item|
next canUseMoveSurf? ? 2 : 0
})

and this is in my PBS for items

526, SURFBOARD, Surfboard, 8, 0, The perfect board for shredding the gnar.,2,0,6


The error message pops up when i am standing facing water, and go into my bag and click use on the surfboard, any help is appreciated thanks!

FL
August 15th, 2015, 3:10 PM
After line 'def canUseMoveSurf?' you forget to add:

terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)

fabaaun
August 16th, 2015, 8:03 AM
Is there any way to, instead of activating the move from an item, activating it from an event?? Like, talking to a rocket and calling the Fly menu, interacting with a ship to start surfing or touching a scuba to dive the sea?

Also, if you could answer this question I present here http://www.pokecommunity.com/showthread.php?t=353829, that would be most appreciated =P

FL
August 16th, 2015, 4:36 PM
Is there any way to, instead of activating the move from an item, activating it from an event?? Like, talking to a rocket and calling the Fly menu, interacting with a ship to start surfing or touching a scuba to dive the sea?

Also, if you could answer this question I present here http://www.pokecommunity.com/showthread.php?t=353829, that would be most appreciated =PI guess that you only need to copy the content on 'UseInField' and paste into a script event command.

I replied at your thread.

arktyz
August 19th, 2015, 3:26 PM
Thank you for looking through my coding mistake, but that add on seemed to generate another, here is the new problem that occurred:

---------------------------
Pokemon Essentials
---------------------------
Exception: NameError

Message: uninitialized constant UseMoveSurf

PokemonItemEffects:978

PokemonItemEffects:977:in `call'

PBEvent:150:in `trigger'

PokemonItems:174:in `triggerUseInField'

PokemonItems:362:in `pbUseKeyItemInField'

PokemonPauseMenu:197:in `pbStartPokemonMenu'

PokemonPauseMenu:142:in `loop'

PokemonPauseMenu:256:in `pbStartPokemonMenu'

Scene_Map:188:in `call_menu'

Scene_Map:159:in `update'



This exception was logged in

C:\Users\Andy\Saved Games/Pokemon Essentials/errorlog.txt.

Press Ctrl+C to copy this message to the clipboard.
---------------------------
OK
---------------------------


I can see it is referring to the item section with clicking use on the surfboard in the bag, here is my code for that

ItemHandlers::UseInField.add(:SURFBOARD,proc{|item|
UseMoveSurf if canUseMoveSurf?
})

ItemHandlers::UseFromBag.add(:SURFBOARD,proc{|item|
next canUseMoveSurf? ? 2 : 0
})

finally just so its here if it needs changing this is my surf section code

def Kernel.pbSurf
if $game_player.pbHasDependentEvents?
return false
end
if $DEBUG ||
(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
movefinder=Kernel.pbCheckMove(:SURF)
if $DEBUG || $PokemonBag.pbQuantity(PBItems::SURFBOARD)>0
if Kernel.pbConfirmMessage(_INTL("The tides look nasty would you like to go surfing?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("You started surfing!",speciesname))

surfbgm=pbGetMetadata(0,MetadataSurfBGM)
if surfbgm
pbCueBGM(surfbgm,0.5)
end
pbStartSurfing()
return true
end
end
end
return false
end

def pbStartSurfing()
Kernel.pbCancelVehicles
$PokemonEncounters.clearStepCount
$PokemonGlobal.surfing=true
Kernel.pbUpdateVehicle
Kernel.pbJumpToward
Kernel.pbUpdateVehicle
$game_player.check_event_trigger_here([1,2])
end

def pbEndSurf(xOffset,yOffset)
return false if !$PokemonGlobal.surfing
x=$game_player.x
y=$game_player.y
currentTag=$game_map.terrain_tag(x,y)
facingTag=Kernel.pbFacingTerrainTag
if pbIsSurfableTag?(currentTag) && !pbIsSurfableTag?(facingTag)
if Kernel.pbJumpToward
Kernel.pbCancelVehicles
$game_map.autoplayAsCue
$game_player.increase_steps
result=$game_player.check_event_trigger_here([1,2])
Kernel.pbOnStepTaken(result)
end
return true
end
return false
end

Events.onAction+=proc{|sender,e|
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if pbIsWaterTag?(terrain) && !$PokemonGlobal.surfing &&
!pbGetMetadata($game_map.map_id,MetadataBicycleAlways) && notCliff
Kernel.pbSurf
return
end
}
def canUseMoveSurf?
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if !$DEBUG &&
!(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
return false
end
if $PokemonGlobal.surfing
Kernel.pbMessage(_INTL("You're already surfing."))
return false
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
return false
end
if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
return false
end
if !pbIsWaterTag?(terrain) || !notCliff
Kernel.pbMessage(_INTL("No surfing here!"))
return false
end
return true
end
def UseMoveSurf
if !pbHiddenMoveAnimation(nil)
Kernel.pbMessage(_INTL("You started surfing!",$Trainer.name,"Surf"))
end
pbStartSurfing()
return true
end

#HiddenMoveHandlers::CanUseMove.add(:SURF,proc{|move,pkmn|
# terrain=Kernel.pbFacingTerrainTag
# notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
# if !$DEBUG &&
# !(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
# Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
# return false
# end
# if $PokemonGlobal.surfing
# Kernel.pbMessage(_INTL("You're already surfing."))
# return false
# end
# if $game_player.pbHasDependentEvents?
# Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
# return false
# end
# if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
# Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
# return false
# end
# if !pbIsWaterTag?(terrain) || !notCliff
# Kernel.pbMessage(_INTL("No surfing here!"))
# return false
# end
# return true
#})

HiddenMoveHandlers::UseMove.add(:SURF,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbStartSurfing()
return true
})

FL
August 22nd, 2015, 12:22 PM
Thank you for looking through my coding mistake, but that add on seemed to generate another, here is the new problem that occurred:

---------------------------
Pokemon Essentials
---------------------------
Exception: NameError

Message: uninitialized constant UseMoveSurf

PokemonItemEffects:978

PokemonItemEffects:977:in `call'

PBEvent:150:in `trigger'

PokemonItems:174:in `triggerUseInField'

PokemonItems:362:in `pbUseKeyItemInField'

PokemonPauseMenu:197:in `pbStartPokemonMenu'

PokemonPauseMenu:142:in `loop'

PokemonPauseMenu:256:in `pbStartPokemonMenu'

Scene_Map:188:in `call_menu'

Scene_Map:159:in `update'



This exception was logged in

C:\Users\Andy\Saved Games/Pokemon Essentials/errorlog.txt.

Press Ctrl+C to copy this message to the clipboard.
---------------------------
OK
---------------------------


I can see it is referring to the item section with clicking use on the surfboard in the bag, here is my code for that

ItemHandlers::UseInField.add(:SURFBOARD,proc{|item|
UseMoveSurf if canUseMoveSurf?
})

ItemHandlers::UseFromBag.add(:SURFBOARD,proc{|item|
next canUseMoveSurf? ? 2 : 0
})

finally just so its here if it needs changing this is my surf section code

def Kernel.pbSurf
if $game_player.pbHasDependentEvents?
return false
end
if $DEBUG ||
(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
movefinder=Kernel.pbCheckMove(:SURF)
if $DEBUG || $PokemonBag.pbQuantity(PBItems::SURFBOARD)>0
if Kernel.pbConfirmMessage(_INTL("The tides look nasty would you like to go surfing?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("You started surfing!",speciesname))

surfbgm=pbGetMetadata(0,MetadataSurfBGM)
if surfbgm
pbCueBGM(surfbgm,0.5)
end
pbStartSurfing()
return true
end
end
end
return false
end

def pbStartSurfing()
Kernel.pbCancelVehicles
$PokemonEncounters.clearStepCount
$PokemonGlobal.surfing=true
Kernel.pbUpdateVehicle
Kernel.pbJumpToward
Kernel.pbUpdateVehicle
$game_player.check_event_trigger_here([1,2])
end

def pbEndSurf(xOffset,yOffset)
return false if !$PokemonGlobal.surfing
x=$game_player.x
y=$game_player.y
currentTag=$game_map.terrain_tag(x,y)
facingTag=Kernel.pbFacingTerrainTag
if pbIsSurfableTag?(currentTag) && !pbIsSurfableTag?(facingTag)
if Kernel.pbJumpToward
Kernel.pbCancelVehicles
$game_map.autoplayAsCue
$game_player.increase_steps
result=$game_player.check_event_trigger_here([1,2])
Kernel.pbOnStepTaken(result)
end
return true
end
return false
end

Events.onAction+=proc{|sender,e|
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if pbIsWaterTag?(terrain) && !$PokemonGlobal.surfing &&
!pbGetMetadata($game_map.map_id,MetadataBicycleAlways) && notCliff
Kernel.pbSurf
return
end
}
def canUseMoveSurf?
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if !$DEBUG &&
!(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
return false
end
if $PokemonGlobal.surfing
Kernel.pbMessage(_INTL("You're already surfing."))
return false
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
return false
end
if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
return false
end
if !pbIsWaterTag?(terrain) || !notCliff
Kernel.pbMessage(_INTL("No surfing here!"))
return false
end
return true
end
def UseMoveSurf
if !pbHiddenMoveAnimation(nil)
Kernel.pbMessage(_INTL("You started surfing!",$Trainer.name,"Surf"))
end
pbStartSurfing()
return true
end

#HiddenMoveHandlers::CanUseMove.add(:SURF,proc{|move,pkmn|
# terrain=Kernel.pbFacingTerrainTag
# notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
# if !$DEBUG &&
# !(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
# Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
# return false
# end
# if $PokemonGlobal.surfing
# Kernel.pbMessage(_INTL("You're already surfing."))
# return false
# end
# if $game_player.pbHasDependentEvents?
# Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
# return false
# end
# if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
# Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
# return false
# end
# if !pbIsWaterTag?(terrain) || !notCliff
# Kernel.pbMessage(_INTL("No surfing here!"))
# return false
# end
# return true
#})

HiddenMoveHandlers::UseMove.add(:SURF,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbStartSurfing()
return true
})Every time that you repost the code, please use the code tag!

'Kernel.pbMessage(_INTL("You started surfing!",$Trainer.name,"Surf"))' as is the purpose of using three parameters as _INTL without the place to replace on main message?

Are you sure that you typed 'useMoveSurf' and not 'UseMoveSurf' in both places? Ruby is case sensitive!

fmw
October 3rd, 2015, 5:02 AM
Could you please post the complete script for cut as i do not completely understand where to put it. Thanks!

FL
October 5th, 2015, 4:31 PM
Could you please post the complete script for cut as i do not completely understand where to put it. Thanks!This is already on main thread post, at "example" part.

fmw
October 10th, 2015, 6:07 PM
o I mean like the complete section for cut. Please I'm a terrible script-er! :)

FL
October 11th, 2015, 3:12 AM
o I mean like the complete section for cut. Please I'm a terrible script-er! :)The first code part goes into item.txt, the second goes into PokemonHiddenMoves script section and the last goes into PokemonItemEffects script section. Just copy and paste the code!

dydd90
October 11th, 2015, 4:53 AM
I tried to turn teleport into an item but it is different from others, how can i make it?

FL
October 11th, 2015, 5:13 PM
I tried to turn teleport into an item but it is different from others, how can i make it?The only diference is that the confirmation message show ups twice if you use by item menu. To fix this, change

mapname=pbGetMapNameFromId(healing[0])
if Kernel.pbConfirmMessage(_INTL("Want to return to the healing spot used last in {1}?",mapname))
return true
end
return false

into 'return true'. And add after 'if healing' (in useMoveTeleport):

mapname=pbGetMapNameFromId(healing[0])
if !Kernel.pbConfirmMessage(_INTL("Want to return to the healing spot used last in {1}?",mapname))
return false
end

Fazsapphire
March 25th, 2016, 8:19 AM
This works for essentials v16 ? as the scripts are pretty different

FL
April 6th, 2016, 2:13 AM
This works for essentials v16 ? as the scripts are pretty differentI guess so. Some (like Fly) probably need adjustment.

FL
April 10th, 2016, 10:56 AM
I guess so. Some (like Fly) probably need adjustment.After testing, the only adjustment was the plural field when declaring items.

But using Surf from menu won't work in Essentials V16.1, so it won't work here too.

Weedfanatic
April 10th, 2016, 7:54 PM
After testing, the only adjustment was the plural field when declaring items.

But using Surf from menu won't work in Essentials V16.1, so it won't work here too.

Surf will work from the bag. You just need to fix outdated code.
Try out the script below and let me know if it works. It should, it does for me with v16.1


#===============================================================================
# Surf
#===============================================================================
def Kernel.pbSurf
if $game_player.pbHasDependentEvents?
return false
end
if $DEBUG ||
(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
movefinder=Kernel.pbCheckMove(:SURF)
if $DEBUG || $PokemonBag.pbQuantity(PBItems::RAFT)>0
if Kernel.pbConfirmMessage(_INTL("The water is a deep blue, would you like to use the raft?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("You started rafting!",speciesname))

surfbgm=pbGetMetadata(0,MetadataSurfBGM)
if surfbgm
pbCueBGM(surfbgm,0.5)
end

pbStartSurfing()
return true
end
end
end
return false
end

def pbStartSurfing()
Kernel.pbCancelVehicles
$PokemonEncounters.clearStepCount
$PokemonGlobal.surfing=true
Kernel.pbUpdateVehicle
Kernel.pbJumpToward
Kernel.pbUpdateVehicle
$game_player.check_event_trigger_here([1,2])
end

def pbEndSurf(xOffset,yOffset)
return false if !$PokemonGlobal.surfing
x=$game_player.x
y=$game_player.y
currentTag=$game_map.terrain_tag(x,y)
facingTag=Kernel.pbFacingTerrainTag
if pbIsSurfableTag?(currentTag) && !pbIsSurfableTag?(facingTag)
if Kernel.pbJumpToward
Kernel.pbCancelVehicles
$game_map.autoplayAsCue
$game_player.increase_steps
result=$game_player.check_event_trigger_here([1,2])
Kernel.pbOnStepTaken(result)
end
return true
end
return false
end

Events.onAction+=proc{|sender,e|
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if pbIsWaterTag?(terrain) && !$PokemonGlobal.surfing &&
!pbGetMetadata($game_map.map_id,MetadataBicycleAlways) && notCliff
Kernel.pbSurf
return
end
}
def canUseMoveSurf?
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if !$DEBUG &&
!(HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
return false
end
if $PokemonGlobal.surfing
Kernel.pbMessage(_INTL("You're already rafting."))
return false
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
return false
end
if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
return false
end
#if !PBTerrain.isSurfable?(terrain) || !notCliff
if !pbIsWaterTag?(terrain) || !notCliff
Kernel.pbMessage(_INTL("No rafting here!"))
return false
end
return true
end

def useMoveSurf
if !pbHiddenMoveAnimation(nil)
Kernel.pbMessage(_INTL("You started rafting!",$Trainer.name,"Surf"))
end
pbStartSurfing()
return true
end

HiddenMoveHandlers::UseMove.add(:SURF,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbStartSurfing()
return true
})