How to make the most of custom formulae.

So earlier today in rpgmaker’s irc chat the conversation moved to the scripts someone desired for their game which included:

favorite foods – i can specify each actor’s favorite food and when the item is used on them, they heal extra hp or something

Anyhow I pretty quickly realised a script was not needed to implement this feature. RPG Maker Ace once again proves just how versatile it is because this feature can be implemented in a single input box. In particular this one:

That formula box alone has tremendous potential. I offered two solutions to the problem.

if b.id == 1; 500; else; 100; end;

b.id == 1 ? 500 : 100

Let us first look at exactly what they are doing. They both check a conditional statement, namely:

b.id == 1

For the formula box in general a refers to the attacker or user and b refers to the defender or recipient, who may or may not be the same.

Any way what we are checking is that the recipient’s id is equal to 1. Please note that this example is about an item which should be usable on party members only and therefore b is always going to be an actor (party member in English). So essentially we are checking that the person who the item is being used on is first in the database (Eric by default).

Now let’s look at the rest of those lines.

if b.id == 1; 500; else; 100; end;

If you’ve done any programming before you will recognise this as a standard if statement. If you’re confused about the presence of the semi-colons then let me quickly explain that they are like a way of inserting a new line. Were we not restricted to a single line then we could have written it like this:

if b.id == 1

500

else

100

end

So what this means is when the character id equals 1, heal 500HP otherwise heal 100HP. The other version achieves the same result but might be a little less clear if you are not overly familiar with ruby.

b.id == 1 ? 500 : 100

It still has the conditional, it is still checking if the item is being used on Eric but the rest of the code you could say has been condensed. This effectively boils down to:

condition ? true : false

The last thing two things I want to say before moving on are firstly that for more complicated situations you are probably better going the if statement route and the last thing is that while the formula box is pretty powerful you need to be aware that it is capped at a certain length (let’s be grateful that we use a & b and not attacker & defender) and if there is an error in your formula the skill will just miss repeatedly rather than crash the game.

Right so that concludes the explanation section of this tutorial. I personally find having a lot of examples to work from quite helpful so this next section is going to be a problem and solution section and hopefully one of them will be close enough to what you hope to achieve that you can adapt it.


Scenario: Half your party are demi-humans or robots and require different healing items than the rest of your party.

There are some quite creative solutions to this problem but for the sake of this tutorial I want to keep is simple. So the solution I offer just checks the ids again.

(b.id==1 or b.id==3 or b.id==4) ? 500 : 0

A couple of things I would like to draw your attention to. I have omitted the spaces on both sides of == because when we’re space conscious they are wasted characters. The other feature is the ors they act like you’d expect but be careful when using and because it has a bit more to it.


Scenario: One character’s favourite food is peanut butter sandwiches but another character is allergic to peanuts.

So the way I’m going to implement it is that Eric gets a bonus 100 health when he eat the sandwich but Natalie is afflicted by poison when she eats one.

if b.id==1;200;elsif b.id==2;b.add_state(2);0;else;100;end;

So it was a bit more complicated this time so I went the route of the if statement, elsif is a way of checking another condition if the first one wasn’t met. So let’s just talk it through, if Eric gain 200HP, if Natalie add status number 2 (poison) otherwise restore 100HP.


Scenario: You have a thunder skill which doors more damage when outside, which you control with a switch

This is just a switch example.

$game_switches[x] ? 500 + a.mat * 4 – b.mdf * 2 :  200 + a.mat * 4 – b.mdf * 2

I’ve also included in it an example of how to include the default formula so you can see how to incorporate it.


Scenario: I have a skill whose power I want to control through a variable

Easy enough. Here’s how to do 10 times the value of the variable.

$game_variables[x] * 10


Scenario: I have a gamber and I want him to use dice skills e.g. he rolls two six sided dice, the skill does 100 times the combined number of the faces. It does double if he rolls a double and 10000 if he rolls snake eyes.

This one has a lot in it so we’ll look at it closely. We’ll use the if method and then use the rand(x) method which returns a number from 0 to x-1 meaning we will add 1 to it to simulate dice. We will also need to create some local variables, I will use c & d (DO NOT USE a & b).

c=1+rand(6);d=1+rand(6);if c==1 and d==1;10000;elsif c==d;c*400;else;(c+d)*100;end;

It’s not perfect, I would quite like to know what he rolled rather than just seeing the damage. Don’t worry the solution to this new problem will be shown in the next tutorial.


Scenario: We want a skill like White Wind (a final fantasy move which restores someone’s current health).

An easier one for once, we want the target’s (b) hp

b.hp

Other parameters you can use:

hp,mp,tp,mhp (Maximum Hit Points), mmp *Maximum Magic Points), atk,def,mat (Magic ATtack power),mdf,agi,luk


Scenario: What about demi?

Demi was a move which took a quarter of your current health.

b.hp / 4


Scenario: I want a skill which uses someone else’s stat e.g. my princess is bossing her guard around.

This is easier than you think, as long as it’s a particular character.

$game_actors[1].atk * 4 – b.def * 2

Eric attack!


Scenario: I want a skill to add an effect on the user e.g. exhaustion.

Not too hard.

a.add_state(2); a.atk * 4 – b.def * 2

Could also have it damage the user etc


Scenario: I want a skill which does more damage with a certain weapon equipped.

Little bit more complicated.

a.weapons.include?($data_weapons[1]) ? 1000 : 200

Since when did Hand Axes become so strong?


Scenario: I want a skill to do x

Leave a comment and I will try my best to direct you.

It has been brought to my attention that v[x] achieves the same result as $game_variables[x]

27
  

Skill Charges


By Fomar0153
Last Updated: 15 March 2012 (Version 1.0)
Download Link: http://pastebin.com/raw.php?i=ukLFX1Zh

This script can implement two new features. The first is skill charges, each time you learn a skill you gain a charge in it and you’re allowed to use that skill only as many times as you have charges per battle. The second feature is that each time you learn a skill after initially learning it the skill gets more powerful. Using both features together allows for your skills to get weaker each time you use a charge.

Also here endeth the daily scripts. RPG Maker VX Ace is out and I want to get on with RPG Making, I will still be releasing scripts, just not daily.

2
  

Specific Actor Items

By Fomar0153
Last Updated: 14 March 2012 (Version 1.0)
Download Link: http://pastebin.com/raw.php?i=qpJ96CK0

This script allows you to specify some items to only be used on certain actors, my use for this is skill tomes but I’m sure there are others.

2
  

Equipment Skills by Level


By Fomar0153
Last Updated: 25 July 2012 (Version 1.1)
Requires: Individual Equipment
Requires: Equipment Levels Up
Requires: AP System (Only if learning skills permanently)
Requires: Equipment Skills
Download Link: http://pastebin.com/raw.php?i=RJWwwLy4 (Version 1.1)

This is an add-on which provides compatibility between my Individual Equipment Script, Equipment Levels Up and my Equipment Skills script and also provides a new feature – the ability for skills to unlock on the weapon as you level the weapon up.

1
  

Infinite Levels

By Fomar0153
Last Updated: 12 March 2012 (Version 1.0)
Download Link: http://pastebin.com/raw.php?i=p2Dv3EjR

Lets you set a max level higher than 99 and provides stat formulas for all levels.
If you truly want infinite levels set max_level to return @level + 1

Also I’ve had enough of daily scripting, I’m going to stop it on the 15th.

0
  

Elementalist Class

By Fomar0153
Last Updated: 02 April 2012 (Version 1.1)
Requires: Unique Classes
Stand Alone Version: Learn Skills by Element use
Download Link: http://pastebin.com/raw.php?i=3xiq2WXE (Version 1.1, 02 April 2012)
Download Link: http://pastebin.com/raw.php?i=c18AKbnG (Version 1.0, 11 March 2012)

Allows you to learn new skills by using skills of the same element.

Note: Just finished Mass Effect 3, I’m joining the groups of people not happy with the ending.

1
  

Learn Skills by Element use

By Fomar0153
Last Updated: 02 April 2012 (Version 1.1)
Download Link: http://pastebin.com/raw.php?i=WBE27kJD (Version 1.1,  02 April 2012)
Download Link: http://pastebin.com/raw.php?i=KsKVuJV4 (Version 1.0,  10 March 2012)

Allows you to learn new skills by using skills of the same element.

2
  

Nickname Changer

Who likes nicknames? I’d rather know surnames or ages. Yes this is a cop out, Mass Effect 3 happened.

=begin
Nickname Changer
by Fomar
=end
module Fomar
  
  NICKNAME_VOCAB = "Surname: "
  
end

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● I'd rather know their surname.
  #--------------------------------------------------------------------------
  def draw_actor_nickname(actor, x, y, width = 180)
    change_color(normal_color)
    draw_text(x, y, width, line_height, Fomar::NICKNAME_VOCAB + actor.nickname)
  end
end

1
  

Secondary Classes

By Fomar0153
Last Updated: 08 March 2012 (Version 1.0)
Download Link: http://pastebin.com/raw.php?i=EhB0dWer

This script allows you to give a character a second class they can learn some or all of that classes skills and optionally inherit all of the secondary classes traits and a percentage of it’s paramaters.

3
  

Barehand Script

By Fomar0153
Last Updated: 07 March 2012 (Version 1.0)
Download Link: http://pastebin.com/raw.php?i=V9guxYgE

This script allows you get a character’s atk without the weapon’s stats being
applied. I’m likening it to a barehanded monk attack.

Shortest script of mine ever… I think. I’ve been pretty busy hopefully at the weekend I can make up for it with some more impressive scripts.

1