[MANIACS] CUSTOM BATTLE INTERFACE 1

Ever wanted to make your own battle interface? With the Maniacs patch, it's pretty easy!

This is a simple tutorial to create a custom Battle UI based on Final Fantasy IX's, on Rm2k3. It requires usage of the Maniacs Patch created by BingShan.

Limitations:
- Cannot read party member order.*
- Requires the Maniacs patch.
- Only works on Battle Interface type 3. (Face mode)
*workarounds: you CAN rewrite the order based on the UI by removing all party members and readding them in the same order as the UI. If you remove Order from the main menu, you also have full control over the party formation, easing any possible problems that may arise.

Let's get to it. The first thing you'll have to do is create a System2 graphic that's devoid of numbers / gauges. You'll still, of course, need the cursor. Set that as the System2 of your project, and give all your actors empty faces.
You'll also need to set your Battle Interface mode to Type 3. These should net you with a completely empty interface -- an empty slate for you to build your UI on.



Unfortunately modes 1 & 2 won't let you erase the UI entirely like Mode 3 does. Hopefully, Cherry, BingShan or some other miracle worker will at some point allow us to push the rm2k3 UI outside of view, especially because I'm not fond of Type 3's middle-of-the-screen item/skill window.

Now let's move on to the code.


This is the body of the battle UI. It isn't the cleanest code, but let me explain:

First thing that's happening is, we're calling this common event right here:


This event will check whether a certain character is on your party, if so it'll assign that character to the variable the event is currently pointing at (B.UI_Counter) and add +1 to the pointer variable, then move on to see if there's any more characters on the party. Basically, it'll give you a list of members in your party, limited to 4 members (max member size on 2k3) and unfortunately ignoring Formation.

After calling this common event, you'll have 4 variables, each with the ID of one of your party members. (0 on each empty slot.)

Afterwards, the Erase Picture event merely erases any previous UI pictures before adding the new pictures with updated values. Useful if a character leaves the party for example, or else their info would just stay there, unupdated. There are fancier and more efficient ways to do this but this is simple enough.

Then, we set up 4 pointer variables: X and Y are the base coordinates we'll display our UI on. We're using Top Left positioned pictures. B.UI_Counter, which was already used on the GetActorID event, is reused as a pointer to tell the game which slot it's currently displaying.

B.UI_Picture merely says what PictureID we'll be using on each of the show picture commands.

Following on, you'll notice one of the many awesome new functions of Maniacs: Loop conditions. Since we're showing stats for 4 party members, we'll want the Loop to run 4 times. It's one of the simpler conditions, but there's a lot you can do with this Loop condition and pointers, more than I can wrap my head around.

Then, the first thing I do is write the first actor's name.



This is yet another awesome new function, Show String Picture. We set variable #1 to be the same as the variable the Counter is currently pointing at (which is, the ID of the hero we're currently writing the status for.)

This will display their name at the top left of the StatusWindow.
Since we already displayed this picture, we add +1 to the B.UI_Picture variable, so we can display the next picture at ID+1 and they don't fight for the same ID.

The next 3 pictures are the HP, MP and ATB values for the character that the Count variable is currently pointing at. To retrieve that info, we make another Common Event so that we can call it. There's no way to use Pointers for this so we'll have to make one conditional branch for every possible hero ID.


We're using an ATB Gauge, so at the very end we multiply the ATB value by the number of frames in the spritesheet (-1) and divide by 100, so we can point at the current % value in the show picture command. The empty frame is regarded as Frame 01 so you need to then add +1 before ending that last common event, too.

So, when we're back from this common event, we'll have three different pieces of info:

Temp01 = The CurrentHP of the hero pointed at by Counter.
Temp02 = The CurrentMP of the hero pointed at by Counter.
Temp03 = Which frame of the ATB Gauge the ATB Spritesheet should display.

With that information in hand, all we need to do is properly display it. Since we can't do it like in a script and say that the X position of the HP number = X + 16, we'll have to add and subtract to the initial coordinates, which I do after I run each show picture command for the X axis, and once every loop for the Y axis.

Then at the end of the event, you merely add a Wait command (up to three Wait 0.0 commands, really) to mitigate any possible lag (somehow, this IS quite laggy at 4 members, which I'm inspecting into.)

This displays pretty much exactly the same info that the default 2k3 Type3 system does. If you want, though, it's easy to display state icons and effects, HP and MP gauges, a Limit Break gauge, and whatever other things may interest you -- be creative and use this base to create all sorts of cool battle UIs that bend Rm2k3 to your liking!

And the end result is this:


Next tutorial: Damage popups which I SWEAR to god are WAY easier to explain than this.
Well, I tried to be as thorough as possible. Hope it helps someone!

Maybe I'll make a tech demo at some point so you guys can see it in motion. (not that it's hard to get it running yourselves). Maybe after I get some more functions in. :)

Posts

Pages: 1
I don't understand how you get Parameter of heroes ?
You can get Heroes ID with the control variable and Member tab :

And :


Or directly like this :


With this, all you BattleUI_GetActorID is useless, no ?
Why getting param for each Heroes one by one ?
omg my version of it doesn't have that function!! i think it's one of the newer commands of Maniacs, this is so exciting, thanks for pointing it out!

I'll give it a check, i'm constantly learning new functions and stuffs with it too... i'm pretty bad at writing tutorials but I figured it's better to have a confusing one than none at all XD
Jo,

Just record yourself using it to make a CBS from scratch and other little things it can do like that.

I'd watch it. Must learn more. I didn't realize that you even posted this. I'll have to take a look at it!
My version is 200128, I think you just have to active the new fonctions variables :
Option->Use new 'Control Variables'

For custom choice command, you found a trick ?
Actually, the only solution i've found is to hardcode all skill, i don't know how hide old interface :/
Thank you! OMG I didn't read your new comments and I just figured out the "use new Control Variables" being under Option NOW.

Wow. I activated it and it's considerably more powerful than the already extended command! I'm having fun with the Expression function. It lets you do things that would take multiple commands in only a single line, although I don't know the syntax yet.

Unfortunately it doesn't seem to be possible to use it to store a string on a variable like you can on XP and beyond.

As for the custom choice command, no, I settled with it for now. It doesn't look so bad depending on the project. BingShan is working on an engine rewrite (!!) which is why updates have frozen. Hopefully eventually we'll get the ability to do that. I also wanted the ability to open menu windows directly...


Also, all the links broke. I guess Discord finally stopped us from direct linking uploaded images, huh? XD

Should've uploaded to RMN. I still have the images so it'll be an easy fix.

But, @Arc, I take like weeks or a month working on a CBS D: recording it sounds like nightmare, especially since you'd see me staring at the screen in silence for 50 minutes. Maybe I could make condensed videos, though. But I tried recording let's plays yesterday and... I'm just not there anymore, my speech has melted and i can't speak without stuttering -- in any language -- anymore XD i guess it's lack of practice since i don't see humans anymore thanks to COVID-19.
Hey, thanks for your post! Its the first time i'm trying some code into RPG Maker 2k3. I hope you could answer me a few questions. I replicated all your images but there are things that I dont really understand.

-The "Main UI event"(your first image) its an common event right? The trigger is begin battle?

-In the Show String Picture at the end of the text I wrote, appears this character:
,
and in the others Show String Picture you have ..., do you write more?

-I dont really understad what i have to put in Show Picture, i tried to replicate the same line to mine.



It ended up like this, and is the same as your line, but i don't know if its correct.

-When i try to battle, this error message appears: Invalid picture ID#0 (Internal Error Information: LGD_Picture.pas, line 526). I think that is a problem with the Show Picture command or the Show String Pictures.

Thanks for your help ^^!
author=jamusa1996
-When i try to battle, this error message appears: Invalid picture ID#0 (Internal Error Information: LGD_Picture.pas, line 526). I think that is a problem with the Show Picture command or the Show String Pictures.

Picture IDs in RPGmaker 2003 need to be between 1 and 1000 (not completely true, but whatever). Looks like you're trying to create one with an ID of 0.

My best guess is that you skipped a step and didn't set Variable 28 B.UI_Picture to 22.
author=Sidewinder
Picture IDs in RPGmaker 2003 need to be between 1 and 1000 (not completely true, but whatever). Looks like you're trying to create one with an ID of 0.

My best guess is that you skipped a step and didn't set Variable 28 B.UI_Picture to 22.


Yeah, you were right! Thanks for the answer! I revised the code and miss some numbers. Now the error message doesn't pop up, but the doesn't happen anything... just the regular battle. I have another question, do you know if you apply this maniac's patch, can you sell the game?

Yup. The EULA does allow you to patch the editor as much as you want.

Good luck getting the rest of the code working.
Nice! Yeah I will try again! Thank you ^^
I'm not sure if this thread is still alive, but
How exactly do you remove the built in UI, like shown in the results?

The instructions were difficult to understand, and the images provided seems to be missing a few key information. I tried my best to implement this code to the best of my ability and nothing has changed in the battle, no error or slight shift into the UI

If you can respond with a more understandable guide through this, or to simply tell where I mesed up, that would be greatly appreciated. If necessary, I'll send a picture of the code I implemented in order to help find out where I messed up at. Thank you
I'm not sure if this thread is still alive, but
How exactly do you remove the built in UI, like shown in the results?

The instructions were difficult to understand, and the images provided seems to be missing a few key information. I tried my best to implement this code to the best of my ability and nothing has changed in the battle, no error or slight shift into the UI

If you can respond with a more understandable guide through this, or to simply tell where I mesed up, that would be greatly appreciated. If necessary, I'll send a picture of the code I implemented in order to help find out where I messed up at. Thank you
In addition, for the second image, the events states:
Control variables: = 1
Control variables: +=1
For some reason, I'm unable to type out
Control Variables: without it registering as B.UI_Counter like how it is for you, leaving me with:
Control variables: =1
Control variables: +=1
This may or may not impact or explain why I am not getting the same results, but its indifferencd makes me question if this code still works or if I'm still missing something.
author=Treegod64
In addition, for the second image, the events states:
Control variables: (0021) = 1
Control variables: (0021: B.UI_Counter)+=1
For some reason, I'm unable to type out
Control Variables: without it registering as B.UI_Counter like how it is for you, leaving me with:
Control variables: (0021: B.UI_Counter)=1
Control variables: (0021: B.UI_Counter)+=1
This may or may not impact or explain why I am not getting the same results, but its indifferencd makes me question if this code still works or if I'm still missing something.
(I'm using parentheses as the brackets)
I'm honestly believing that this doesn't work no more, I've redid everything again and still no result. I hate to believe that I missed the time frame where the RPG Maker 2003 community was at its most active, and trying to make a game on this software is proving to be a torturous experience in this new generation
Okay, upon redoing the coding, re-reading the instructions provided, and painfully making sure things are accurate...the battle interface still remain the same (without the portait or gauges). I honestly believe I had everything down, but now I'm left wonder whether this process is outdated, or RPG maker 2003 is just that limited and obscure of a game, to the point where its ludicrous just trying to do the bare minimum of customization. I respect you greatly for creating these guides in this new decade, but if you're still active (or alive even), can you please inform me what I've done wrong or what I missed.
Marrend
Guardian of the Description Thread
21781
Next time, please utilize the "edit" option, rather than adding new posts, if there is no response within 24 hours.
-In the Show String Picture at the end of the text I wrote, appears this character:
,
and in the others Show String Picture you have ..., do you write more?
I have a similar question to that as well, along with having trouble with erasing the UI and making the custom one appear.
I'm so sorry for never checking back on this. This tutorial is probably plenty outdated. Hopefully I'll be able to properly reply and update in... uh... this year or something... Sorry again. ORZ
Pages: 1