I'm working on a CMS and CBS currently as well. As I haven't yet started on the CBS, I'll help you out with the Menu System for now:
For starters, you'll need a fairly large number of variables, and pictures for any text you want to display, including the digits 0-9. You'll have to experiment and find out where they need to be drawn for the best fit. To keep things simple, make sure that every digit graphic has the same dimensions. Make images using
Paint's text editor. I find size 7 or 8 is good.
Next, you'll need to create a chipset (480x256). Create an autotile of your basic window, and make sure it is not in one of the positions that are supposed to be water, or it won't work (refer to RM2K3's help file). Once you have that, create upper tiles of common words, like "Hp", "Mp", "Save", "Items", "Quit", etc. The reason for doing this is that you are limited to 50 pictures on screen at once, and if all your commands were pictures, you wouldn't be able to have everything you need on screen.
The CMS is going to be a separate map. That means you'll need 3 variables to remember where the character was before you called the menu. (It's its own command, "Memorize Position", and the variables are for the Map ID, X co-ordinate, and Y co-ordinate)
Every map has to contain a
Parallel Process event like this:
Key Input processing: "Key Variable" (You need a separate variable for this)
Conditional branch: If "Key Variable" = 6 then (6 represents the ESC key)
Memorize position ("Remember ID", "Remember X", "Remember Y")
Hide screen
Change main character graphic to nothing (you need to make a blank charset sheet)
Transfer to CMS map
Show screen
There needs to be a main control event in the map that is parallel process triggered.
You need to assign each option (Item, Skills, Equip, Save, etc.) a value. (keep it simple, use, 1, 2, 3, 4, etc.)
And you need a variable called "Selected Option", or something similar.
Using Key Input Processing, as above, determine if either the up (4) or down (1) keys are being pressed.
Then, if down is being pressed, add one to the "Selected Option" variable. If up is being pressed, subtract one.
Then, using conditional branches, draw the cursor picture beside the option that is selected.
Using the Key Input Processing, determine if the "Enter" key (5) is being pressed. Inside that conditional branch, insert other branches to transfer you to other rooms. (Every subscreen, such as the Item screen, will be its own map.) The exception is the Save option, for that, simply use the "Open Save Screen" command.
Using the Key Input Processing, determine if the "ESC" key (6) is being pressed. For this key, simply reverse the code that brought you to the menu:
Conditional branch: If "Key Variable" = 6 then (6 represents the ESC key)
Hide screen
Change main character graphic to what it's supposed to be
Return to Memorized Position ("Remember ID", "Remember X", "Remember Y")
Show screen
Display any text you want as pictures, and also any numbers, which will need to be broken into their digits (see below)
The characters' facing forward running graphics can simply be events, with the "Fixed Dir/Continuous" option selected.
To display numbers, here's an algorithm I wrote for my game, which I'll offer to you:
You need:
1) Variables: 1 more than the number of digits you'll use (likely 6 digits + 1 = 7)
2) A common event
The variables will be named as follows:
-"Input"
-"1s Place"
-"10s Place"
-"100s Place"
-"1000s Place"
-"10000s Place"
-"100000s Place"
You'll start with "Input" containing the value of the variable you want broken down into its digits (I'll come to that later).
Your event commands should be as follows. I put the code in a spoiler because it is rather long. I have also colour-coded to help divide it into sections:
And that's all there is to it. It seems complex, but it actually works on a very simple principle applied many times. It's one of the more concise ways of breaking a number into digits.
With that common event set up, whenever you have a variable that needs to be drawn in pictures, simply set the variable "Input" equal to the variable you want broken down, and then call the common event to break it down into individual digits. After the digits come out, you need some conditional branches, quite a lot of them, actually.
You may want another common event for this to avoid cluttering your main control event. Basically, all you have to do is:
If "1s Place" = 1 then
Draw picture "#1", (x, y)
If "1s Place" = 2 then
Draw picture "#2", (x, y)
...and so on, and so forth. But zero poses a bit of a problem, for which you'll need a slightly different conditional branch:
If "1s Place" = 0 then
If "1000s Place"
is not 0 then
Draw picture "#0", (x, y)
else
If "100s Place"
is not 0 then
Draw picture "#0", (x, y)
else
If "10s Place"
is not 0 then
Draw picture "#0", (x, y)
Basically, you need to check if any of the higher digits are zero. This is because you want to see "94" displayed, not "0094". You ONLY need to check higher digits, and you may need to start higher than the thousands place if you're using a higher variable (namely, Gold).
Hopefully that can get you started. If you run into any problems, I'd of course be happy to look at them for you.