• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Your suggestions for Essentials

302
Posts
13
Years
  • Seen Aug 25, 2014
Having a fully working engine should be the main goal right now.
But the engine IS fully working, it just doesn't accommodate all types of Pokemon yet. :P

You also might want to check out the Gen 6 add-on thread that's going on. People are contributing cool stuff.
 
1,405
Posts
11
Years
Unown text font would be good to make the places where you catch Unown feel old and mysterious.

But i guess it's not essential
 

Maruno

Lead Dev of Pokémon Essentials
5,285
Posts
16
Years
http://www.pokecommunity.com/showthread.php?p=8238018 , this is an useful feature from official games at Gen V/VI. Use 'curcharskip += 1 if $PokemonSystem.textspeed>1' instead of 'curcharskip += 1' And makes the "mid" text speed to works like the current "fast".
That "skip one more" thing looks rather hacky. I've already made text faster in a better way, and fixed the super-fast text causing a crash in battle.
 

FL

Pokémon Island Creator
2,444
Posts
13
Years
  • Seen Apr 22, 2024
That "skip one more" thing looks rather hacky. I've already made text faster in a better way, and fixed the super-fast text causing a crash in battle.
One step ahead again!

It's hard to suggest something since v14 is at development a huge time and already have several features that we don't know, but I will keep trying!
 

Maruno

Lead Dev of Pokémon Essentials
5,285
Posts
16
Years
Don't try to guess at what might be in v14. If you have a suggestion, just suggest it.
 

Diverscope

Pardon me
152
Posts
11
Years
A suggestion from me: When you use a choice-window, some options will only appear when a particular condition is fullfilled.

Example: When the sailor asks you in which place you want to go, you can choose some islands only if you have the necessary item (e.g birth island if you have the AuroraTicket).
 

Radical Raptr

#BAMFPokemonNerd
1,121
Posts
13
Years
A suggestion from me: When you use a choice-window, some options will only appear when a particular condition is fullfilled.

Example: When the sailor asks you in which place you want to go, you can choose some islands only if you have the necessary item (e.g birth island if you have the AuroraTicket).

Theres no real need to since you can do this with condition branches
 
21
Posts
12
Years
  • Seen Jan 29, 2017
Theres no real need to since you can do this with condition branches

He can also use the script
Code:
command=Kernel.pbShowCommands(nil,commands,-1)
wich gives a lot more of flexibility, you can iterate through an array an decide if push a command to the list or not.
 

IceGod64

In the Lost & Found bin!
624
Posts
15
Years
Something like this really would not be hard to implement;

You know how it's possible to set the Next Battle's BGM, background, and victory ME using the PokémonGlobal relevant properies? Why not add one for nextBattleTransition? It would be a great feature for battles that aren't normal battles, but aren't important enough to demand a V.S. screen.
 

OliveCopper

Captain of Olive Kappa
306
Posts
10
Years
  • Seen Nov 29, 2016
One thing that NEEDS to be implemented in Pokemon Essentials v14? The evolution methods for Generation 6 Pokemon. Even though the addition of actual Pokemon is not necessary, the evolution method are. Trying to implement them will create the complaint "(Insert something here) is not a positive interger." I tried it myself, it always gave that complaint. Alternatively, you should code it so that it is no longer strict to positive intergers.
 
1,224
Posts
10
Years
One thing that NEEDS to be implemented in Pokemon Essentials v14? The evolution methods for Generation 6 Pokemon. Even though the addition of actual Pokemon is not necessary, the evolution method are. Trying to implement them will create the complaint "(Insert something here) is not a positive interger." I tried it myself, it always gave that complaint. Alternatively, you should code it so that it is no longer strict to positive intergers.

lol. That just means you haven't implemented them properly. There's room for up to 7 custom evolution methods as is in Essentials. There's nothing wrong with the current code.

However, I assume if he implements gen 6 pokemon, he will probably also implement the evolution methods as well.

I believe someone covered how to input them in the Gen 6 addons thread, and how to implement new evolutions is covered in the wiki. If you still can't figure it out after that, feel free to PM me for help.
 

Maruno

Lead Dev of Pokémon Essentials
5,285
Posts
16
Years
There are only four new evolution methods in Gen 6:

Level up in rain - The wiki has exactly this as an example.

Level up with a Dark-type Pokémon in the party - copy the basic level-up method (so you can customise the level), and include a check through the party for a Dark-type Pokémon. It's similar to Mantyke's check for a Remoraid.

Level up with two Amie affection hearts and knowing a Fairy-type move - Essentials doesn't have Amie or the Fairy type. You can use happiness instead, in which case you copy the happiness method and include a check through the Pokémon's moves for a Fairy-type move.

Level up while holding the 3DS upside-down - If you have any idea how to do this, please let me know.



What will be in v14, though, is a somewhat easier way of defining new evolution methods (in the same way I made defining new encounter methods easier). You'd still have to code their effects in yourself, but you won't have to dig through compiler scripts to add in numbers to get it to recognise new methods in the first place. It'll also have the option of expecting a type as the method's parameter.
 

Florio

Pokemon Crimson Skies Owner
391
Posts
15
Years
What I really want to see if full Gen V compatability. As in all Gen V moves and abilities. Gen VI would be nice too, but I think it would be smarter to fully complete Gen V first. Fully completed animations would be nice too, but may be asking for too much.

I think it would be cool to add the feature that HGSS has where you take a picture with you and your current party and then the picture goes to the PC.

Also maybe a randomizer feature. In my game when you beat the E4, I want it to be so the trainer receives a random Pokemon out of a select few rare ones (starters, event pokemon, etc).

Another thing that would be really nice is a way to adjust a volume in the options menu. Maybe a volume slider that ranges from 0-10, so you can turn down the music/sounds of the game if you want or mute it. Maybe separate bars for music and sound.

And I'm unsure if it works fully or not, but a full working daycare system with eggs is important too.
 
Last edited:

FL

Pokémon Island Creator
2,444
Posts
13
Years
  • Seen Apr 22, 2024
1. Remove the 'if $INTERNAL' for the line 'pbPrintException($!)'. This may helps developers while testing new effects since there is no reason for won't letting the error message pops and several times some error occurs when the dev forget/won't expect this bug. So, the dev must waste time reproducing this error when the flag is off. Sometimes the players may find an error, but can't inform the error message because there is no error message, only the battle with the "buggy screen".

2. The official games now are faster when changing the box at pokémon storage, so let's double it in Essentials. At 'pbSwitchBoxToRight' and 'pbSwitchBoxToLeft' change the 16 to 32. Maybe you need to reflect this at the others numbers at these defs, since the sum must be divisible by 32.

3.
Code:
def pbCheckPokemonIconFiles(params,egg=false)
  species=params[0]
  if egg
    bitmapFileName=sprintf("Graphics/Icons/icon%segg",getConstantName(PBSpecies,species)) rescue nil
    bitmapFileName=sprintf("Graphics/Icons/icon%03degg",species) if !pbResolveBitmap(bitmapFileName)
    bitmapFileName=sprintf("Graphics/Icons/iconEgg") if !pbResolveBitmap(bitmapFileName)
    return pbResolveBitmap(bitmapFileName)
  else
    for i in 0...2**(params.length-1)
      tgender=(i%2==0) ? params[1] : false
      tshiny=((i/2)%2==0) ? params[2] : false
      tform=((i/4)%2==0) ? params[3].to_s : ""
      tshadow=((i/8)%2==0) ? params[4] : false
      bitmapFileName=sprintf("Graphics/Icons/icon%s%s%s%s%s",
         getConstantName(PBSpecies,species),
         tgender ? "f" : "",
         tshiny ? "s" : "",
         (tform!="" ? "_"+tform : ""),
         tshadow ? "_shadow" : "") rescue nil
      bitmapFileName=sprintf("Graphics/Icons/icon%03d%s%s%s%s",
         species,
         tgender ? "f" : "",
         tshiny ? "s" : "",
         (tform!="" ? "_"+tform : ""),
         tshadow ? "_shadow" : "") if !pbResolveBitmap(bitmapFileName)
      return pbResolveBitmap(bitmapFileName) if pbResolveBitmap(bitmapFileName)
    end
  end
  return nil
end
This method has a very, very bad performance. If you tried to load a box full of Shadow Pokémon without shadow sprites, the game tries to load each sprite (at pbResolveBitmap call) around 24 times. 30*24 = 720. Loading sprite consumes a good time, so in this case (and even with fewer calls) generally consumes too much time that trigger the message "The script is taking too long. The game will restart.".

For the developers, I suggest to comment one of the two "sprintf" fields for making this twice as faster.

For base essentials, I suggest to change this def to:

Code:
def pbCheckPokemonIconFiles(params,egg=false)
  species=params[0]
  if egg
    bitmapFileName=sprintf("Graphics/Icons/icon%segg",getConstantName(PBSpecies,species)) rescue nil
    bitmapFileName=sprintf("Graphics/Icons/icon%03degg",species) if !pbResolveBitmap(bitmapFileName)
    bitmapFileName=sprintf("Graphics/Icons/iconEgg") if !pbResolveBitmap(bitmapFileName)
    return pbResolveBitmap(bitmapFileName)
  else
    loadedSpritesNames=[]
    for i in 0...2**(params.length-1)
      tgender=(i%2==0) ? params[1] : false
      tshiny=((i/2)%2==0) ? params[2] : false
      tform=((i/4)%2==0) ? params[3].to_s : ""
      tshadow=((i/8)%2==0) ? params[4] : false
      bitmapFileName=sprintf("Graphics/Icons/icon%s%s%s%s%s",
         getConstantName(PBSpecies,species),
         tgender ? "f" : "",
         tshiny ? "s" : "",
         (tform!="" ? "_"+tform : ""),
         tshadow ? "_shadow" : "") rescue nil
      next if !bitmapFileName || loadedSpritesNames.include?(bitmapFileName)
      loadedSpritesNames.push(bitmapFileName)
      bitmap=pbResolveBitmap(bitmapFileName)
      if !bitmap	
        bitmapFileName=sprintf("Graphics/Icons/icon%03d%s%s%s%s",
            species,
            tgender ? "f" : "",
            tshiny ? "s" : "",
            (tform!="" ? "_"+tform : ""),
            tshadow ? "_shadow" : "") if !bitmap
          bitmap=pbResolveBitmap(bitmapFileName)
      end
      return bitmap if bitmap
    end
  end
  return nil
end

The line "next if !bitmapFileName || loadedSpritesNames.include?(bitmapFileName)" save some calls. For example: When the pokémon is shadow and isn't shiny, the expression 'tshiny=((i/2)%2==0) ? params[2] : false' params[2] is false, so the same string combination is called twice in the old way.

The same thing need to be done at pbCheckPokemonBitmapFiles.
 
1,224
Posts
10
Years
Here's a replacement as per your suggestion FL
Code:
def pbCheckPokemonBitmapFiles(params)
  species=params[0]
  back=params[1]
  loadedSpriteNames=[]
  for i in 0...2**(params.length-2)
    tgender=(i%2==0) ? params[2] : false
    tshiny=((i/2)%2==0) ? params[3] : false
    tform=((i/4)%2==0) ? params[4].to_s : ""
    tshadow=((i/8)%2==0) ? params[5] : false
    bitmapFileName=sprintf("Graphics/Battlers/%s%s%s%s%s%s",
       getConstantName(PBSpecies,species),
       tgender ? "f" : "",
       tshiny ? "s" : "",
       back ? "b" : "",
       (tform!="" ? "_"+tform : ""),
       tshadow ? "_shadow" : "") rescue nil
    next if !bitmapFileName || loadedSpriteNames.include?(bitmapFileName)
    loadedSpriteNames.push(bitmapFileName)
    bitmap=pbResolveBitmap(bitmapFileName)
    if !bitmap
      bitmapFileName=sprintf("Graphics/Battlers/%03d%s%s%s%s%s",
       species,
       tgender ? "f" : "",
       tshiny ? "s" : "",
       back ? "b" : "",
       (tform!="" ? "_"+tform : ""),
       tshadow ? "_shadow" : "") if !bitmap
    bitmap=pbResolveBitmap(bitmapFileName)
    end
  return bitmap if bitmap
  end
 return nil
end
 

Florio

Pokemon Crimson Skies Owner
391
Posts
15
Years
Okay honestly, I know I shouldn't be saying anything since I don't script, but I think these are the two things that need to be completed the most for Pokemon Essentials.

-An improved AI, the smarter the better. As of right now the AI isn't very intelligent, but it isn't completely stupid either. For example the AI is smart enough to use Foresight on ghost-types, but not smart enough to set up Reflect/Light Screen's.

-A fully functioning battle/trading system, I think this is important because it is ideal for a Pokemon game to have this feature. It would allow people to play with each other, which is what Pokemon is all about. Maybe even a GTS System or Random Match up System (both would require a server though), but if the scripts were already there for them with simple instructions on setting them up, it would be amazing.

I also feel like if these features were completed, people would be more motivated to finish their games. I know I'm going to finish my game eventually, but sometimes I get lazy. And then I think of things like how the AI isn't perfect, or the fact that people might not be able to trade/battle properly by the time I finish the game, and I become somewhat less motivated (I haven't quit yet and don't plan to, but many people have quit).
 
Last edited:
Back
Top