- 350
- Posts
- 6
- Years
- He/Him
- Oshawa
- Seen Feb 12, 2025
B2W2 Trainer Card Script for v18.1
As the title says, this script adds a BW Styled Trainer Card to your game.
*image removed*
The Instructions are same as all other scripts, its completely plug and play.
As the title says, this script adds a BW Styled Trainer Card to your game.
*image removed*
The Instructions are same as all other scripts, its completely plug and play.
Spoiler:
Code:
#===============================================================================
# B2W2 Trainer Card by KleinStudio
#
# Modified By LackDeJurane/CharizardThree3 for Essentials v18
#
# If used, much of the credit goes to KleinStudio, would be kind of you
# to credit me
#===============================================================================
class PokeBattle_Trainer
attr_accessor(:cardlevel)
end
#===============================================================================
# Trainer card info for leaders
#===============================================================================
LEADERINFO = [
["trainer059", "Aspertia City","Cheren","Everyone has a different dream.\nSearch for your life's purpose","Basic Badge"],
["trainer060", "Virbank City","Roxie","It's kindness to say no for your \nfriends and Pokémon, right?","Toxic Badge"],
["trainer061", "Castellia City","Burgh","Umm... That's right. You! \nUse Bug-type Pokémon!","Insect Badge"],
["trainer062", "Nimbasa City","Elesa","If you glow with an inner light,all \nthat surrounds you shines as well!","Bolt Badge"],
["trainer063", "Driftveil City","Clay","Don't lie to yerself! \nIt's best to live honestly.","Quake Badge"],
["trainer064", "Mistralton City","Skyla","To fly, go beyond yearning and \ntake action!","Jet Badge"],
["trainer065", "Opelucid City","Drayden","Sincere Trainer! Be flexible!","Legend Badge"],
["trainer066", "Hamilau City","Marlon","It's cliché to compare life to \na sea, but don't be swept away!","Wave Badge"],
]
#===============================================================================
#
#Utilities and Methods by Klein and Luka S.J
#
#===============================================================================
class Sprite
def pos(x2,y2)
self.x=x2
self.y=y2
end
end
def globalIconAnim(sprite, buttom=nil)
sprite.tone.red+=80
sprite.tone.green+=80
sprite.tone.blue+=80
pbWait(2)
sprite.tone.red-=80
sprite.tone.green-=80
sprite.tone.blue-=80
end
def pbCardLevelIncrease
$Trainer.cardlevel+=1
end
def pbCardLevelDecrease
$Trainer.cardlevel-=1 if $Trainer.cardlevel!=0
end
def pbPositionPokemonSprite(sprite,left,top)
if sprite.bitmap && !sprite.bitmap.disposed?
sprite.x=left+(128-sprite.bitmap.width)/2
sprite.y=top+(128-sprite.bitmap.height)/2
else
sprite.x=left
sprite.y=top
end
end
class PokemonSpriteBW
attr_accessor :selected
attr_accessor :shadow
attr_accessor :sprite
attr_accessor :src_rect
attr_accessor :showshadow
attr_accessor :status
attr_reader :loaded
def initialize(viewport=nil)
@viewport=viewport
@metrics=load_data("Data/metrics.dat")
@selected=0
@status=0
@loaded=false
@showshadow=true
@altitude=0
@yposition=0
@sprite=Sprite.new(@viewport)
@overlay=Sprite.new(@viewport)
@lock=false
end
def x; @sprite.x; end
def y; @sprite.y; end
def z; @sprite.z; end
def ox; @sprite.ox; end
def oy; @sprite.oy; end
def ox=(val);;end
def oy=(val);;end
def zoom_x; @sprite.zoom_x; end
def zoom_y; @sprite.zoom_y; end
def visible; @sprite.visible; end
def opacity; @sprite.opacity; end
def width; @bitmap.width; end
def height; @bitmap.height; end
def tone; @sprite.tone; end
def bitmap; @bitmap.bitmap; end
def actualBitmap; @bitmap; end
def disposed?; @sprite.disposed?; end
def color; @sprite.color; end
def src_rect; @sprite.src_rect; end
def blend_type; @sprite.blend_type; end
def angle; @sprite.angle; end
def mirror; @sprite.mirror; end
def lock
@lock=true
end
def unlock
@lock=false
end
def bitmap=(val)
@bitmap.bitmap=val
end
def x=(val)
@sprite.x=val
end
def ox=(val)
@sprite.ox=val
end
def oy=(val)
@sprite.oy=val
end
def y=(val)
@sprite.y=val
end
def z=(val)
@sprite.z=val
end
def zoom_x=(val)
@sprite.zoom_x=val
end
def zoom_y=(val)
@sprite.zoom_y=val
end
def visible=(val)
@sprite.visible=val
end
def opacity=(val)
@sprite.opacity=val
end
def tone=(val)
@sprite.tone=val
end
def color=(val)
@sprite.color=val
end
def blend_type=(val)
@sprite.blend_type=val
end
def angle=(val)
@sprite.angle=(val)
end
def mirror=(val)
@sprite.mirror=(val)
end
def dispose
@sprite.dispose
end
def setPokemonBitmap(pokemon,back=false)
@bitmap=pbLoadPokemonBitmap(pokemon,back)
@[email protected]
@[email protected]/2
@[email protected]/2
@loaded=true
end
def update
return if @lock
if @bitmap
@bitmap.update
@[email protected]
end
end
end
class TrainerSpriteBW
attr_accessor :selected
attr_accessor :shadow
attr_accessor :sprite
attr_accessor :src_rect
attr_accessor :showshadow
attr_accessor :status
attr_reader :loaded
def initialize(x,y,viewport=nil)
@viewport=viewport
@metrics=load_data("Data/metrics.dat")
@selected=0
@status=0
@loaded=false
@showshadow=false
@altitude=0
@yposition=0
@shadow=Sprite.new(@viewport)
@sprite=Sprite.new(@viewport)
@sprite.x=x
@sprite.y=y
@overlay=Sprite.new(@viewport)
@lock=false
end
def x; @sprite.x; end
def y; @sprite.y; end
def z; @sprite.z; end
def ox; @sprite.ox; end
def oy; @sprite.oy; end
def ox=(val);;end
def oy=(val);;end
def zoom_x; @sprite.zoom_x; end
def zoom_y; @sprite.zoom_y; end
def visible; @sprite.visible; end
def opacity; @sprite.opacity; end
def width; @bitmap.width; end
def height; @bitmap.height; end
def tone; @sprite.tone; end
def bitmap; @bitmap.bitmap; end
def actualBitmap; @bitmap; end
def disposed?; @sprite.disposed?; end
def color; @sprite.color; end
def src_rect; @sprite.src_rect; end
def blend_type; @sprite.blend_type; end
def angle; @sprite.angle; end
def mirror; @sprite.mirror; end
def lock
@lock=true
end
def unlock
@lock=false
end
def bitmap=(val)
@bitmap.bitmap=val
end
def finished?
return @bitmap.finished?
end
def x=(val)
@sprite.x=val
@shadow.x=val
end
def ox=(val)
@sprite.ox=val
self.formatShadow
end
def oy=(val)
@sprite.oy=val
self.formatShadow
end
def y=(val)
@sprite.y=val
@shadow.y=val
end
def z=(val)
@shadow.z=10
@sprite.z=val
end
def zoom_x=(val)
@sprite.zoom_x=val
self.formatShadow
end
def zoom_y=(val)
@sprite.zoom_y=val
self.formatShadow
end
def visible=(val)
@sprite.visible=val
self.formatShadow
end
def opacity=(val)
@sprite.opacity=val
self.formatShadow
end
def tone=(val)
@sprite.tone=val
self.formatShadow
end
def color=(val)
@sprite.color=val
self.formatShadow
end
def blend_type=(val)
@sprite.blend_type=val
self.formatShadow
end
def angle=(val)
@sprite.angle=(val)
self.formatShadow
end
def mirror=(val)
@sprite.mirror=(val)
self.formatShadow
end
def dispose
@sprite.dispose
@shadow.dispose
end
def totalFrames; @bitmap.animationFrames; end
def toLastFrame; @bitmap.toFrame("last"); end
def selected; end
def setBitmap(file)
@bitmap=AnimatedBitmapWrapperLast.new(file)
@[email protected]
@[email protected]
self.formatShadow
end
def formatShadow
@[email protected]_x*1.1-(0.011*@altitude)
@[email protected]_y*0.32-(0.0032*@altitude)
@[email protected]
@[email protected]@altitude
@[email protected]*0.3
@[email protected]
@shadow.tone=Tone.new(-255,-255,-255,255)
@[email protected]
@[email protected]
@shadow.visible=false if !@showshadow
end
def update
return if @lock
if @bitmap
@bitmap.update
@[email protected]
@[email protected]
end
self.formatShadow
end
end
class AnimatedBitmapWrapperAnim
attr_reader :width
attr_reader :height
attr_reader :totalFrames
attr_reader :animationFrames
attr_reader :currentIndex
attr_reader :scale
def initialize(file,twoframe=false)
raise "filename is nil" if file==nil
@scale = 1
@width = 0
@height = 0
@frame = 0
@frames = 2
@direction = +1
@twoframe = twoframe
@animationFinish = false
@totalFrames = 0
@currentIndex = 0
@speed = 1
@finished=false
@middle=false
# 0 - not moving at all
# 1 - normal speed
# 2 - medium speed
# 3 - slow speed
@bitmapFile=BitmapCache.load_bitmap(file)
# initializes full Pokemon bitmap
@bitmap=Bitmap.new(@bitmapFile.width,@bitmapFile.height)
@bitmap.blt(0,0,@bitmapFile,Rect.new(0,0,@bitmapFile.width,@bitmapFile.height))
@[email protected]*@scale
@[email protected]*@scale
@[email protected]/@bitmap.height
@animationFrames=@totalFrames*@frames
# calculates total number of frames
@loop_points=[0,@totalFrames]
# first value is start, second is end
@actualBitmap=Bitmap.new(@width,@height)
@actualBitmap.clear
@actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
end
def length; @totalFrames; end
def disposed?; @actualBitmap.disposed?; end
def dispose; @actualBitmap.dispose; end
def copy; @actualBitmap.clone; end
def bitmap; @actualBitmap; end
def bitmap=(val); @actualBitmap=val; end
def each; end
def alterBitmap(index); return @strip[index]; end
def prepareStrip
@strip=[]
for i in 0...@totalFrames
bitmap=Bitmap.new(@width,@height)
bitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmapFile,Rect.new((@width/@scale)*i,0,@width/@scale,@height/@scale))
@strip.push(bitmap)
end
end
def compileStrip
@bitmap.clear
for i in [email protected]
@bitmap.stretch_blt(Rect.new((@width/@scale)*i,0,@width/@scale,@height/@scale),@strip[i],Rect.new(0,0,@width,@height))
end
end
def reverse
if @direction > 0
@direction=-1
elsif @direction < 0
@direction=+1
end
end
def setLoop(start, finish)
@loop_points=[start,finish]
end
def setSpeed(value)
@speed=value
end
def update
return false if @speed < 1
case @speed
# frame skip
when 1
@frames=2
when 2
@frames=4
when 3
@frames=5
end
@frame+=1
if @frame >=@frames
# processes animation speed
if @currentIndex < @totalFrames
@currentIndex+=@direction
end
@frame=0
end
@currentIndex=@totalFrames if @currentIndex > @totalFrames
@finished=true if @currentIndex==@totalFrames
@middle=true if @currentIndex==@totalFrames/2
@actualBitmap.clear
@actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
# updates the actual bitmap
end
def finished?
return @finished
end
def middle?
return @middle
end
# returns bitmap to original state
def deanimate
@frame=0
@currentIndex=0
@actualBitmap.clear
@actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
end
end
class AnimatedBitmapWrapperLast < AnimatedBitmapWrapperAnim
def update
return false if @speed < 1
case @speed
# frame skip
when 1
@frames=2
when 2
@frames=4
when 3
@frames=5
end
@frame+=1
if @frame >=@frames
# processes animation speed
if @currentIndex < @totalFrames-1
@currentIndex+=@direction
end
@frame=0
end
@currentIndex=@totalFrames-1 if @currentIndex > @totalFrames-1
@finished=true if @currentIndex==@totalFrames-1
@actualBitmap.clear
@actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
# updates the actual bitmap
end
end
def pbCreateAnimatedPicture(species,x,y)
$pokeani=PokemonSpriteDex.new(@viewport)
$pokeani.loadPokemonBitmap(species)
$pokeani.opacity=0
$pokeani.z=99999
$pokeani.x=x
$pokeani.y=y
$pokeani.ox=$pokeani.sprite.bitmap.width/2
$pokeani.oy=$pokeani.sprite.bitmap.height/2
end
def pbShowPokemon(species,x,y,cry=true)
pbCreateAnimatedPicture(species,x,y)
10.times do
Graphics.update
Input.update
$pokeani.update
$pokeani.opacity+=25.5
end
pbPlayCry(species) if cry
end
def pbDisposePokemon
return if !$pokeani
10.times do
Graphics.update
Input.update
$pokeani.update
$pokeani.opacity-=25.5
end
$pokeani.dispose
end
def pbUpdatePokemonInMap
$pokeani.update if $pokeani && !$pokeani.disposed?
end
class GifAnim
attr_accessor :selected
attr_accessor :shadow
attr_accessor :sprite
attr_accessor :src_rect
attr_accessor :showshadow
attr_accessor :status
attr_reader :loaded
def initialize(x,y,viewport=nil,repeat=false)
@viewport=viewport
@metrics=load_data("Data/metrics.dat")
@selected=0
@status=0
@loaded=false
@repeat=repeat
@showshadow=false
@altitude=0
@yposition=0
@sprite=Sprite.new(@viewport)
@sprite.x=x
@sprite.y=y
@overlay=Sprite.new(@viewport)
@lock=false
end
def x; @sprite.x; end
def y; @sprite.y; end
def z; @sprite.z; end
def ox; @sprite.ox; end
def oy; @sprite.oy; end
def ox=(val);;end
def oy=(val);;end
def zoom_x; @sprite.zoom_x; end
def zoom_y; @sprite.zoom_y; end
def visible; @sprite.visible; end
def opacity; @sprite.opacity; end
def width; @bitmap.width; end
def height; @bitmap.height; end
def tone; @sprite.tone; end
def bitmap; @bitmap.bitmap; end
def actualBitmap; @bitmap; end
def disposed?; @sprite.disposed?; end
def color; @sprite.color; end
def src_rect; @sprite.src_rect; end
def blend_type; @sprite.blend_type; end
def angle; @sprite.angle; end
def mirror; @sprite.mirror; end
def lock
@lock=true
end
def unlock
@lock=false
end
def bitmap=(val)
@bitmap.bitmap=val
end
def finished?
return @bitmap.finished?
end
def middle?
return @bitmap.middle?
end
def x=(val)
@sprite.x=val
end
def ox=(val)
@sprite.ox=val
end
def oy=(val)
@sprite.oy=val
end
def y=(val)
@sprite.y=val
end
def zoom_x=(val)
@sprite.zoom_x=val
end
def zoom_y=(val)
@sprite.zoom_y=val
end
def visible=(val)
@sprite.visible=val
end
def opacity=(val)
@sprite.opacity=val
end
def tone=(val)
@sprite.tone=val
end
def color=(val)
@sprite.color=val
end
def blend_type=(val)
@sprite.blend_type=val
end
def angle=(val)
@sprite.angle=(val)
end
def mirror=(val)
@sprite.mirror=(val)
end
def dispose
@sprite.dispose
end
def z=(val)
@sprite.z=val
end
def totalFrames; @bitmap.animationFrames; end
def toLastFrame; @bitmap.toFrame("last"); end
def selected; end
def setBitmap(file)
if !@repeat
@bitmap=AnimatedBitmapWrapperAnim.new(file)
@[email protected]/2
@[email protected]/2
else
@bitmap=AnimatedBitmapWrapper.new(file)
@bitmap.setSpeed(2)
@[email protected]/2
end
@[email protected]
end
def update
return if @lock
if @bitmap
@bitmap.update
@[email protected]
end
end
end
#===============================================================================
#
# Starts here
#
#===============================================================================
class PokemonTrainerCard_Scene
def update
pbUpdateSpriteHash(@sprites)
@sprites["bg"].x-=1.4
@sprites["bg"].y-=1.4
@sprites["bg"].x=0 if @sprites["bg"].x<=-64
@sprites["bg"].y=0 if @sprites["bg"].y<=-64
end
def pbStartScene
@sprites={}
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@scene=0
@showleader=false
@sprites["bg"] = Sprite.new(@viewport)
@sprites["bg"].bitmap = RPG::Cache.picture("trainercardbg")
@sprites["card"]=IconSprite.new(8,0,@viewport)
if $Trainer.isFemale?
@sprites["card"].setBitmap("Graphics/Pictures/TrainerCard/trainercard1")#{$Trainer.cardlevel}")
else
@sprites["card"].setBitmap("Graphics/Pictures/TrainerCard/trainercard0")
end
@sprites["card"].visible=true
@sprites["darkbg"] = Sprite.new(@viewport)
@sprites["darkbg"].bitmap = RPG::Cache.picture("Darkbg")
@sprites["darkbg"].visible = false
@sprites["trainer"]=IconSprite.new(336,42,@viewport)
@sprites["trainer"].setBitmap(pbPlayerSpriteFile($Trainer.trainertype))
@sprites["trainer"].zoom_x=1.0; @sprites["trainer"].zoom_y=1.0
@totalframe=@sprites["trainer"].bitmap.width/@sprites["trainer"].bitmap.height
realwidth=@sprites["trainer"].bitmap.width/@totalframe
@sprites["trainer"].src_rect.set((@totalframe-1)*realwidth, 0,
realwidth,@sprites["trainer"].bitmap.height)
@sprites["trainer"].z=2
@sprites["trainer"].visible=true
@sprites["bgbadge"] = Sprite.new(@viewport)
@sprites["bgbadge"].bitmap = RPG::Cache.picture("TrainerCard/trainerbadges")
@sprites["bgbadge"].y=0
@sprites["bgbadge"].visible=false
@sprites["blackleader"] = Sprite.new(@viewport)
@sprites["blackleader"].bitmap = RPG::Cache.picture("TrainerCard/leaderfaces")
@sprites["blackleader"].y=26
@sprites["blackleader"].src_rect.set(0,150,512,150)
@sprites["blackleader"].visible=false
@sprites["overlayfaces"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
@sprites["overlayfaces"].visible=false
@sprites["gyminfo"] = Sprite.new(@viewport)
@sprites["gyminfo"].bitmap = RPG::Cache.picture("TrainerCard/trainercardgyminfo")
@sprites["gyminfo"].y=160
@sprites["gyminfo"].visible=false
@sprites["normalbar"]=IconSprite.new(0,Graphics.height-48,@viewport)#
@sprites["normalbar"].setBitmap("Graphics/Pictures/TrainerCard/normalbar")
@sprites["cancelbuttom"]=Sprite.new(@viewport)
@sprites["cancelbuttom"].bitmap=Cache.picture("TrainerCard/globalicons")
@sprites["cancelbuttom"].x=460; @sprites["cancelbuttom"].y=Graphics.height-74
@sprites["cancelbuttom"].src_rect.set(0, 0, 64, 64)
@sprites["badgeicon"] = Sprite.new(@viewport)
@sprites["badgeicon"].bitmap = Cache.picture("TrainerCard/trainercardicons")
@sprites["badgeicon"].x = 8
@sprites["badgeicon"].y = 316
@sprites["badgeicon"].src_rect.set(0,64,64,64)
@sprites["leadersprite"] = TrainerSpriteBW.new(380+30,270,@viewport)
trainerfile=sprintf("Graphics/Trainers/%s",LEADERINFO[0][0])
@sprites["leadersprite"].setBitmap(trainerfile)
@sprites["leadersprite"].visible=false
@sprites["badgeinfo"] = Sprite.new(@viewport)
@sprites["badgeinfo"].bitmap = Cache.picture("TrainerCard/badges")
@sprites["badgeinfo"].x=300; @sprites["badgeinfo"].y=172
@sprites["badgeinfo"].src_rect.set(0,0,64,147)
@sprites["badgeinfo"].zoom_x=0.5;@sprites["badgeinfo"].zoom_y=0.5
@sprites["badgeinfo"].visible=false
@sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
@sprites["overlayleader"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
@sprites["blacktran"] = Sprite.new(@viewport)
@sprites["blacktran"].bitmap = RPG::Cache.picture("blackscreen")
@sprites["blacktran"].zoom_y=2.5
@sprites["blacktran"].y=Graphics.height
@sprites["blacktran"].z=999999
pbSetSystemFont(@sprites["overlay"].bitmap)
pbSetSystemFont(@sprites["overlayleader"].bitmap)
pbSetSystemFont(@sprites["overlayfaces"].bitmap)
pbDrawTrainerCardFront
if $PokemonGlobal.trainerRecording
$PokemonGlobal.trainerRecording.play
end
pbFadeInAndShow(@sprites) { update }
end
def moveUpEffect
loop do
Graphics.update
update
@sprites["blacktran"].y-=46
@sprites["blacktran"].y=0 if @sprites["blacktran"].y<0
break if @sprites["blacktran"].y==0
end
end
def moveDownEffect
loop do
Graphics.update
update
@sprites["blacktran"].y+=46
@sprites["blacktran"].y=Graphics.height if @sprites["blacktran"].y>Graphics.height
break if @sprites["blacktran"].y==Graphics.height
end
end
def effectBadges
10.times do
Graphics.update
update
@sprites["blacktran"].opacity-=255/10
end
end
def effectFront
10.times do
Graphics.update
update
@sprites["blacktran"].opacity+=255/10
end
end
def pbDrawTrainerCardFront
@scene=0
pbClearLeaderInfo
@sprites["bg"].bitmap = RPG::Cache.picture("TrainerCard/trainercardbg")
@sprites["bgbadge"].visible=false
@sprites["card"].visible=true
@sprites["trainer"].visible=true
@sprites["badgeicon"].src_rect.set(0,64,64,64)
@sprites["cancelbuttom"].src_rect.set(0, 0, 64, 64)
@sprites["blackleader"].visible=false
@sprites["overlayfaces"].visible=false
overlay=@sprites["overlay"].bitmap
overlay.clear
totalsec = Graphics.frame_count / Graphics.frame_rate
hour = totalsec / 60 / 60
min = totalsec / 60 % 60
time=_ISPRINTF("{1:02d}:{2:02d}",hour,min)
$PokemonGlobal.startTime=pbGetTimeNow if !$PokemonGlobal.startTime
starttime=_ISPRINTF("{1:s} {2:d}, {3:d}",
pbGetAbbrevMonthName($PokemonGlobal.startTime.mon),
$PokemonGlobal.startTime.day,
$PokemonGlobal.startTime.year)
pubid=sprintf("%05d",$Trainer.publicID($Trainer.id))
baseColor=Color.new(255,255,255)
shadowColor=Color.new(181,189,206)
plus=396
textPositions=[
[_INTL("NAME"),48,64,0,baseColor,shadowColor],
[_INTL("{1}",$Trainer.name),303,64,1,baseColor,shadowColor],
[_INTL("ID No."),48,96,0,baseColor,shadowColor],
[_INTL("{1}",pubid),303,96,1,baseColor,shadowColor],
[_INTL("MONEY"),48,128,0,baseColor,shadowColor],
[_INTL("${1}",$Trainer.money),303,128,1,baseColor,shadowColor],
[_INTL("Time"),48,242,0,baseColor,shadowColor],
[time,464,242,1,baseColor,shadowColor],
[_INTL("Started"),48,272,0,baseColor,shadowColor],
[starttime,464,272,1,baseColor,shadowColor]
]
if $Trainer.pokedex
textPositions.push([_INTL("Pokédex"),48,208,0,baseColor,shadowColor])
textPositions.push([_ISPRINTF("{1:d}",$Trainer.pokedexOwned),
464,212,1,baseColor,shadowColor])
end
pbDrawTextPositions(overlay,textPositions)
end
def pbDrawTrainerCardBadges
@scene=1
pbClearLeaderInfo
@sprites["bg"].bitmap = RPG::Cache.picture("TrainerCard/trainercardbg2")
@sprites["bgbadge"].visible=true
@sprites["card"].visible=false
@sprites["trainer"].visible=false
@sprites["badgeicon"].src_rect.set(0, 0, 64, 64)
@sprites["cancelbuttom"].src_rect.set(0, 0, 64, 64)
@sprites["blackleader"].visible=true
@sprites["overlayfaces"].visible=true
overlay=@sprites["overlay"].bitmap
overlay.clear
totalsec = Graphics.frame_count / Graphics.frame_rate
hour = totalsec / 60 / 60
min = totalsec / 60 % 60
time=_ISPRINTF("{1:02d}:{2:02d}",hour,min)
$PokemonGlobal.startTime=pbGetTimeNow if !$PokemonGlobal.startTime
starttime=_ISPRINTF("{1:s} {2:d}, {3:d}",
pbGetAbbrevMonthName($PokemonGlobal.startTime.mon),
$PokemonGlobal.startTime.day,
$PokemonGlobal.startTime.year)
pubid=sprintf("%05d",$Trainer.publicID($Trainer.id))
baseColor=Color.new(255,255,255)
shadowColor=Color.new(181,189,206)
x=0
x2=0
region=pbGetCurrentRegion(0) # Get the current region
imagePositions=[]
leaderPositions=[]
for i in 0...8
if $Trainer.badges[i+region*8]
imagePositions.push(["Graphics/Pictures/TrainerCard/badges",x,180,i*65,region*147,64,147])
leaderPositions.push(["Graphics/Pictures/TrainerCard/leaderfaces",x2,26,i*64,0,64,150])
end
x2+=64
x+=65
end
pbDrawImagePositions(@sprites["overlayfaces"].bitmap,leaderPositions)
pbDrawImagePositions(overlay,imagePositions)
end
def pbShowLeaderInfo(leaders)
@showleader=true
leader=leaders.to_i
@sprites["darkbg"].visible = true
@sprites["cancelbuttom"].src_rect.set(0, 64, 64, 64)
@sprites["overlay"].bitmap.clear
@sprites["overlayleader"].bitmap.clear
@sprites["leadersprite"].visible=false
@sprites["badgeinfo"].visible=false
if $Trainer.badges[leaders]
trainerfile=sprintf("Graphics/Trainers/%s",LEADERINFO[leader][0])
@sprites["leadersprite"].setBitmap(trainerfile)
@sprites["leadersprite"].visible=true
pbPositionPokemonSprite(@sprites["leadersprite"],380,180)
@sprites["badgeinfo"].src_rect.set(leader*64,0,64,147)
@sprites["badgeinfo"].visible=true
end
@sprites["gyminfo"].visible=true
baseColor=Color.new(255,255,255)
shadowColor=Color.new(181,189,206)
leaderinfo=_INTL("{1} Gym Leader\n",LEADERINFO[leader][1])
leaderinfo+=_INTL("{1}\n",LEADERINFO[leader][2])
phrase=_INTL("{1}",LEADERINFO[leader][3])
badgename=_INTL("{1}",LEADERINFO[leader][4])
drawTextEx(@sprites["overlayleader"].bitmap,16,178,Graphics.width-(42*2),5,leaderinfo,baseColor,shadowColor)
drawTextEx(@sprites["overlayleader"].bitmap,16,258,Graphics.width-(42*2),5,phrase,baseColor,shadowColor)
drawTextEx(@sprites["overlayleader"].bitmap,206,348,Graphics.width-(42*2),5,badgename,baseColor,shadowColor)
end
def pbClearLeaderInfo
@showleader=false
@sprites["overlay"].bitmap.clear
@sprites["overlayleader"].bitmap.clear
@sprites["leadersprite"].visible=false
@sprites["gyminfo"].visible=false
@sprites["badgeinfo"].visible=false
@sprites["cancelbuttom"].src_rect.set(0, 0, 64, 64)
end
def pbTrainerCard
loop do
Graphics.update
Input.update
self.update
if @scene==1 && $mouse.y>25 && $mouse.y<175 && Input.triggerex?(Input::Mouse_Left)
pbShowLeaderInfo($mouse.x/64)
end
if $mouse.leftClick?(@sprites["badgeicon"], 64, 64)
if @scene==0
pbSEPlay("BW2MenuChoose")
globalIconAnim(@sprites["badgeicon"])
moveUpEffect
pbDrawTrainerCardBadges
effectBadges
else
pbSEPlay("BW2MenuChoose")
globalIconAnim(@sprites["badgeicon"])
effectFront
pbDrawTrainerCardFront
moveDownEffect
end
end
if Input.trigger?(Input::B) || $mouse.leftClick?(@sprites["cancelbuttom"], 64, 64)
if !@showleader
globalIconAnim(@sprites["cancelbuttom"],0)
pbSEPlay("BW2Cancel")
break
else
globalIconAnim(@sprites["cancelbuttom"],1)
pbDrawTrainerCardBadges
end
end
end
end
def pbEndScene
pbFadeOutAndHide(@sprites) { update }
pbDisposeSpriteHash(@sprites)
@viewport.dispose
end
end
class PokemonTrainerCard
def initialize(scene)
@scene=scene
end
def pbStartScreen
@scene.pbStartScene
@scene.pbTrainerCard
@scene.pbEndScene
end
end
The Mouse module is ofcourse needed.
Spoiler:
Code:
#===============================================================================
# Easy Mouse System
# by Luka S.J
#
# Enjoy the script, and make sure to give credit!
# (DO NOT ALTER THE NAMES OF THE INDIVIDUAL SCRIPT SECTIONS OR YOU WILL BREAK
# YOUR SYSTEM!)
#-------------------------------------------------------------------------------
RNET = FileTest.exist?("Rpg.NET.dll") ? "Rpg.NET.dll" : false # Rpg.NET.dll reference
INACTIVITY_TIMER = -1 # The amount of time (in seconds) needed to pass before the
# mouse is considered as inactive. Set to a negative
# number to disable entirely.
CLICK_TIMEOUT = 1 # Amount of time (in seconds) before release of mouse click,
# until that mouse click becomes invalid
#===============================================================================
# ** Class Mouse
# by Luka S.J.
#-------------------------------------------------------------------------------
# Mouse input class to enable the usage of the module Mouse
#
# * Requires module Mouse (by Peter O.)
# * Requires module Input (by Peter O.)
# * Requires Rpg.NET.dll for Mouse scrolling
#===============================================================================
class Game_Mouse
attr_reader :visible
attr_reader :x
attr_reader :y
attr_reader :object_ox
attr_reader :object_oy
# replace nil with a valid path to a graphics location to display a sprite
# for the mouse
@@graphics_path = nil
# ----------------------------------------------------------------
# Requires the Rpg.NET.dll for mouse scrolling
if RNET
Win32API.new(RNET, 'Initialize', 'i', '').call(1)
WheelDelta = Win32API.new(RNET, 'InputGetWheelDelta', '', 'i')
end
# ----------------------------------------------------------------
# starts up the mouse and determines initial co-ordinate
def initialize
@position = Mouse.getMousePos
@cursor = Win32API.new("user32", "ShowCursor", "i", "i" )
@inactive_timer = 0
@wheel = 0
@delta = 0
@drag = nil
@hold = false
@drag_object = nil
@drag_buffer = 0
@visible = false
@long = 0
@rect_x = nil
@rect_y = nil
if @position.nil?
@x = -5000
@y = -5000
else
@x = @position[0]
@y = @position[1]
end
@static_x = @x
@static_y = @y
@moved_x = @x
@moved_y = @y
@x_offset = 0
@y_offset = 0
@object_ox = nil
@object_oy = nil
# used to make on screen mouse sprite (if a graphics path is defined)
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z = 0x3FFFFFFF
@sprite = Sprite.new(@viewport)
if !@@graphics_path.nil?
@sprite.bitmap = BitmapCache.load_bitmap(@@graphics_path)
self.show
end
@sprite.visible = @visible
@sprite.x = @x
@sprite.y = @y
end
# updates the mouse (update placed in Input.update)
def update
@position = Mouse.getMousePos
@delta = WheelDelta.call / 120 if RNET
if [email protected]?
@x = @position[0]
@y = @position[1]
@x -= $ResizeOffsetX if $ResizeOffsetX
@y -= $ResizeOffsetY if $ResizeOffsetY
end
if INACTIVITY_TIMER >= 0 && self.notMoved?
@inactive_timer += 1
else
@inactive_timer = 0
end
@sprite.visible = @visible
@sprite.x = @x
@sprite.y = @y
end
# manipulation of the visibility of the mouse sprite
def show
@cursor.call(1)
@visible=true
end
def hide
@cursor.call(0)
@visible=false
end
# checks whether or not the mouse is active
def active?
return false if @position.nil?
return true if INACTIVITY_TIMER < 0
return false if @inactive_timer > INACTIVITY_TIMER*Graphics.frame_rate
return true
end
# global method to retrieve input button
def button?(arg=0)
input = [Input::Mouse_Left,Input::Mouse_Right,Input::Mouse_Middle]
if arg.is_a?(Numeric)
arg = 0 if arg < 0 || arg >= input.length
elsif arg.is_a?(String)
arg = 0 if arg=="left"
arg = 1 if arg=="right"
arg = 2 if arg=="middle"
else
arg = 0
end
return input[arg]
end
# gets the necessary object parameters for mouse checks
def objectParams?(object=nil)
return 0, 0, 0, 0 if object.nil?
x, y, w, h = 0, 0, 0, 0
if object.is_a?(Sprite)
x = (object.x-object.ox)
y = (object.y-object.oy)
if object.respond_to?(:viewport) && object.viewport
x+=object.viewport.rect.x
y+=object.viewport.rect.y
end
w = (object.bitmap.width*object.zoom_x) if object.bitmap
h = (object.bitmap.height*object.zoom_y) if object.bitmap
if object.respond_to?(:src_rect)
w = (object.src_rect.width*object.zoom_x) if object.bitmap && object.src_rect.width != object.bitmap.width
h = (object.src_rect.height*object.zoom_y) if object.bitmap && object.src_rect.height != object.bitmap.height
end
w = (object.width*object.zoom_x) if object.respond_to?(:width)
h = (object.height*object.zoom_y) if object.respond_to?(:height)
elsif object.is_a?(Viewport)
x, y, w, h = object.rect.x, object.rect.y, object.rect.width, object.rect.height
else
x = (object.x) if object.respond_to?(:x)
y = (object.y) if object.respond_to?(:y)
if object.respond_to?(:viewport) && object.viewport
x+=object.viewport.rect.x
y+=object.viewport.rect.y
end
w = (object.width) if object.respond_to?(:width)
h = (object.height) if object.respond_to?(:height)
end
return x, y, w, h
end
# checks if mouse is over a sprite (can define custom width and height)
def over?(*args)
object, width, height, void = args
return false if object.nil? || !self.active?
x, y, w, h = self.objectParams?(object)
w = width if !width.nil?; h = height if !height.nil?
return true if @x >= x && @x <= (x + w) and @y >= y && @y <= (y + h)
return false
end
# special method to check whether the mouse is over sprites with special shapes
def overPixel?(*args)
sprite, void = args
return false if !sprite.respond_to?(:bitmap) || !self.active?
bitmap = sprite.bitmap
return false if !self.over?(sprite)
x, y, w, h = self.objectParams?(sprite)
bx = @x-x
by = @y-y
return true if bitmap.get_pixel(bx,by).alpha>0
return false
end
# checks if the mouse is being dragged
def dragging?(*args)
object, input = args; dragging = false
return false if (!object.nil? && !self.over?(object)) || !self.active?
@drag = [@x,@y] if @drag.nil? && Input.pressex?(self.button?(input))
if @drag.is_a?(Array) && (@drag[0]!=@x || @drag[1]!=@y) && Input.pressex?(self.button?(input))
@drag = true
if !object.nil?
@drag_object = object
@object_ox = @x - object.x
@object_oy = @y - object.y
end
end
dragging = true if @drag==true
if !Input.pressex?(self.button?(input))
@drag = nil
@drag_object = nil
end
return dragging
end
# returns the distance moved when dragging the mouse
# relies on def dragging? / cannot be used standalone
def dragged_x?
return @x - @x_offset
end
def dragged_y?
return @y - @y_offset
end
# method used for dragging objects with the mouse
# can be confined to a Rect object
def drag_object?(*args)
object, lock, rect, input = *args
return false if !self.dragging?(object) || !self.active?
ret = false
if Input.pressex?(self.button?(input))
object.x = @x - @object_ox if lock!="vertical"
object.y = @y - @object_oy if lock!="horizontal"
if !rect.nil?
x, y, w, h = self.objectParams?(rect)
object.x = x if object.x < x if lock!="vertical"
object.y = y if object.y < y if lock!="horizontal"
width = self.objectParams?(object)[2]
height = self.objectParams?(object)[3]
object.x = x+w-width if object.x > x+w-width if lock!="vertical"
object.y = y+h-height if object.y > y+h-height if lock!="horizontal"
end
ret = true
end
return ret
end
# checks if mouse is being pressed and held down for a period of timme
def long?(*args)
object, input = args
return false if !self.active?
if self.press?(object,input)
@long+=1
else
@long = 0
end
return true if @long > Graphics.frame_rate*CLICK_TIMEOUT
return false
end
# creates a Rect object based on mouse dragging
# takes an optional object parameter to specify a "viewport" of sorts
def createRect(*args)
object, input = args
return Rect.new(0,0,0,0) if (!object.nil? && !self.over?(object) && Input.pressex?(self.button?(input)) && @rect_x.nil?) || !self.active?
if Input.pressex?(self.button?(input))
@rect_x = @x if @rect_x.nil?
@rect_y = @y if @rect_y.nil?
x = (@x < @rect_x) ? @x : @rect_x
y = (@y < @rect_y) ? @y : @rect_y
w = (@x < @rect_x) ? (@rect_x-@x) : (@x-@rect_x)
h = (@y < @rect_y) ? (@rect_y-@y) : (@y-@rect_y)
if !object.nil?
x2, y2, w2, h2 = self.objectParams?(object)
x-=x2; y-=y2
end
return Rect.new(x,y,w,h)
else
@rect_x = nil
@rect_y = nil
return Rect.new(0,0,0,0)
end
end
# checks if mouse is left clicking a sprite (can define custom width and height)
# (applies dragging)
def click?(*args)
object, input, width, height = args; ret = false
return false if (!object.nil? && !self.over?(object,width,height)) || !self.active?
@hold = true if Input.pressex?(self.button?(input))
if @hold && Input.releaseex?(self.button?(input))
@hold = false
ret = !self.dragging?(nil,input) && !(@long > Graphics.frame_rate*CLICK_TIMEOUT)
end
self.long?(nil,input)
return ret
end
def click_old?(*args)
object, input = args
return false if (!object.nil? && !self.over?(object)) || !self.active?
return Input.triggerex?(self.button?(input))
end
# checks if mouse is left clicking a sprite / continuous (can define custom width and height)
def press?(*args)
object, input, width, height = args
return false if (!object.nil? && !self.over?(object,width,height)) || !self.active?
return Input.pressex?(self.button?(input))
end
# checks if the mouse is in a certain area of the App window
def inArea?(*args)
x, y, w, h = args
return self.over?(Rect.new(x,y,w,h))
end
# checks if the mouse is left clicking in a certain area of the App window
def areaClick?(*args)
x, y, w, h, input = args
return self.click?(Rect.new(x,y,w,h),input)
end
# checks if the mouse is right clicking in a certain area of the App window
def areaPress?(*args)
x, y, w, h, input = args
return self.press?(Rect.new(x,y,w,h),input)
end
# checks if the mouse is idle/ not moving around
def isStatic?
ret=false
ret=true if @static_x==@x && @static_y==@y
if !(@static_x==@x) || !(@static_y==@y)
@static_x=@x
@static_y=@y
end
return ret
end
# same thing as above, but named differently for the BW kit
def notMoved?
ret=false
ret=true if @moved_x==@x && @smoved_y==@y
if !(@moved_x==@x) || !(@moved_y==@y)
@moved_x=@x
@moved_y=@y
end
return ret
end
# checks if mouse is scrolling upwards (works with multi-touch gestures)
def scroll_up?
return false if !self.active?
ret = false
ret = true if @delta-@wheel>0
@inactive_timer = 0 if ret
if @delta!=@wheel && ret
@wheel = @delta
end
return ret
end
# checks if mouse is scrolling downwards (works with multi-touch gestures)
def scroll_down?
return false if !self.active?
ret = false
ret = true if @delta-@wheel<0
@inactive_timer = 0 if ret
if @delta!=@wheel && ret
@wheel = @delta
end
return ret
end
#-----------------------------------------------------------------------------
# Legacy functions
#-----------------------------------------------------------------------------
def leftClick?(object=nil,width=nil,height=nil)
return self.click?(object,0,width,height)
end
def rightClick?(object=nil,width=nil,height=nil)
return self.click_old?(object,1,width,height)
end
def leftPress?(object=nil,width=nil,height=nil)
return self.press?(object,0,width,height)
end
def rightPress?(object=nil,width=nil,height=nil)
return self.press?(object,1,width,height)
end
def inAreaLeft?(x,y,w,h)
self.areaClick?(x,y,w,h,0)
end
def inAreaRight?(x,y,w,h)
self.areaClick?(x,y,w,h,1)
end
def inAreaLeftPress?(x,y,w,h)
self.areaPress?(x,y,w,h,0)
end
def inAreaRightPress?(x,y,w,h)
self.areaPress?(x,y,w,h,1)
end
def drag_object_x?(object,rect=nil)
return self.drag_object?(object,"horizontal",rect)
end
def drag_object_y?(object,rect=nil)
return self.drag_object?(object,"vertical",rect)
end
end
#===============================================================================
# Mouse update methods for the Input module
#===============================================================================
module Input
Mouse_Left = 0x01
Mouse_Right = 0x02
Mouse_Middle = 0x04
class << Input
alias update_mouse update
end
def self.update
$mouse.update if defined?($mouse) && $mouse
update_mouse
end
end
#===============================================================================
# Initializes the Game_Mouse class
#===============================================================================
$mouse = Game_Mouse.new
Credits- KleinStudio
Graphics- KleinStudio
View attachment B2W2 TrainerCard.zip
Last edited: