- 7
- Posts
- 4
- Years
- Seen May 7, 2022
In the moment, I was kinda new in this forum so I posted this comment in the wrong section (Essentials Script), if some mod could just delete it, I will appreciate it:
https://www.pokecommunity.com/threads/448820
Therefore, I'm going to post it here and I want to apologise for that mistake.
I was thinking into a new script in which wild pokemon appear in the overworld and challenge the player, just like a current trainer. I know that you can technically do that by changing trainers' sprites by pokemon sprites but there is still the ball throw animation made by a pokemon sprites (at the end, it works as trainer but in disguise). It may sound silly (and maybe it is) but it doesn't feel inmersive at all. My idea would work like a trainer battle but with several changes:
-You start straigh ahead the combat, no pokeball animation, just like finding a wild pokemon (event touch, transition, the battle itself)
-There would be a special line-up graphic for this encounters instead of the clasic pokeball graphic (because of they are still "wild pokemon"). I have made a concept about it with a substitute sprite drawn by loppy654 but it's just an idea
https://drive.google.com/file/d/1emzdsWtB7Qgf37EE0G0PIYJXr8mM3l8A/view?usp=sharing
Here the original work
https://forums.p-insurgence.com/t/i-made-a-thing/16951
-If a pokemon dies, obviously, the animation will change. Maybe the next pokemon would just appear from the right of the screen, just a simple horizontal movement
-About the IA, I think it could be as customizable as trainer's AI
At the end of the day, it's a simple-minded idea. In fact, we see this mechanic a lot in other rpgs but I think it could be an improvement.
This thread is mainly to ask if this idea had taken place before.
I think that maybe by editing PokeBattle_Scene, in specific, those scripts, it could be gotten something but I don't know where to start
https://www.pokecommunity.com/threads/448820
Therefore, I'm going to post it here and I want to apologise for that mistake.
I was thinking into a new script in which wild pokemon appear in the overworld and challenge the player, just like a current trainer. I know that you can technically do that by changing trainers' sprites by pokemon sprites but there is still the ball throw animation made by a pokemon sprites (at the end, it works as trainer but in disguise). It may sound silly (and maybe it is) but it doesn't feel inmersive at all. My idea would work like a trainer battle but with several changes:
-You start straigh ahead the combat, no pokeball animation, just like finding a wild pokemon (event touch, transition, the battle itself)
-There would be a special line-up graphic for this encounters instead of the clasic pokeball graphic (because of they are still "wild pokemon"). I have made a concept about it with a substitute sprite drawn by loppy654 but it's just an idea
https://drive.google.com/file/d/1emzdsWtB7Qgf37EE0G0PIYJXr8mM3l8A/view?usp=sharing
Here the original work
https://forums.p-insurgence.com/t/i-made-a-thing/16951
-If a pokemon dies, obviously, the animation will change. Maybe the next pokemon would just appear from the right of the screen, just a simple horizontal movement
-About the IA, I think it could be as customizable as trainer's AI
At the end of the day, it's a simple-minded idea. In fact, we see this mechanic a lot in other rpgs but I think it could be an improvement.
This thread is mainly to ask if this idea had taken place before.
I think that maybe by editing PokeBattle_Scene, in specific, those scripts, it could be gotten something but I don't know where to start
Spoiler:
Code:
# Shows the enemy trainer(s)'s Pokémon being thrown out. It appears at coords
# (@spritex,@spritey), and moves in y to @endspritey where it stays for the rest
# of the battle, i.e. the latter is the more important value.
# Doesn't show the ball itself being thrown.
#===============================================================================
class PokeballSendOutAnimation
SPRITESTEPS=10
STARTZOOM=0.125
def initialize(sprite,spritehash,pkmn,illusionpoke,doublebattle)
@illusionpoke=illusionpoke
@disposed=false
@ballused=pkmn.pokemon ? pkmn.pokemon.ballused : 0
if @illusionpoke
@[email protected] || 0
end
@PokemonBattlerSprite=sprite
@PokemonBattlerSprite.visible=false
@PokemonBattlerSprite.tone=Tone.new(248,248,248,248)
@pokeballsprite=IconSprite.new(0,0,sprite.viewport)
@pokeballsprite.setBitmap(sprintf("Graphics/Pictures/ball%02d",@ballused))
if doublebattle
@spritex=PokeBattle_SceneConstants::FOEBATTLERD1_X if pkmn.index==1
@spritex=PokeBattle_SceneConstants::FOEBATTLERD2_X if pkmn.index==3
else
@spritex=PokeBattle_SceneConstants::FOEBATTLER_X
end
@spritey=0
if @illusionpoke
@endspritey=adjustBattleSpriteY(sprite,@illusionpoke.species,pkmn.index)
else
@endspritey=adjustBattleSpriteY(sprite,pkmn.species,pkmn.index)
end
if doublebattle
@spritey=PokeBattle_SceneConstants::FOEBATTLERD1_Y if pkmn.index==1
@spritey=PokeBattle_SceneConstants::FOEBATTLERD2_Y if pkmn.index==3
@endspritey+=PokeBattle_SceneConstants::FOEBATTLERD1_Y if pkmn.index==1
@endspritey+=PokeBattle_SceneConstants::FOEBATTLERD2_Y if pkmn.index==3
else
@spritey=PokeBattle_SceneConstants::FOEBATTLER_Y
@endspritey+=PokeBattle_SceneConstants::FOEBATTLER_Y
end
@spritehash=spritehash
@pokeballsprite.x=@[email protected]/2
@pokeballsprite.y=@[email protected]/2-4
@[email protected]+1
@pkmn=pkmn
@shadowX=@spritex
@shadowY=@spritey
if @spritehash["shadow#{@pkmn.index}"] && @spritehash["shadow#{@pkmn.index}"].bitmap!=nil
@shadowX-=@spritehash["shadow#{@pkmn.index}"].bitmap.width/2
@shadowY-=@spritehash["shadow#{@pkmn.index}"].bitmap.height/2
end
@shadowVisible=showShadow?(pkmn.species)
if @illusionpoke
@shadowVisible=showShadow?(@illusionpoke.species)
end
@stepspritey=(@spritey-@endspritey)
@zoomstep=(1.0-STARTZOOM)/SPRITESTEPS
@animdone=false
@frame=0
end
def disposed?
return @disposed
end
def animdone?
return @animdone
end
def dispose
return if disposed?
@pokeballsprite.dispose
@disposed=true
end
def update
return if disposed?
@pokeballsprite.update
@frame+=1
if @frame==2
pbSEPlay("recall")
end
if @frame==4
@PokemonBattlerSprite.visible=true
@PokemonBattlerSprite.zoom_x=STARTZOOM
@PokemonBattlerSprite.zoom_y=STARTZOOM
pbSpriteSetCenter(@PokemonBattlerSprite,@spritex,@spritey)
if @illusionpoke
pbPlayCry(@illusionpoke)
else
pbPlayCry(@pkmn.pokemon ? @pkmn.pokemon : @pkmn.species)
end
@pokeballsprite.setBitmap(sprintf("Graphics/Pictures/ball%02d_open",@ballused))
end
if @frame==8
@pokeballsprite.visible=false
end
if @frame>8 && @frame<=16
color=Color.new(248,248,248,256-(16-@frame)*32)
@spritehash["enemybase"].color=color
@spritehash["playerbase"].color=color
@spritehash["battlebg"].color=color
for i in 0...4
@spritehash["shadow#{i}"].color=color if @spritehash["shadow#{i}"]
end
end
if @frame>16 && @frame<=24
color=Color.new(248,248,248,(24-@frame)*32)
tone=(24-@frame)*32
@PokemonBattlerSprite.tone=Tone.new(tone,tone,tone,tone)
@spritehash["enemybase"].color=color
@spritehash["playerbase"].color=color
@spritehash["battlebg"].color=color
for i in 0...4
@spritehash["shadow#{i}"].color=color if @spritehash["shadow#{i}"]
end
end
if @frame>5 && @PokemonBattlerSprite.zoom_x<1.0
@PokemonBattlerSprite.zoom_x+=@zoomstep
@PokemonBattlerSprite.zoom_y+=@zoomstep
@PokemonBattlerSprite.zoom_x=1.0 if @PokemonBattlerSprite.zoom_x > 1.0
@PokemonBattlerSprite.zoom_y=1.0 if @PokemonBattlerSprite.zoom_y > 1.0
currentY=@spritey-(@stepspritey*@PokemonBattlerSprite.zoom_y)
pbSpriteSetCenter(@PokemonBattlerSprite,@spritex,currentY)
@PokemonBattlerSprite.y=currentY
end
if @PokemonBattlerSprite.tone.gray<=0 && @PokemonBattlerSprite.zoom_x>=1.0
@animdone=true
if @spritehash["shadow#{@pkmn.index}"]
@spritehash["shadow#{@pkmn.index}"].x=@shadowX
@spritehash["shadow#{@pkmn.index}"].y=@shadowY
@spritehash["shadow#{@pkmn.index}"].visible=@shadowVisible
end
end
end
end
#===============================================================================
# Shows the enemy trainer(s) and the enemy party lineup sliding off screen.
# Doesn't show the ball thrown or the Pokémon.
#===============================================================================
class TrainerFadeAnimation
def initialize(sprites)
@frame=0
@sprites=sprites
@animdone=false
end
def animdone?
return @animdone
end
def update
return if @animdone
@frame+=1
@sprites["trainer"].x+=8
@sprites["trainer2"].x+=8 if @sprites["trainer2"]
@sprites["partybarfoe"].x+=8
@sprites["partybarfoe"].opacity-=12
for i in 0...6
@sprites["enemy#{i}"].opacity-=12
@sprites["enemy#{i}"].x+=8 if @frame>=i*4
end
@animdone=true if @sprites["trainer"].x>=Graphics.width &&
(!@sprites["trainer2"] || @sprites["trainer2"].x>=Graphics.width)
end
end
# Choose the ball's graphic (opponent's side)
ballgraphic="Graphics/Pictures/ballempty"
enemyindex=i
if @battle.doublebattle && i>=3
enemyindex=(i%3)[email protected](1)
end
if enemyindex<@battle.party2.length && @battle.party2[enemyindex]
if @battle.party2[enemyindex].hp<=0 || @battle.party2[enemyindex].isEgg?
ballgraphic="Graphics/Pictures/ballfainted"
elsif @battle.party2[enemyindex].status>0
ballgraphic="Graphics/Pictures/ballstatus"
else
ballgraphic="Graphics/Pictures/ballnormal"
end
end
pbAddSprite("enemy#{i}",
@xposenemy-i*ballmovedist*6,PokeBattle_SceneConstants::FOEPARTYBALL1_Y,
ballgraphic,@viewport)
@sprites["enemy#{i}"].z=41
end
@partyAnimPhase=2
end