• 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.

[Discussion] Pokémon Essentials v18 progress report

Status
Not open for further replies.

Maruno

Lead Dev of Pokémon Essentials
5,285
Posts
16
Years
Hi everyone!

This is a progress report for the next version of Pokémon Essentials, which will be version 18. Before I begin, no, I'm not announcing my retirement or anything like that. This really is just a progress report.

The next version of Pokémon Essentials, v18, is intended to be focussed on the battle system. More specifically, the battle system code is being tidied up and rearranged to make it better and easier to work with, and with some new features which this post will talk about.

So what's happening?

1. Tidying up and rearranging

The battle system is currently crammed into just a few long script sections, which makes them tough to navigate. Chunks of code are often in unreasonable places, or at least could be relocated to somewhere better (e.g. duplicated code that can be consolidated). Some battle mechanics don't work quite right, such as the timing for throwing a Poké Ball. Some mechanics I just want to make work differently, such as making a move hit all targets at once rather than one after the other (this is the original reason I wanted to focus on the battle system this time, actually, and making this change took much longer than I expected).

To this end, I've been moving and improving a whole lot of code. I've been renaming and repurposing methods and variables, with the result being that virtually every third party script that affects battles will be incompatible with v18 without rewrites. I know, I know, but that's how it goes.

2. Triple battles and so on

Although I think triple battles won't look good (the screen's too small to reasonably show six Pokémon in battle with their data boxes at once), I decided to improve the code to support triple battles. Actually, I generalised the code completely, meaning not only are single/double/triple battles possible now, but so are 1v2, 3v1, 2v3 and any other permutation of "number of Pokémon on each side of battle". It's entirely possible to have a battle where you use one Pokémon against two opposing trainers who use one and two Pokémon respectively (i.e. it's 1v3).

Higher numbers are also possible with the code (it's completely generalised, as I said), although certain information such as Pokémon sprite coordinates aren't defined if there's 4+ Pokémon on a side, so if you want that many you'll have to add that information yourself. It should be easy enough to do, though.

I've also improved the target-choosing step of using a move to work with all these sizes of battle, and made a proper menu for it (like the command and moveset menus), rather than just relying on making the Pokémon sprite flash (although it'll still do that).

3. Ability/item handlers

Currently the code for held item and ability effects are hardcoded into the battle scripts, and you'd have to go digging around to find one or create a new one. I've taken (most of) them out of the battle scripts now and put then into handlers: standalone chunks of code that live separately outside of the battle scripts. This is not only tidier all round, but will make it easier to make new effects - you can put your new code in a new script section so you can easily keep track of it.

4. Animations

I've rewritten a bunch of hardcoded animations, such as Poké Ball-throwing, the battle scene appearing at the start of battle, data boxes appearing and disappearing, that kind of thing. They used to be shown in several different ways, which was inconsistent, but now they all use a common animation format which I adapted and improved upon.

I've also improved on some of these animations. Thrown Poké Balls get a better trajectory, HP and Exp bars fill up much more nicely now, and some animations have been combined as it turned out they were basically the same thing. Oh yes, and there's now support for the Pokémon sprites performing a one-off animation when they enter battle (technically playing the Pokémon's cry is a part of this).

5. AI

The AI has been moved out of the main battle class into its own. Little bits of it have also been rewritten, such as when it chooses whether to use an item instead of a move. It now knows how to use many more items (but having said that, the extra items are just variants of ones it already knew how to use, like all the Full Heal-type items). The battle system now also uses the same code for item usage as the player's items use, so you no longer need to code in item effects twice just because you want the AI to use them.

6. Lots of other things

I've changed so much of the battle code, and I've made other improvements and bug fixes I'm not going to describe in this post. At the bottom of this post is a link to a detailed change log of what's been done so far.

It's highly likely that I've fixed some bugs without knowing it. It's also likely that I've created all-new bugs instead. That's why I'll be opening up Essentials v18 for testing before its official release, to track down and fix problems beforehand.



Since this is an update post and not a release, it makes sense that I haven't yet done everything I want to do for Essentials v18. So what hasn't happened yet?

1. Gen 7 move/item/ability effects

I just haven't done this yet. It makes sense to hold off until I've finished rewriting the various scripts that will be involved with the Gen 7 effects. I do want to do these, though.

Conversely, I'm ignoring Z-Moves. They're stupid anyway, and I can spend my time on better things instead.

2. Battle parameters

These are things like "make it a double battle" or "forbid capturing the Pokémon". Extra rules that apply to the battle. I've got a big list of the ones I could think of, and I want to implement a decent way to use them. My plan is that you'd queue up battle parameters (in much the same way as you queue up what BGM you want to use for the next battle) and then the next battle makes use of them all. In a similar vein, some parameters could be put into trainers.txt (e.g. instructions for which Pokémon to use first/last).

I'm on the fence about this one. They're low priority, at least, and I may end up foregoing them just to save some time.

3. More information

I had the idea a while back of making a panel appear when choosing a move to use, which displays information about that move (power, accuracy, description, etc.). You'd be able to show or hide it, of course. Turns out that's a feature in Gen 7. Never mind, I'd like to add it anyway. However, it's not necessary and that makes it low priority, and again I may skip it to save time and bring out the release sooner.

I also want to create the ability splash panels (those graphics that pop up indicating that a Pokémon's ability has triggered). I just haven't started on these yet.

4. Superfast mode

In the Options screen there's a way to turn off (some of) the battle animations, but that's all it does. I wanted to see if I could implement an "even faster" mode to appease the people who have been spoiled by accelerator buttons in their emulators. I'd cut down everything I could think of to the bare minimum to get as much speed as possible. Naturally, this would take some time to implement, and I'll probably drop the idea for now for that reason.

5. Finish off what I said I've done

While I've listed things I've done above and in the change log (see below), some of those things I haven't completely finished. A few animations (such as fainting) haven't been rewritten yet, other animations could do with polishing, rewriting and optimising code is an ongoing process, a number of ability/item effects haven't yet been transcribed into handlers, etc. There's also a lot of testing to do, which I'll rely on the pre-releases for.

I also have about 15 pages' worth of notes about things that need doing before v18 can be called finished (and they're only the things I'm currently aware of).



I'm fully aware that it's been over a year and a half since the last version of Essentials came out. Believe me, it frustrates me more than anyone that it's taking so long, and I can only say that overhauling the battle system is a big project and I have a life to lead as well. I'm torn between cutting corners to get a quicker release and, well, not cutting corners. As I mentioned, for v18 I plan to have some (semi-)public testing before the actual release, but I just don't know when that'll happen.

You can read the full change log (of what I've done so far) for v18 here: https://pastebin.com/8wXtaHaC

Regards!
 
Last edited:
5
Posts
10
Years
  • Age 26
  • Seen Apr 14, 2024
This is dank. Hopefully I can start working on my project again.
 
Last edited:
19
Posts
4
Years
  • Age 27
  • Seen Jan 14, 2021
This all sounds great. For one, I'm glad to know Essentials is still being worked on. I'm personally most excited about the way items are going to be handled, that's a nice quality of life change from a developer side.
 
277
Posts
15
Years
This is very exciting. You have done an insane amount of work for this community!

Now quickly, someone go get S.J. Luka out of retirement so we can have EBS with Essentials v18.
 
3
Posts
4
Years
  • Age 28
  • Seen Dec 24, 2019
Hi, i was wondering if one of these issues/bugs will be fixed or are already fixed:

1: In double wild pokémon battles only one of the pokémon generates a cry. (i suppose this already fixed with all those changes!)
2: Problem with the screen size when you set it to Large size or Full size on dark maps, the darkness is not displayed correctly because is not synchronized with the size somehow and makes it possible to see forward the Darkness instead.

All of these issues are on 17.2v of essentials of course.

Also good job maruno, you make that the dreams of people to create their own pokémon game comes true!
 
Last edited:

HM100

HM100 the Techno
113
Posts
7
Years
  • Age 23
  • Seen Mar 24, 2024
I have even done the first bug fixed in Κορα Κορε I develop (Both Q.Qore and Darwin ones) to play cries of both wild Pokémon in double battles, like playing two Pokémon Cries at once.
The 2nd bug does not appear in Essentials 16.2 as well
 

HM100

HM100 the Techno
113
Posts
7
Years
  • Age 23
  • Seen Mar 24, 2024
Good to hear Weather Ball gains support for weather-specific animations. Anyways, I had also implemented on my game I develop as well. It was too easy for me to add it. Just looked on how the code for Judjement/Techno Blast had it and added it. I also made animations for a Weather Ball, including the ones for different weathers.
 

Maruno

Lead Dev of Pokémon Essentials
5,285
Posts
16
Years
Hi, i was wondering if one of these issues/bugs will be fixed or are already fixed:

1: In double wild pokémon battles only one of the pokémon generates a cry. (i suppose this already fixed with all those changes!)
2: Problem with the screen size when you set it to Large size or Full size on dark maps, the darkness is not displayed correctly because is not synchronized with the size somehow and makes it possible to see forward the Darkness instead.

All of these issues are on 17.2v of essentials of course.

Also good job maruno, you make that the dreams of people to create their own pokémon game comes true!
1. Yes, I've fixed that. I'm not sure them all playing their cries at the same time is a great idea, but that's what happens now.

2. I can't replicate that from your limited description. I did find that the darkness covers the location signpost, and I fixed that, but as far as I can tell the darkness works just fine in any screen size.

Do you have in plan to implement soaring the sky (like this, per example?)
No.
 
3
Posts
4
Years
  • Age 28
  • Seen Dec 24, 2019
2. I can't replicate that from your limited description. I did find that the darkness covers the location signpost, and I fixed that, but as far as I can tell the darkness works just fine in any screen size.

Hello, thanks you for response.

I just realized that the problem with the dark maps appears when you use the warp to map option in debug menu on full screen size.

1.jpg

Also i discovered that you set to true the SnapEdges option on Metadata, the darkness stucks in the edge of a map and don't follow the character properly. Well... that's not a priority anyways because a simple solution for this is not to allow the character go to the edge in the first place.

Thanks so very much for your time.
 
Last edited:

HM100

HM100 the Techno
113
Posts
7
Years
  • Age 23
  • Seen Mar 24, 2024
The location signpost bug with dark maps is too easy to fix it in Essentials 16 and 17 as well. I'm V15 and lower, darkness didn't covered the location signpost IIRC. That bug started to appear from Essentials 16 and up to including Essentials 17. Fortunately, it can easily be fixed. Just set the z-index of location's signpost viewport to 99999 and its done, you did it the fix. It also fixes the weather covering the location signpost in Essentials 16 as well. I had applied it into my heavily modded Essentials 16 copy and it worked perfectly

Anyways, it's good to be fixed without any hitch.
 

Maruno

Lead Dev of Pokémon Essentials
5,285
Posts
16
Years
Hello, thanks you for response.

I just realized that the problem with the dark maps appears when you use the warp to map option in debug menu on full screen size.
I still can't replicate this. I put myself in full screen mode via the Options screen, debug warp to a dark cave map, and the circle is positioned fine and works properly.

If you're using some other way of making your game full-screen, I don't support that and I don't care if there are bugs associated with it.

Also i discovered that you set to true the SnapEdges option on Metadata, the darkness stucks in the edge of a map and don't follow the character properly. Well... that's not a priority anyways because a simple solution for this is not to allow the character go to the edge in the first place.
I don't know why anyone would use SnapEdges in the first place. I'm not interested in fixing this behaviour, since it can be solved with mapping and/or not using that metadata setting.
 
57
Posts
10
Years
  • Age 31
  • Seen Sep 10, 2022
hi maruno, I suggest to add moves animations from pokemon reborn, I think it's the most complete move pack out there, it's easy to import in essentials 17.2 ;) also would be great to see a new move animations editor, the old one feels very bad to me.
 

HM100

HM100 the Techno
113
Posts
7
Years
  • Age 23
  • Seen Mar 24, 2024
IIRC, I have also built some animations for existing moves that you will find in the Standard Pokémon games, including some remakes such as adding a common animation for Bad Poison. I also have made animations for moves not present in a standard Pokémon game, which I also have made these moves and being usable as well. Some animations I have bult such as Protect, Iron Defense, Minimize, Memento and others. I have also made a better animation for Teleport.
 

FL

Pokémon Island Creator
2,444
Posts
13
Years
  • Seen yesterday
Good to hear that development keep going!

Conversely, I'm ignoring Z-Moves. They're stupid anyway, and I can spend my time on better things instead.
Stating that you doesn't like Z-moves or they are low priority because of benefit–cost ratio is understandable.

But calling them stupid without a good reason (like using a Dual Screen Script on a computer with one screen) annoys the devs who thinks that they are a good feature for their games.

Made various things FPS-agnostic, meaning they will play at the same real world rate regardless of the game's frame rate
Can you put these things on a constant for people who doesn't like FPS-agnostic things? This probably break turbo buttons that are VERY useful on debugs.
 
Last edited:

WolfPP

Spriter/ Pixel Artist
1,309
Posts
5
Years
I noticed when Zen Mode is triggered, normal rules is into the end of turn. Right now, thanks the code inside 'pbCheckForm', when pokémon haves 1/2 HP will auto-trigger (during the turn instead to wait until the end of). Will you fix that?
 
Status
Not open for further replies.
Back
Top