RPG Maker VX Ace

RPG Maker VX Ace

137 ratings
Intro to Scripting [In Development]
By Zalerinian
An intro to scripting with RGSS3 and information on things in scripting that can commonly go wrong. Most of these things are issues that I have come across and, with the help of the forums (great place to get your script issues fixed by the way, forums.rpgmakerwb.com), had them solved.
2
   
Award
Favorite
Favorited
Unfavorite
Introduction to the guide
Congratulations on buying RPG Maker VX Ace. Its a great program for making games. Though it is technically slated for RPG games only, you can make it very different by using scripts. This guide will not be an in-depth guide to scripting. Though I will attempt to teach you the basics, this will also be for useful tips and tricks, as well as common problems that I've encountered during my time doing scripts.

So on with the basics. It would help greatly if you knew the Ruby programming language. RGSS3 is based off of Ruby. There are many great places you can learn Ruby, such as Ruby Monk[www.rubymonk.com] or Learn Code the Hard Way[ruby.learncodethehardway.com]. These will each step you through the ruby language bit by bit, but I find that ruby monk is much more fast paced, and learn code the hard way is much more repetitive. I will try to make this as basic and informative as possible, but I cannot guarantee that I will explain everything.

What we have so far:

  • Variables
  • Switches
  • Assingment Operators
  • Attribute Accessors.
  • Classes and Modules


To do:
  • Adding configuration to your script
Types of Variables
Variables are crucial to the game. They can hold many differnet kinds of numbers, such as the number of tiles walked, the amount of money you have, or how many battles you've won or lost. There are three types of variables that will be explained in this guide,
  • Local Variables
  • Global Variables
  • Game Variables

Local Variables


Local variables are used in scripting to store values. They are used strictly by the script that created them. they store values that they are told to by the programmer. Local variables are usually used to determine math within a script so that it knows what to change in the game.

Creating a local variable is very easy.
variable = value

Thats all you need to do. Variable is the name you want to give it. You use its name to refer to it later in your script. Value is what you want your variable to store.

Ruby variables are very flexible. If you're familiar with most other kinds of languages, you'd know that you need to specify what kind of data you want your variable to store. For example, in C++, you need to be very specific and say which type of variable (integer, float, etc). However, Ruby is very flexible. You don't need to say what kind of variable you are making. It can store anything, and it can be changed to anything, unlike most others.

Now that we've created our variable, we want to give it something to store for us. As you've seen in the examples above, we put a value to our variable by doing
Variable_name = Variable_value
The '=' puts the Variable_value into our lovely little variable, Variable_name. Variables can be changed at any point in the script. You cna give them a value when you first make them, you can change it 10 lines later, you can change it 10,000 lines later, it doesn't matter. You can always change the variable.


Global Variables


Now, we learned that local variables are used by the programmer to store values that the program will use later, whether for decisions or to have them put into a game variable (We cover game variables next! scroll down a little ;) ). Now, if you've opened the script editor in RPG Maker, then you've got a 115% chance of noticing that there are many more than just one script in there.

As you can see, there are a great number of scripts in the editor. When you make a script, you can give it a name, just like the ones in the image to the right. You then write your script. The variables that the section above showed you were local variables, meaning that they only exist to the script that made them. Well alright, what does that mean?

Well lets make an example:

We'll have:

  • Two Scripts
  • Variables
  • An advanced thing or two that I'll explain later.

The first script will multiply two numbers, the other will print out the product.

Multiplyer Script:
number1 = rand(10) number2 = rand(10) number3 = number1 * number2
Printer Script:
puts number3

These wouldn't work. The game would tell you that there is a reference to an unknown method or variable. So how do we fix this? We make the variable number3 a global variable.

Global variables can be seen, copied, and editted from any script no matter if they made it or not. Editting a global variable in one script will change it for all other scripts as well.


So how do we make a variable global? We put a dollar sign ($) in front of the name. So the local variable 'number3' becomes the global variable '$number3'.

Multiplyer Script:
$number3 = number1 * number2
Printer Script:
puts $number3

Remember to put the $ when using the variable, and becareful about editing it.


Game Variables
Finally we get to the game variables. By now you've probably used the game variables by using the Control Variables event command. But now, how do we change the game's variables in a script? It has to be done somehow, since the default system does it, though through an interface that is easy to use.

Well, there is (obviously)! Its also very easy to use. The game variables are stored in an array, which is essentially just a spreadsheet full of values, if you've ever used Microsoft Excel, or any other spreadsheet application. This array stores the values of the variables. To make sure that the values change across every script, since there are so many that would use them, it is a global array.

Whats the difference between a global array and a global variable? None at all, an array is a variable.

So how do we access the game variables? Simple! All you have to do is the name of the array, which conveniently happens to be $game_variables. Make sure to include the $! Now, although arrays are variables, we use these a little bit differently. Recall how I said that an array is like a spreadsheet about five seconds ago? (The game variables are stored in an array, which is essentially just a spreadsheet full of values) We have to let the program know which value inside the array we are going to change.

So which one will we change? Well it depends on the situation. In the screen show in the picture above, you can name your variables (This does not change them at all, it just organizes that screen a bit). Again, naming them just makes it more organized and so that you know what variables are for what so you don't accidentally overwrite them. I'd recommend you name them in the Control Variables screen so that you're sure you're using an unused variable.

So for our example, we'll just change the very first game variable. The first one thats in the variable window (and the highlighted on in the picture).

So now, accessing values in an array. You take the array name, $game_variables, you take square brackets ( [ ], usually near the Enter key) and you put the number of the variable you want to change. So to change variable #1, you would use

$game_variables[1] = 5

Now comes a bit of an experimental part. Although the Control Variables window only allows you to set integer values, you can set them to strings or possibly even more arrays (have not tested arrays, but strings work). However, a normal conditional branch won't work if the value is not a number. You need to go to the 4th page and make a script, somethin similar to:


$game_variables[1] = "apple"
Set the variable to something that isn't a number...

$game_variables[1] == "apple"
Check if the first variable is equal to 'apple'


Now comes the weird part: If you add, subtract, modulous (mod, %), divide, or set the variable in the Control Variables window, then the variable will be set to 0. Using multiply on a string will use Ruby's built-in command and it will set the variable to the text it had, multiplied x times. for example:

$game_variables[1] == "apple"
Multiply the variable by.. lets say 5, then it will be equal to: appleappleappleappleapple

Multiply is the only function with an effect that doesn't change the variable back to 0, but rather multiples the number of times the string is saved.



I hope this helped you with any troubles with variables ^-^
Switches
This section is much simpler than the variable one, if you found that a little difficult :p

Switches, much like variables, are very important to a game. If you've ever done any program, even very basic programming, then you've probably worked with something called a boolean variable. A boolean variable is simple a variable that holds one of two possible values, True, or False. An example of something being true is 1 == 1. If 1 is equal to 1, then it is true.

Switches are a separate set of variables that only hold a true or false value. So how do we use these? In a game made with RPG maker, switches are used to say whether a condition is met, true, or if it isn't, false. Switches are often used when a cutscene is beginning (or ending), after starting and completing a quest, or after getting to a certain point in the map.

In a script, switches are controlled just like a normal variable, except with in-game switches we edit them just like the game variables, with the global variable $game_switches[]. You put the number of the switch inside the square brackets, [ ].

So why would we use these in a script? You can use this to check whether or not a switch is on to decide if you should run a bit of code. These are really only used in conditional branches, or statements that check conditions. If 1 == 1 is an example of a true conditional statement.

You can also use this in a script to change a switch. Instead of explicitly calling it in an event, you can use the script line
$game_switches[3] = true
to change the value. Replace the number 3 with whatever switch you want to change.
Assignment and comparison operators
Assignment Operators
Now, lets talk about assigning values to variables, and also comparing those values. We already know that we can set a variable equal to a value by using the equals sign, just like
apple = "apple" one = 1 decimal = 3.14 negitive = -5 variable = one + decimal

Now thats great and all, but what if we want to change that value? Yes, we could do it the same way, using a definite value, or even variables for a little variety, but what if we want to add or subtract a set amount? Well, this would work, wouldn't it?
one = one + 2

Yes, that would work just fine. But there's another way to do this. It's faster to type, and it looks cleaner. It doesn't really matter which way you do it, as they both provide the same result, but the following way looks nicer than the former.
one += 2

So now what did we just do here? We took the variable 'one' and we set it to add 2 to the current value. It looks much cleaner, and it'll take less time to type since there's less to type.

Now that's great and all, but can we do anything other than add? Yes, you can do all the operations!
one += 2 one -= 2 one *= 2 one /= 2 one %= 2

Ok, cool, that'll work. But, what's that percent sign doing there? In programming, division will only give you the whole number. 5 / 2 will give you 2, because 2 goes into 5 one time completely. Modulous, the percent sign, will give you the remainder. 5 % 2 will give you 1, because 2 goes into 5 two times, with one left over.




Comparison Operators

So now that you've figured out how to assign variables values in a few different ways, lets look into how we can compare them. Comparing values is a huge part of programming. If statements, a crucial part to programs, is just a comparison. If 1 is equal to 1, run this bit of code after me.

So how many ways can we compare our variables and values? There's a lot of them, so stay focused.

So I've mentioned it before, to see if a variable is EXACTLY equal to a value, you would use
if 1 == 1 then puts "One is equal to one." end

Now, that's one way, but how else can we do this? What if we want to see if the variable is greater or lesser than a value? Easy!
if 3 > 2 then puts "3 is greater than 2!" end if 2 < 3 then puts "2 is less than 3!" end

And that's all you need to do. But wait! That is only checking if the value is greater or lesser than another! what if we want to see if it is greater/lesser OR equal to? well, then we'll just take the above code and turn it into
if 3 >= 2 then puts "3 is greater than 2!" end if 2 <= 3 then puts "2 is less than 3!" end

By putting the equal sign after the > or <, you're telling the game to see if the first value is greater/lesser than or equal to the second value.

Now that we've gone over that, let's go into multiple comparisons. It's great that we can compare one thing to another, but what if I want to compare multiple things at one time? Sure, I can make a whole set of if statements to test each condition before I let the code bit run, but why do it that way? We can just use the AND or OR operators.

In Ruby, AND and OR can be represented in two different ways. You can use the words and/or, or you can use the symbols that other programming languages use. The AND symbol you could probably guess, it's a double ampersand (&&), but what about the OR symbol? The OR symbol is a double pipe (||). Now why do we need to use these symbols twice? There mustbe two symbols when using them for comparison.

So lets use this in an example:
if 1 == 1 && 4 >= 3 && 7 < 8 || 5 >= 5 then puts "True" end

In the previous example, the text "True" would be printed to a console window because all the conditions were true. Be careful when using AND and OR, however. With AND conditions, if a single condition anywhere in the if statement is not true, the code will not execute. With OR conditions, if a single condition is true, then the code will be run.



This is by no means a complete guide on all the assignment and comparison operators, but I hope it helped you understand it even just a little bit more.
Things I didn't explain in this guide (you can google them, and perhaps later I'll add them):
  • ^=
  • |=
  • !=
Attribute Accessors
When programming your scripts for RPG Maker VX Ace, you've probably ran into a situation similar to something like this:

class Fruit def initialize # This is called when you create an instance of a class fruit = "apple" end def say_fruit puts fruit end end

apple = Fruit.new apple.say_fruit # => "apple" apple.fruit = "pear" # => NoMethodError

Well why does this break? I have the variable fruit in there, and I'm trying to change it with an object of that class, so why does it say no method? Well, in Ruby, if you're going to try to change a variable within a different class, or with an object, you need to do one of two things, the easy way or the "hard" way.

The "hard" way is to make a method for what you're trying to do.

class Fruit def initialize # This is called when you create an instance of a class fruit = "apple" end def say_fruit puts fruit end def fruit=(food) fruit = food end def fruit? fruit end end

The "hard" way is to make a function for it. fruit= will let you change the the name of the variable, and fruit? will give you the value of fruit. Well why do they have names like that? Fruit= and fruit? ? This is because you're telling ruby you have a method to change the value of the variable fruit, which is fruit=, and then also one to read the value of fruit, fruit?.

Now let's look at the easy way.

class Fruit attr_accessor :fruit def initialize # This is called when you create an instance of a class fruit = "apple" end def say_fruit puts fruit end end

And you're done. What have we added? Just that little line at the top, attr_accessor :fruit. What this does is, in simple terms, create the methods for you. This is a shortcut to making those two methods for changing that variable. It's ok if you make the methods yourself, but it's faster and easier to do it this way, especially when you want to be able to change more and more variables.


Types of Attribute Accessors

attr_reader

As the name implies, attr_reader will let you see the value of a variable. It will not let you touch it, only looking. With attr_reader you can ensure that you won't break your game by changing the variable outside of the class. The methods in the class can still change it, because it is defined and exists there, but attr_reader will not let any outside method at it, they'll break the game, saying that you're trying to change the value of a read-only variable.

attr_writer
The names are just so cryptic. Attr_writer is the opposite of attr_reader, you can change the variable as much as you want, but you can't look at it. You may never know the value of the variable until you change it, since this won't let you see what it is at any point int the program's life.


But what If I want to do both read and write to a variable? Well, you can easily include both in your class. It won't break anything, but it'll get to be bigger and bigger. Or, you could do as we've done above and use attr_accessor

attr_accessor
Attr_accessor does both read and write for you. It is just a more compressed way to do it. It's a good idea to use this if you want to be able to read and write to the variable.


So how do I use these?

At the top of the class definition, just put what kind of accessor you want, followed by a symbol of the variable. In Ruby, a symbol is any string preceded by a :, so in the example fruit script above, our symbol would be :fruit.

Just make sure your symbol is the same as your variable name, and make sure the first letter is lowercase for both the symbol and the variable. Uppercase will note the variable as a constant, which cannot be changed at any point in the program, it is a constant value that can only be changed when the program is stopped.
Classes and Modules
Classes and modules in Ruby are very basic building blocks. In RGSS, nearly everything is in a class or a module. So what do classes and modules do? In simple terms, they hold things.

Classes

Classes are used with objects. An object is, after all, the 'pet' of a class. What you use in programming with Ruby is all based on an object. Integers are technically objects of the Integer class, for example. But what does an object mean in terms of a class? The object of a class is kind of like a house pet. It gets to use everything that it's owner has. If you define the class animal like so:

**Note: Class and module names must begin with a capital letter, otherwise you will receive an error about them not being constant. Constants in Ruby begin with a capital letter. Constants don't change during runtime. Ever.

class Animal name = "Otis" breed = "Corgi" leg_size = "tiny" def say_name puts name end def breed_type return breed end def legs_are return leg_size end end

And then we make a new Animal object, pet:

pet = Animal.new

Then the variable 'pet' has become an object. It has access to all the methods we defined in the class Animal. So now we can freely do something like this:

puts "Hello, my name is Zale, and I own a " + pet.breed_type + " named " + pet.say_name +". His legs are so " + pet.leg_size + "." #output: Hello, my name is Zale, and I own a Corgi name Otis. His legs are so tiny.

The pet object can use any of the methods we put in the Animal class because it is an object of that class. Creating an object is usually done by using an instance variable. These variables are the same as normal variables, but their name is preceded by an '@' sign. So in the case of the example above, our object would be

@pet = Animal.new

But why do we use instance variables? Why not a normal variables, won't they work the same? Yes, they will work the same way. However, there are benefits to using instance variables. In the example above, the program worked fine because the variables were defined outside any methods, making them available to the whole class. However, if we had something like this:

def fur_color color = "brown and white" return color end def spots return color + " with some dark spots" end

and we then call the methods:

pet.fur_color pet.spots # => Issue here

You will see that there's an issue on the line pet.spots. It makes use of the variable 'color' that was made using the method call above it. However, color was defined within a method, making it only available to that method. You can probably guess now that an instance variable is available to the whole class, no matter where it was defined. Instance variables can hold any kind of data, not just objects. Instance variables are global to your class.

So why do we use these when making objects of classes? Because chances are you're not just making an object that you will only control with a single method. In same cases this is true, where you will not need an instance variable, but in most of the time you want to make it in one place and use it elsewhere in your program. Just remember that they only available to the class. Even further, they are, as the name implies, only existent to each copy of the class. For example:

class A @name = "A" def change_name(new_name) @name = new_name end def get_name return @name end end @one = A.new @two = A.new @one.change_name("D") @one.get_name # => "D" @two.get_name # => "A"

'@one.get_name' will return the letter D because it was changed for it. '@two.get_name', however, returns the letter A because it was not changed. Instance variables are only changed in their object.

So there's no way to keep an instance variable the same through all objects of a class? Not even ones used ever time? Wrong! There is a way, but this is yet another type of variable. There are a lot of variable types in any programming language, and Ruby is no different. In C, C++, C#, Java, and many more programming languages, you may know something like this as the 'static' modifier. When used to define a variable in a class, static means that no matter how many different objects there are of that class, each one has the same variable pointing to the exact same value. Changing it in one object would change them all. Instead of 'static', ruby uses '@@'.

Very similar to instance variables are what, in Ruby, are called class variables. Class variables are static, and exist in every object. Change it one object and it's changed for all of them. I find that examples are easier to understand than paragraphs of text, so here's an example:

class MyClass attr_accessor :apples # See Attribute Accessors section. @@apples = 5 def give_2_apples @@apples -= 2 # Minus equals, see the operators section. end end @one = MyClass.new @two = MyClass.new puts @one.apples # => 5 puts @two.apples # => 5 @one.give_2_apples puts @one.apples # => 3 puts @two.apples # => 3

Both variables had the value of 'apples' changed because it is consistent between every single object of the class.

So are we done with classes now? Nope! We still have to go over one very important detail with classes. What if we want to set some values when the object is first created? What do we do then? By default, when you create a new object, the class' 'initialize' method is called. This will be run before the next line of code is run. For example:

class Pies def initialize @@count = 40 @kind = "cherry" end def eat_pie @@count -= 1 end end @one = Pies.new # @one.initialize is called right now. @two = Pies.new # @two.initialize is called right now.

You can even specify a number of arguments that the class takes by default. Just change the definition of initialize to something that suits your needs.

class Cakes def initialize(kind) @@count = 40 @kind = kind end end

Just be sure now that when you define the object you pass in the arguments like you would to a normal method

@one = Cakes.new("Ice Cream")



Modules

So what's different about modules? If they both hold things why would there be two. The difference between modules and classes is actually fairly large. They both hold variables and methods, but classes can have instances(objects), and modules cannot. A class is, however, able to include and use what is in a module. It's similar to how a family works. The child doesn't really own the TV, or even 'their' room, but they use it. Modules and classes are similar. The module is the parent, because it owns things, and the class would be the child because it doesn't own everything itself, but it uses them. You declare a module just like a class, but instead of 'class', use 'module'.

So how do I include what is in a module into my class? Ruby has a built-in function for that. All you need to do is, at the top of your class, 'include' it.

module Electronic def storage puts "It's a storage device!" end end class USB include Electronic storage # => "It's a storage device!" end

And now your class USB can use anything inside of Electronic. Nice, simple, and a great way to use a template (module) for multiple different classes.

But wait, there's more! With your order of Free RGSS Learning, learn that modules can't have objects. They will not work, you will get an error, and it will break. Trying to do something like

computer = Electronic.new

will not work. you can not make an object with a module. You can make an object of USB, which then has access to Electronic, but you can't directly make an object of Electronic.
More Variables
Remember when we went over variables? Yea, we went over three kinds, but there are more!

Right now we're going to go over Instance Variables and Class Variables.

Instance Variables
____________________________________________________________________________

Instance variables are tied to an instance (hence the name) of the class. But why use them? What makes them soooo special? Well, just like a local variable, they hold a value. They're a type of variable, what else would you expect them to do if they can't hold a value? But now is when they get extra useful! They're sort of like global variables in the sense of where they can be used. We already know that local variables are tied to the method that created them, and global variables can be used in any class in any method and at any time. Instance variables, though, are not global nor local. They're pretty much both. They are global to the entire class/module that it was created in, but in another class, it doesn't exist. Consider the following:

class One def start @instance = 6 end def print_crap puts @instance end end class Two def start end def print_crap puts @instance # => Blank line: What is this '@instance' you are trying to give me? end end

They're really convenient, and they're not difficult to reference, their names simply have an '@' in the front.

Now, instance variables are also tied to the instance of the class, meaning they won't be the same for each object. For example:

class One def start @crap = "" end def set_crap(value) @crap = value end def print_crap puts @crap end end thing1 = One.new thing2 = One.new thing1.set_crap("watermelon") thing2.print_crap # => Blank line. thing1.print_crap # => "watermelon"

These are used very often in RPG Maker since different variables are used in a lot of different methods and need to get there somehow.


Class Variables
____________________________________________________________________________

Class variables are even more like global variables. They're really an upgraded instance variable. Like instance variables, they can be used anywhere in the class(they're still tied to the class that made them), but now they keep the same value across EVERY object of that class. They're names are also nearly identical to instance variables. With instance variables you put an '@' in front of the variable name, well with class variables why not just slap a second one on there for a grand total of @@variable_name.

class One def start @@crap end def print_crap puts @@crap end def set_crap(value) @@crap = value end end thing1 = One.new thing2 = One.new thing1.set_crap("apple") thing2.set_crap("pumpkin") thing1.print_crap # => "pumpkin" thing1.set_crap("tuna") thing2.print_crap # => "tuna"

These are really useful if you have multiple instances of the same class and they all need to have the same value for one or more variables. Be careful when changing them, though, it changes it for every one!
18 Comments
slayerdude18 7 Jun, 2023 @ 2:38am 
ive been going over it for a while now,... i don't understand it enough to make a script i was looking for, a projectile kinda script so i can actually use guns instead of the standard battle thing
A Kawai Potato 27 May, 2020 @ 10:09am 
@Zalerinian:
So I tried putting it in ver batum. Unlike all of my attempts this past month, it resulted in a crash. That's a good thing cause usually when I futz with it nothing happens. Any result at this point is a good result.
The crash looked like this:
Script 'Game_Battler' line 749: NameError occurred.
undefined local variable or method 'poison' for
#<Game_Actor:0xbf0629c>
The exact code that dictates healing over time (and thus poison) looks like this:
def regenerate_hp
damage = -(mhp * hrg).to_i
perform_map_damage_effect if $game_party.in_battle && damage > 0
@result.hp_damage = [damage, max_slip_damage].min
self.hp -= @result.hp_damage
end
As you can see, Poison as an effect is reverse healing, which itself is reversed damage. I have been grasping at straws here and you are the closest thing I have found to help. You can find the code at around line 745 in the Game_Battler section of the script editor.
Zalerinian  [author] 21 Apr, 2020 @ 8:06am 
@an potato:
I don't really keep this guide updated anymore, but this can be resolved by just making sure that there's a minimum (probably 1) that the poison does. I haven't worked with RPG Maker VX Ace or Ruby in years, but if you know where poison damage is calculated, you can do the following to make it deal at least one damage, assuming the variable 'poison' is what the original calculation is, and 'damage' is the amount that we're going to unheal the player:

damage = [1, poison].max

This way you'll never get a number below 1.
A Kawai Potato 13 Apr, 2020 @ 5:02pm 
I've spent the last day trying to change how Poison works. It's functionally an inverted healing spell that "heals" a negative percentage of total health. The problem is that the percent is always rounded down. By default, Poison unheals %10 of total health. That means if a target inflicted with Poison has less then 10 MaxHP, they won't take any damage from being poisoned. That is a problem for me because I want to start at very low health values. Another 'issue' I don't know how to fix is that Poison cannot be lethal. It cannot reduce someone to 0 HP. Any help here would be appreciated.
Zalerinian  [author] 23 Oct, 2016 @ 8:28am 
No problem, I hope it helps. There's a lot of really cool and powerful things you can do with ruby once you get to know how it works well enough :)
justinsane11 22 Oct, 2016 @ 5:17pm 
dude, i haven't read this yet, but i just did buy rpg maker vx and i gotta say it's really awesome that you provide this for us. much appreciated
Everscrub 22 Apr, 2016 @ 4:36pm 
Sorry for the 'neccro,' but thanks for the guide. I didn't really understand this when I first read it but as I studied the script more it gave me a context to learn. Now I can at least do a few numeric tweeks here and there with some ability to understand what the effect would be. Haven't broken the engine yet, but I'll keep trying :steamhappy:
Staraven 2 Jun, 2015 @ 10:28pm 
Thanks A TON! This was really helpful I was always confused how to do scripting in the event commands window. Freakin awesome guide. 5/5 Better than any I've seen out there.
Ka'auwaii 4 Apr, 2014 @ 5:40pm 
I guess if I wanted any sort of tutorial, it would be how to strip down the battle system to display only enemy troops, then piece by piece add in Actor Action windows that open at locations based on the party member's position in the formation, the ability to arbitrarily place custom pictures with separate asset files so that as battle conditions change (like if a character sustains damage) they may be modified to properly reflect the actual information, as well as the ability to invoke character HP/MP/TP as variables that may be tied to (for example) the coloration and length of existing assets for standard Health Bars.

I have other goals with scripting, such as producing a Spells Per Day system, but I know that Skills and Items are very closely related by default and share most of their code, so having "Charges" of a Spell that depletes one at a time on use should be a simple task for a simpleton like me.
Zalerinian  [author] 4 Apr, 2014 @ 3:39pm 
I have had to cut a few of these sections short as there is a character limit for each section. I don't recall what it was, but I do remember having to cut our some of the explanation, though never too much. I planned to actually start making guides in video format instead of text, but again I'll have to find the time for that. I currently have two jobs (1 programming for a commercial game made in RPG Maker), and I'm applying for a 3rd one as a summer job, so I've got quite a lot to do at the moment.

If there's anything you want me to specifically write about, I could try to get something one for it.