Overview
This guide will walk you through the process of creating a Workshop character, provide links to all the necessary tools and resources, and answer all of the most common hurdles that new creators may run into.
Intro
Rivals hasn’t had any real guides or walkthroughs made since Workshop debuted a year ago, so here’s an attempt to change that! The goal of this guide is to outline all of the technical aspects for creating a Workshop character, provide links to all the necessary tools and resources, and answer all of the most common hurdles that new creators may run into.
What You’ll Need
A computer, a PC copy of Rivals of Aether, a bunch of spare time, and ideally some basic art skills.
Note that when making a character from scratch, over half of the work will involve drawing and arranging your animations! If you’re new to pixel art, consider checking out some pixel art and animation tutorials first, even if you’re using an existing sprite sheet as a base.
Coding skills are very useful, but not essential, depending on the character. Most parts of a Rivals character can be made without any “real” code, and many creators in the community are willing to help with the remainder.
Finally, you’ll have an easier time if you’ve learned the ins and outs of playing Rivals of Aether! Some modders have picked up the game and jumped straight into Workshop, but quickly ran into issues with their character because of a game mechanic they hadn’t discovered yet. I recommend going through the Rivals in-game tutorial before you begin modding.
Downloading a Template Character
The first step to building a character is to choose a template to build from. I would recommend using one of the following:
Sandbert – The “official” template character.
Blank Character Template[rivalsofaether.com] – A completely empty template.
Sandbert With A Phone – Sandbert with improved code, balanced stats and a bunch of added training-mode functions, made by Muno. Only recommended after you’re familiar with the basics.
While other character mods can be borrowed as templates, not every character is open for free use. Ask the creator for permission before using large sections of a custom mod.
After subscribing to a workshop character, your ‘subscribed items’ folder can be found here:
Next, find your ‘local’ Rivals of Aether folder here:
Create a folder named ‘workshop’ in your ‘local’ RivalsOfAether folder if it doesn’t exist already. Then copy-paste your template(s) into this new folder.
If you can’t find the folders, try checking your other storage drives. You can also try searching for RoA’s steam ID (‘383980’) for the ‘subscribed items’ folder, or searching APPDATA manually (Start -> Run -> %APPDATA%) for the ‘local’ folder.
If everything is set up correctly, you should see your ‘local’ character in your workshop character list in-game. (Local characters won’t have a ‘subscribed’ arrow symbol next to their name.)
Setting Up GMEdit
GMEdit[yellowafterlife.itch.io] is the recommended code editor for Workshop characters. With the ‘dialect’ installed, it features auto-completion for Rivals-specific names, functions and values. If you have your own editor that you prefer to use, you can skip this step.
Download the *BETA* version of GMEdit.[yellowafterlife.itch.io] Run it, then click Menu (≡) -> Preferences -> GML Dialects Directory (at the bottom).
Next, download a RoA Dialect.
Official, but outdated Dialect: [link]
Unofficial, updated dialect (by Supersonic): [link]
Extract it and place it into the dialects directory.
Finally, restart GMEdit, and drag your character’s config.ini into the GMEdit window. If everything is set up correctly, all of the character’s files will now display inside GMEdit.
Editing Your Character’s Name and Base Stats
In your character folder, the file ‘config.ini’ contains important details like your character’s name, description, author and item type. For new characters you should erase the “url” tag. You can also set your character’s name and other information by editing the values in this file.
‘scripts/init.gml’ contains your character’s base stats, and other base variables. See the Workshop Player Variables[rivalsofaether.com] list to see what all of them do. If you are using Sandbert as a template, it is very important that you edit these entirely, as Sandbert’s stats are much stronger than the average character.
Take special care when editing your character’s ‘hitstun_grav’ (default 0.5) and ‘air_friction’ (default 0.04). Even slight changes to these numbers can have a big effect on a character’s weight and survivability. For everything else, use the Rivals General Stats Sheet[docs.google.com] for a good point of reference.
Try changing some numbers around, then open up Rivals’ Training Mode and test out the character. Rinse and repeat until your character’s movement fits what you are aiming for. In Training Mode, you can press F5 to reload the character and test your changes quickly.
Editing Your Character’s Attacks
Attack information is stored in the ‘scripts/attacks’ folder. In the files listed here, Attack stats and properties are defined with a long list of ‘Grid Indexes’. The rows of indexes and numbers here are what defines all of your frame data, hitboxes, sound effects and everything else.
Grid Indexes can be separated into three categories: ‘Attacks’, ‘Windows’ and ‘Hitboxes’. ‘Windows’ can be thought of as a group of animation frames. Each ‘Attack’ has a set number of ‘Windows’ that are cycled through in order. Then, each of the attack’s ‘Hitboxes’ can be set to appear during a specific window frame.
Grid Indexes can be difficult to get the hang of at first, but are not too complicated in practice. You can check through your template or browse other characters for examples of how attacks can be set up. (Should you wish to copy and use substantial amounts of another workshop character’s attacks, make sure to ask the author first.)
See the full list of Attack Grid Indexes for arranging your attack’s animation frames and behavior.
For more help with setting up attacks, see the following guide: RoA Workshop Guide – Explaining Attack Windows[ko-fi.com]
Sprites
UI sprites and portraits go into the root folder, while all other spites go into the ‘sprites’ folder. You can find a list of the sprites you’ll need to make here[rivalsofaether.com] and here[rivalsofaether.com]. Rivals Workshop supports adding as many additional sprites as you like.
Each sprite needs to be saved as a transparent .PNG. Animations must be in a horizontal strip format, and their filename needs to include the number of frames in the animation. (e.g. an 8-frame idle animation should be titled “idle_strip8.png“).
Rivals character sprites are scaled up to 200% in the game files. Therefore in most cases you’ll need to export your sprites at 200% size as well. Alternatively, you can add this code into ‘init.gml’ to make the game scale up your sprites automatically.
When you want to assign a sprite to a Grid Index (or anything else), use the function sprite_get(“attack_filename_goes_here”). For example, sprite_get(“idle”). Don’t include the “_strip” suffix when typing the sprite’s name.
For editing and creating animations, I recommend Aseprite[www.aseprite.org] (costs $15), Piskel[www.piskelapp.com], GraphicsGale[graphicsgale.com] or Pixelorama[orama-interactive.itch.io]. These software are dedicated for pixel animations, but any image software you are familiar with can also work.
Load.gml and Sprite Offsets
When first adding your sprites into Rivals, you may find that your character is floating above ground or clipping into the floor. To fix this, you will need to change the origin point of your sprites in the script ‘load.gml’. The origin point should be at the bottom center of your character. Use your sprite editor to find the correct coordinate, then assign them in ‘load.gml’ using the function ‘sprite_change_offset()’[rivalsofaether.com].
Assigning Sound Effects
All sounds and music go into the ‘sounds’ folder. Sounds must be in ‘.ogg’ format – ‘.mp3’s and ‘.wav’s won’t work and must be converted first. You can use the free software Audacity[www.audacityteam.org] to do this.
(Open a sound, then select File -> Export -> Export as OGG. )
When you want to assign a custom sound to a Grid Index (or anything else), use the function sound_get(“sound_filename_goes_here”). You can also use the sound_play() function to play a sound manually. Finally, you can set your character’s victory theme with the function set_victory_theme()[rivalsofaether.com].
As well as your own sound effects, you can also use Rivals of Aether’s default SFX List[www.rivalsofaether.com].
Note that when referencing default SFX, you must use the function asset_get(“sound_name”), not sound_get(“sound_name”).
For example, to play Kragg’s rock throw sound effect, you could use sound_play( asset_get(“sfx_kragg_throw”) ).
Advanced Scripting
For any advanced attacks and character behavior, you’ll need to dive into character scripts. Rivals Workshop mods use GML (short for Game Maker Language). It is similar to JavaScript and relatively easy to learn. While this guide won’t teach how to code, we will briefly outline the important Rivals-specific parts.
update.gml runs once every in-game frame (60 times a second), so use this script for passive effects and custom character behavior. Most update.gml scripts work by checking the character’s ‘state’ and ‘state_timer’ variables, and performing different behaviors based on these variables.
(List of Player States)[www.rivalsofaether.com]
attack_update.gml is similar, except it only runs while the character is performing an attack. You should use this script whenever you want to make custom attack behavior. Here, you can check the player’s ‘attack’ variable to see which attack they are performing, and the ‘window’ and ‘window_timer’ variables to check which window and frame of the attack they are currently performing.
(List of Player Attack Indexes)[www.rivalsofaether.com]
Tip: when a character is in ‘hitpause’, the ‘window_timer’ variable will be frozen. Remember to check if (hitpause == false) { } when running any code that should only happen once, e.g. when playing a sound effect.
You can find a full list of character variables here[rivalsofaether.com], character scripts here[www.rivalsofaether.com], and Workshop-compatible GML functions here[www.rivalsofaether.com].
Uploading Your Character
When you’re ready to upload your character, first double-check your config.ini file. Delete the ‘url’ tag if you are uploading a brand new character; leave the ‘url’ tag in if you are updating a character you have already uploaded.
Run Rivals Of Aether, go to Extras -> Steam Workshop, locate your character, and press the Start button / Enter key to upload to the Workshop. Make sure you have no unnecessary files included in your character folder, as they may be deleted upon uploading. I highly recommend backing up your work before uploading to the Workshop.
If your character fails to upload, ensure that you have all of the necessary sprites and files listed at the bottom of the official workshop intro guide[www.rivalsofaether.com].
The “Too much of a good thing.” error message normally means that your character’s ‘preview.png’ file size is too big. Try reducing its dimensions to 960×540, or use a compression service like [link] to shrink it.
When complete, your character’s Steam Workshop page will appear, letting you update the page’s description and images as you wish. Afterwards, simply change the page’s visibility to ‘public’ to publish your character.
Final Tips
- *Make frequent backups.* Spare USBs, Google Drive, Github, or even just upload private builds straight to Workshop – there’s no excuse for not having an extra copy of your work. Several community members have lost weeks of art and code over a failed hard drive, don’t let this happen to you!
- Pressing F5 in Training Mode will reload your character. No need to go back to character select each time.
- Pressing Ctrl+8 in Training Mode will open the debug log. If one of your character’s scripts isn’t running correctly, you may find the error logged there.
- Switch between testing your character and playing the base Rivals cast every few minutes or so. This is the easiest way to check that your character ‘feels’ like a typical Rivals character.
- If you upload a private version of your character for testing, it is a good idea to upload your finished character as a brand new item. Brand-new items have much better chances of appearing on the Steam Workshop front page, so doing this will allow your character to get as much exposure as possible.
- Trying to find a certain software or resource mentioned earlier in this guide? You can find them all (and many more useful links) over on my ko-fi page: RoA List of Tools and Resources[ko-fi.com]
- Finally, consider joining the Rivals Extended Workshop Discord Server[discord.gg] or the Official Rivals Of Aether Discord Server[discord.gg] to share your work and get feedback on your creations, or ask questions about anything not covered in this guide.
Plugs and Disclaimers
Use any advice or software listed here at your own risk. Make sure to only download software from the official sources. I’m not responsible if your pc spontaneously combusts.
I’m Mawral. I’ve been making mods since the start of Rivals Workshop, and thought it would be cool if more people could make them too. You can find my mods here.
I likely won’t respond to this guide’s comments for troubleshooting, unless there’s an issue with the guide itself. I’d recommend seeing my other guides on ko-fi, or joining one of the Discord servers where we would be happy to lend a hand.