RoA Workshop Guide – Miscellaneous Things New Modders Should Know

Since the start of workshop tools, the community has learned a great deal about what makes a workshop character play and look like they belong in Rivals of Aether. However, a lot of factors aren’t explained and are impossible to know about without being in the community for some time, or by finishing a character and learning all the errors afterwards. To help newer creators skip the trouble, this short guide will de-mystify the most common, yet-rarely discussed modding hurdles that you should be aware of when making your first character. 

Double-Sized Character Sprites

Fairly often, a creator chooses to draw at twice the sprite size needed when making their first character. Sometimes the creator isn’t aware that Rivals characters are scaled to double size in the game files – other times, the creator is just more comfortable drawing higher-res pixel art. Since it takes far more time to animate larger sprites, I recommend downsizing early on, even if it means learning lower-res pixel art along the way.

If you’re working from a sprite sheet, or your workflow simply works better with more pixel room, then it’s generally okay to have double-resolution sprites if it saves you time in the long run. Still, it’s worth noting that while some don’t mind either style, many in the modding community prefer the uniform style of lower-res character sprites.

You can either double the size of the sprites yourself when you export them as strips, or you can set the variable small_sprites’ to ‘true’ in your character’s init.gml’ and the game will resize them for you.

Sandbert Residue

Sandbert is a popular character to use as a base for new workshop characters. However, Sandbert’s default stats and attacks have become infamous for that same reason. Their speed and gravity are set very high, their moves are powerful and easy to exploit, and the sheer number of ‘Sandbert Clones’ uploaded to Steam have made people rather exhausted of them. Without fully adjusting your character’s stats and moves, your character could end up being put in the same box as the Sandbert copies – which is not something you want if you’ve spent a lot of time and effort on your character! 

I recommend taking a look at the RoA General Stats and Frame Data spreedsheets, and borrowing base cast values (or close to them) to replace Sandbert’s stats. Sandbert’s aerial attacks are especially strong (and recognizable!), so be sure to replace or rebalance those before you finish your character.

‘air_frict’ and ‘hitstun_grav’ Affect Your Character’s Survivability

So your character has a normal ‘knockback_adj’ stat – but for some reason, it’s incredibly hard to KO them. What happened? Chances are your ‘air_frict’ or ‘hitstun_grav’ stats were set too high. Just like ‘knockback_adj’, very small changes to these numbers can have drastic effects on your character’s survivability. 

‘hitstun_grav’ is the character’s gravity speed specifically while they are in hitstun. Some first-time modders make the mistake of making this value equal their normal ‘gravity_speed’ stat. While the highest ‘gravity_speed’ in base cast is 0.6, the highest ‘hitstun_grav’ is only 0.53. Any higher than that and it will seem nigh impossible to KO your character off the top of the stage.

‘air_frict’ is your character’s friction while airborne – which applies during hitstun too. This normally ranges from 0.02 to 0.07. The higher it is, the longer your character survives when knocked horizontally.

Aerial Boosts

The majority of Aerial Attacks in the Rivals’ base cast have a small vertical speed boost when you first use them. It’s a feature which often goes unnoticed, but it makes a big difference to the feel of a character. Try picking Zetterburn in training mode, and measure how high he jumps with a rising NAir compared to when he jumps without an attack. 

You can add this to your own characters by simply adding this Grid Index to the first window of your attack:

set_window_value(AT_NAIR, 1, AG_WINDOW_VSPEED, -1);

If you need more explanation on Attack Windows, this guide explains them in more detail.

Walljump-Cancellable Special Moves

The majority of the Rivals cast can cancel moving Side-Special and Up-Special attacks into a wall-jump. It’s a big part of what makes edgeguarding and recovering in Rivals feel fluid and responsive. 

Unlike other common base cast traits, there isn’t a Grid Index you can simply plug in to make a wall-jump air-cancellable. You have to implement wall-jump cancels by adding code in ‘attack_update.gml’. Fortunately, the code required is very straightforward. For example:

//attack_update.gml
if (attack == AT_USPECIAL) { can_wall_jump = true; }

The above code will allow your character to wall-jump at any moment out of their Up-Special. Sometimes you’ll only want an attack to be wall-jump-cancellable on a specific window, or after the first few windows. In those cases, you can add conditions to specify specific windows to walljump in, such as in the examples below.

//attack_update.gml
if (attack == AT_USPECIAL && window == 3)  { can_wall_jump = true; }
//or alternatively:
if (attack == AT_USPECIAL && window > 1)  { can_wall_jump = true; }

Strong Attack Post-Charge Startup

Every Strong attack in Rivals actually has two startup windows: one before the charge, and one right after the charge before the hitbox appears. This post-charge startup is short, between 2 and 6 frames, which is just enough to give the act of releasing the attack some commitment. Since all of Rivals’s defensive options also have 2+ frames of startup, this added commitment gives opponents the necessary time to play around the move.

Ideally, the same idea should be applied to special attacks. It’s a good rule of thumb to make any action have 2-3 frames of commitment before a hitbox appears. 

Adding a post-charge window to a Strong Attack is easy to do: simply insert a new window in-between your Strong Attack’s ‘charge’ window and ‘active’ window.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *