[MANIACS] SIMPLE CUSTOM DAMAGE POPUP

A very quick way to customize the damage popups in your game.

Tired of the tiny, ill-animated default popups of 2k3? It's very very easy to do your own with Maniacs Patch's extended functionality.

There are several ways to approach that, but I'll share my own, which is super easy and lazy (other than the time spent at a graphics editor).

First thing you'll need is a spritesheet with numbers 0-1-2-3-4-5-6-7-8-9, in GIF format, animated.

For this tutorial, I'll animate a typical Final Fantasy bouncing number. You can animate in any way you wish, including fake rolling numbers if you feel like, for example.



This is my result. We won't have the ability to use fades using this very simple method (i mean, you can, but you can't use Wait without freezing the battle so you'd have the number fade from the very first frame it appears, not very good looking)

I used GraphicsGale for this GIF. It's really really easy to use once you get the hang of it. I just used Text to draw the numbers, spaced them appropiately in the Pitch field of the Text tool, then I manually animated it each frame. There's a really easy shortcut to move anything like that each frame: You press Ctrl+A to select everything, then Ctrl+Directional Keys to move stuff to whatever direction. Then I just manually faded stuff at the end so it won't disappear too harshly. (not that rm2k3 doesn't already do that by default...)

After that, I just run the GIF through Piskelapp (or any other Gif To Spritesheet solution)
I use that for my pre-rendered spell effects, too, and a lot of stuff in fact.

You'll have a 10x25 cells spritesheet in front of you. Time to cut that into 10 vertical strips! You can save them as any name, as long as you finish it with the proper digit. So, idk, Digit_0 may do the trick.

Each individual strip should look like this. Notice how there are many repeated, still frames. That's because we're using an Erase After type of Show Animated Picture command, this way we don't have to rely too much on Wait commands to properly time our damage numbers. You need to do the proper timing on the spritesheet itself.



Well, with the graphics on hand, the coding part is easy enough; you'll need two events: One that runs every frame in battle to see if there's a popup being called that frame, and another that only runs when called. The first of the two I like to just use my Battle_Main event. (remember: Maniacs Patch allows Battle Common events.)
On the Battle_Main I place every piece of logic that should run every frame, including checking for popups. For the purpose of this tutorial, the Popup Check is the only single line that will exist in Battle_Main.


Basically what this event does is, whenever a battle popup would happen, this event kills the visual part of the popup, takes all the relevant information to these six variables, then, if you want, it calls back a common event that'll have that information handy and ready to use.
The 6 pieces of information are;

Unit Type = Whether it's an Enemy or an Ally. I don't remember the value for each, but it's also not relevant for this tutorial.
Unit Index = Which was the ID of the (enemy or ally) party member affected. Not relevant for this tutorial.
X, Y= Coordinates at which the damage popup would have displayed onscreen. Essential.
Value Type = Whether it's healing or damage. You can tint the graphic green if it's healing or altogether replace the graphic if you want, for example, as long as you have this info.
Value = The actual number the popup is displaying.

Ok, so for the picture display, there's two things that are really important here:

We need a range of PictureIDs to display individual digits without erasing the previous one. The longer your numbers stay onscreen, the more IDs you'll probably want to reserve for this. Reserving picture IDs and having all that documented is essential for any custom menu / UI system.

We also need to splice the Value variable into individual digits, as many as your game is capable of handling. I think Maniacs RM2k3 no longer has a damage cap, so you can go nuts with this. That being said, of course,it still has database caps and the database works real wonky outside its ideal numbers. I think 5 digits, at most 6, is enough.

So, the first thing we want to do on the actual Show Popup common event, is set the Picture ID range. Let's say we want picture IDs 201 - 250.
We'll start by doing this, then:



We assign a variable to be the current Popup's PictureID. Then, we see if it's in range. It'll obviously start at 0, which will make the event boot it up to 245. Since we can show 6 digits at max, that means the maximum PictureID will then be 250.

Right after that... We're almost ready to display the numbers! We'll need to splice the digits using the Mod operation. I'm... not the best at explaining this, but basically what it does is it returns the remainder from a division, basically allowing you then to extract the first digit of a number you mod by 10, the two first digits of a number you mod by 100, etc. (It's 5AM and i'm kinda sleepy. I'll rewrite this part later)

But basically it goes:


Mod by 10, show Ones digit.
Is number bigger than 9? then
Mod by 100, divide by 10, show Tens digit.
Is number bigger than 99?then
Mod by 1000, divide by 100, show Hundreds digit. Etc. All while, of course, increasing the Picture Pointer variable by +1 every time you display a picture.

And that's... Pretty much it. You just need to display the picture because it will auto-erase after the animation plays once. And you don't have to worry about it.

The Battle Parallel Proccess will call the popup whenever it happens. Then it'll just splice the digits and show them. And that's it. I mean, you still need to make healing green, but I'm sure you can figure that out!

And this is the end result:



Hope this was of use! Have a nice day, and i hope to polish this tutorial up a little, lol.