Expanding on Ranger skills

As a rule, all classes in FCQ are limited to 4 active skills.

This is a design constraint to keep each skill useful. In FCQ, you won’t have the equivalent of a level 1 Fire spell cluttering your skill list after you’ve learned the much superior level 3 Firaga.

It also keeps battles feeling snappy. Find your skills in 2 clicks. No scrolling required.

Equally important, this restriction is also to keep me sane. Even with only 4 skills to a class, but over 20 classes, that’s still a lot of skills. It’s plenty of work to conceptualize and balance them all.

With one exception

However, there was one area where this limitation felt… well, too limiting. My Ranger class has the ability to manipulate the elements. Since there are 4 elements, there are 4 related skills. That’s all. Just 4 support skills that are identical, except for their elemental affinity.

My workaround, while staying true to the rules, is to give the Ranger a toggle skill. Using Desert Camo or Swamp Camo will swap between two sets of 4 moves each.

  • Embed (elemental support)
  • Submerge (elemental support)
  • Ambush (new)
  • Desert Camo (toggle)

and

  • Parch (elemental support)
  • Levitate (elemental support)
  • Survival (new)
  • Swamp Camo (toggle)

A decent compromise

It’s slightly clunkier than just putting more than 4 skills in a scrolling list, since it takes a couple seconds to use the toggle skills. But I’m willing to accept that speed-bump since it keeps the menu behaviour consistent and gives the class a unique quirk.

Changes to dual-wielding

Dual-wielding is the concept of holding a weapon in each hand instead of a weapon and a shield, or a two-handed weapon. It’s a fun way to give your characters more options for customization. The problem with the way RPG Maker MV handles dual wielding is that there’s no visual feedback from it. Your attack animation still only hits one time, no matter how many weapons you hold.

Plugin woes

I’ve been using a plugin to fix this issue. But it’s been giving me grief, randomly changing my character’s stats between each weapon swing and leaving them permanently altered. The plugin’s support was shaky anyway, so rather than spend time troubleshooting, I looked for an alternative.

A practical solution

RPG Maker forums user Arkzein shared a code snippet using Yanfly’s action sequences to simulate a proper dual-wielding effect.

It does what it should quite elegantly, allowing the user to swing each weapon individually and letting those hits have different strengths depending on the weapon’s strength. I added a few extra features to it, including

  • a check to see if the weapon fires long-distance, or if the player should approach their target before the attack begins.
  • a check to see if the user is carrying two weapons (so it acts like a regular one-hit attack for users with one weapon).
  • a check to see if the 2nd weapon has a different animation than the first (otherwise it just repeats the first animation).

Sample code

Here’s the snippet in full:


// M.o.v.e. forward a little i.f. firing a missile
if user.attackMotion() == 'missile'
  move user: forward, 48, 10
  wait for move
else
// M.o.v.e. to the target
  move user: target, front base, 10
  wait for move
end

// I.f. the user has multiple weapons + dual-wield
if user.weapons().length > 1 && user.isStateAffected(129)
 EVAL: user._weap1 = user.weapons()[0];
 EVAL: user._weap2 = user.weapons()[1];
 // Unequips second weapon
 EVAL: user.forceChangeEquip(1, null);

 // 1st weapon attack
 MOTION ATTACK: user
 MOTION WAIT: user
 action animation
 wait for animation
 action effect

 EVAL: user.forceChangeEquip(0, user._weap2);

 // 2nd weapon attack
 MOTION ATTACK: user
 MOTION WAIT: user
 // animation of 2nd weapon
 EVAL: target.startAnimation(user.weapons()[0].animationId);
 wait for animation
 action effect

 // Restores weapons
 EVAL: user.forceChangeEquip(0,  user._weap1);
 EVAL: user.forceChangeEquip(1, user._weap2);

else
 // Regular 1 weapon attack
 MOTION ATTACK: user
 MOTION WAIT: user
 action animation
 wait for animation
 action effect
end
action>

The weird dots in the comments are because action sequences don’t have the concept of comments. So if I didn’t put dots in between the letters of “i.f.” it would be interpreted as a programmatic if statement.

Merging updated scripts

The developers supporting RPG Maker MV (the engine behind FCA) released a fairly significant bug into the code with version 1.3.2. It relates to the way skills are learned, and since that’s a significant factor in the gameplay of FCA, I decided to refrain from updating my codebase.

Updating to 1.3.4

They just recently fixed the bug. So I went through and updated all of the core scripts (from 1.3.1 to 1.3.4) and all of Yanfly’s scripts.

To my surprise, FCA still boots up properly and I’m even seeing a huge improvement in how battles perform (better frame rate). But I’m seeing more stuttering on the regular map screen.

Time to run the rest of my tests and see what’s broken!

Variety in the weather

Even arid mountain cities get rain.

Pyr is going to have ash falling most of the time. But there’s a 4% chance of a rain happening for a little while.

Screenshot of game character outside in the rain

It’s tough to see the rain in a still image. Take my word for it.

New menu layout

new-menu-1

Full EXP and JP:

new-menu-2

This new layout is very dense with information. But as someone who has spent many hours grinding in Final Fantasy 5, checking the menu to see my character’s current JP is very convenient.

I’m debating whether or not to keep the larger text for the current HP and MP. Technically it’s not very important to draw the player’s eye to these values, since they are refilled after each battle. I may put this layout into the battle UI, and change this menu to have a current-only value.

The job tree – iterations

A job (aka class or role) is a specification used to define a player character’s skills, abilities, and stats.

job-tree-0

Iteration 2

Earlier draft of the job tree. Freelancer was a separate job with no antecedents. Apparently I planned to have Necromancer related to Alchemist.
job-tree-1

The freelancer became a prereq job.

The magic jobs were renamed to emphasize their similarity.

The magic jobs got a third stage in their tree.

Stareomancer became the much less magical-sounding Ranger.

Iteration 3

job-tree-2

Freelancer became Adventurer, which shifted over to a prereq for the magic jobs. Their third stage was removed. (The fewer exclusive jobs, the better.)

All jobs were normalized to have a level 3 prereq.

Iteration 4

job-tree-3

Merchant and Alchemist lost their Mir-exclusive status, and became part of the Adventurer tree. (Again, the fewer exclusives, the better.)

Page was a new job added as the first stage of the magic tree. It then branches simply with each player character getting their own variety of Channeler.

Copycat became Sage.

Halving the player’s HP

Recently I’ve been playing Final Fantasy Tactics Advance A2, and I’ve been appreciating their relatively low numbers. The highest HP I’ve seen in the game is around 700 total.

So, for FCA, I’ve reduced all of the playable character’s max HP by half.

It’s much too early to balance the game, but the original values were clearly off. End-game bosses needed to take three turns to kill a completely unequipped player character. That’s far too much.

Examining damage to HP ratio

The formula for most damage in the game is:

Math.power(a.atk, 1.5)

Or, in English:

The battler’s attack stat to the power of 1.5

That means, even at the soft cap of 99 ATK, an enemy’s skill would deal 985 damage against an unarmoured target.

In the early days of development, the highest HP class in the game had 5300 HP. That’s now down to 1300, and the lowest HP class now has 540. Now we’re looking at the possibility of characters being tanks or glass cannons.

Creating more varied gameplay

Lowering HP should have the effect of increasing the value of armour, which is good. I don’t want players to have to grind too much for anything in particular. So I’ll split the burden of empowerment between gaining levels and gaining gold to buy equipment. It’s not much, but it’s a start to increasing diversity of the standard gameplay loop.

Skills targeting friend or foe

A lot of skills in this game fall into both of these categories:

  1. Can target friend or foe
  2. Hit multiple targets at once

… which is more complicated that it seems. By default the engine lacks support for the player changing targets between friends and foes.

Attempt one

At first I used Yami’s Invert Target. It’s a buggy mess. A community-created compatibility patch fixed it for a while, but eventually it started to give me errors again.

Yanfly to the rescue

I recently switched to Yanfly’s Selection Control. It’s a solid plugin, compatible with Yanfly’s other works. But it still doesn’t support both of the conditions I mentioned. You can either have a skill toggle between friend and foe, OR have it hit multiple targets.

I compromised by writing this block of code for each of my multi-target skills:

for (var i = 0; i < target.friendsUnit().aliveMembers().length; ++i) {
 var member = target.friendsUnit().aliveMembers()[i];
 targets.push(member);
}

After the player selects a target, all of the target’s allies are added into the scope of the attack.

It’s still not the most elegant solution – the selection cursor only appears over one target at a time – but it’s stable and it works.

Bravely Default menu

bravely-menu

Final Fantasy 5 Menu

images-duckduckgo-com

RPG Maker MV default menu

FCQ menu V1

mymenu

Bravely Default, and the job-based Final Fantasy series before it, is a big influence on this project. The way their menu organizes information is a lot more elegant than what I have now, so I’m going to have to move in that direction.

FCQ menu V2 (Updated December 2016)