1.Emotion bubbles are already implemented. You can use them through events. In the second page , "Show Animation...", just select the character you want the animation over his head and the animation . Exclaim bubble and Question bubble are already there.
2. What's the problem in changing the original Sprite? You can just do a backup of the original one and reverse back if you don't like the change.
Btw what defines the Trainer Card is this class:
###########################################
class PokemonTrainerCard_Scene
def pbUpdate
pbUpdateSpriteHash(@sprites)
end
def pbStartScene
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z = 99999
@sprites = {}
background = pbResolveBitmap(sprintf("Graphics/Pictures/Trainer Card/bg_f"))
if $Trainer.isFemale? && background
addBackgroundPlane(@sprites,"bg","Trainer Card/bg_f",@viewport)
else
addBackgroundPlane(@sprites,"bg","Trainer Card/bg",@viewport)
end
cardexists = pbResolveBitmap(sprintf("Graphics/Pictures/Trainer Card/card_f"))
@sprites["card"] = IconSprite.new(0,0,@viewport)
if $Trainer.isFemale? && cardexists
@sprites["card"].setBitmap("Graphics/Pictures/Trainer Card/card_f")
else
@sprites["card"].setBitmap("Graphics/Pictures/Trainer Card/card")
end
@sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
pbSetSystemFont(@sprites["overlay"].bitmap)
@sprites["trainer"] = IconSprite.new(336,112,@viewport)
@sprites["trainer"].setBitmap(pbPlayerSpriteFile($Trainer.trainertype))
@sprites["trainer"].x -= (@sprites["trainer"].bitmap.width-128)/2
@sprites["trainer"].y -= (@sprites["trainer"].bitmap.height-128)
@sprites["trainer"].z = 2
pbDrawTrainerCardFront
if $PokemonGlobal.trainerRecording
$PokemonGlobal.trainerRecording.play
end
pbFadeInAndShow(@sprites) { pbUpdate }
end
###########################################
The bold line is the one responsible for the sprite you want to change. Ofc you need to take a look at every function that is involved and change it to accomplish your purpose.