Rivals of Aether

Rivals of Aether

135 ratings
Modding Crash Course
By TheRealFrosti
A handful of functions documented for use in your brain.
3
   
Award
Favorite
Favorited
Unfavorite
Overview
This is meant as a documentation/crash course for programming newbies so they can make cool characters too!
If you can document some functions in particular, feel free to leave a comment with the details, or keep the thread clean by emailing iceball457@gmail.com with your docs. Just be sure to add "Rivals Modding Guide" or something to the topic!
Terminology
Terms used by Players
Frame
A frame is 1/60 of a second (most of the time, can take longer on bad hardware) and is the smallest unit of time measured in most fighting games. In rivals, 4 frames is about a normal jab startup.

Startup
Period of time between the character recieving the attack input and the first hitbox coming out.

Endlag
Period of time between the last hitbox going away and the character being able to move freely again. Airborne characters can still drift left and right during endlag.

Terms used by Dans
Window
Used when defining an attack in code. A "window" is a group of frames that share properties such as invincibility and hitbox data. If you want to use one hitbox at the start of a move and one at the end, you must create a window for each. You should also have a window for startup and a window for endlag, unless you want your moves to be insant.
Adjusting Move Data
Using These Functions
These ♥♥♥♥♥♥♥♥ are used in the "/scripts/attacks/" folder of your mod.
You will need a .gml file for each move a character has (3 tilts, a jab, 5 arials, 4 specials, 4 strongs, plus arial variations or any extras you program yourself)
>Need to know: I'm fairly certain these scripts are run once at the start of a match to load the data into RAM but I don't know for sure.



Set Attack Value
set_attack_value(enum window, enum variable, var value)
Used to set data for the entire attack.


enum move
The move this window is attached to. Listed in all caps and starts with "AT_". Direction is a single letter ["U", "D", "F", "B", "N"] immediately followed by a move type ["TILT", "AIR", "STRONG", "SPECIAL", "ATTACK"]
>DATTACK is dash attack, not down attack
For example:
  • AT_JAB
  • AT_FAIR
  • AT_DSPECIAL


enum variable
The variable that will be changed. Attack variables all star with "AG_".
A few examples of variables:
  • SPRITE: use sprite_get() to load the visual data for the attack.
  • NUM_WINDOWS: How many windows does the attack have?
  • HURTBOX_SPRITE: use sprite_get() to load the collision data for the attack


>To use sprite_get() you'll just need the filename of an image located in the "/sprites/" folder in your mod. Leave off the extension. To load a strip called "jab.png" you may use the following code:

set_attack_value(AT_JAB, AG_SPRITE, sprite_get("jab"));


>Similarly, the hurtbox sprite is loaded like this:

set_attack_value(AT_JAB, AG_HURTBOX_SPRITE, sprite_get("jab_hurt"));



Set Window Value
set_window_value(enum move, int window, enum variable, var value)
Used to set data in a particular window of the attack.


enum move
The move this window is attached to. Listed in all caps and starts with "AT_". Direction is a single letter ["U", "D", "F", "B", "N"] immediately followed by a move type ["TILT", "AIR", "STRONG", "SPECIAL", "ATTACK"]
>Need to know: Does ATTACK refer to any kind of attack or is there a kind of attack I'm unaware of? (Used as AT_DATTACK, never used with a different direction?)
For example:
  • AT_JAB
  • AT_FAIR
  • AT_DSPECIAL


int window
The window in the move to modify. Starts at 1 and goes to the number of windows in the move.
>Need to know: Does an invalid window get ignored, cause a warning, or cause a crash?


enum variable
The variable that will be changed. Window values all seem to start with "AG_WINDOW_".
Here is a brief list of settings for windows:
  • LENGTH: How many frames does this window take up?
  • ANIM_FRAMES: How many frames of animation should be divided over this window's duration?
  • ANIM_FRAME_START: What is the first frame that will be played during this window?
  • HAS_WHIFFLAG: 0 or 1. Whifflag adds extra frames of endlag to the window if none of the hitboxes collide.
  • HAS_SFX: 0 or 1. If 1 then the SFX variable should be set.
  • SFX: instead of an number for the value parameter, insert the asset_get() function with the name of your .ogg file in quotes (leave out the extension)


>If you are dividing a jab animation into three windows, and it has 4 frames of animation (one for startup, two for attacking, and one for endlag), your six set_window_value() calls may look like this

set_window_value(AT_JAB, 1, AG_WINDOW_ANIM_FRAMES, 1);
set_window_value(AT_JAB, 2, AG_WINDOW_ANIM_FRAMES, 2);
set_window_value(AT_JAB, 3, AG_WINDOW_ANIM_FRAMES, 1);

set_window_value(AT_JAB, 1, AG_WINDOW_ANIM_FRAME_START, 0); //This can be left out as the value is 0 by default
set_window_value(AT_JAB, 2, AG_WINDOW_ANIM_FRAME_START, 1);
set_window_value(AT_JAB, 3, AG_WINDOW_ANIM_FRAME_START, 3);


>When defining a sound effect for a window, you will put a function call inside the value spot (where a number would usually go). If I have a sound effect called "hit_strong_1.ogg" in my sounds folder and I want it to play as soon as the move starts I would write

set_window_value(AT_JAB, 1, AG_WINDOW_HAS_SFX,1); //No sound will play if this is set to 0.
set_window_value(AT_JAB, 1, AG_WINDOW_SFX, asset_get("hit_strong_1"));
set_window_value(AT_JAB, 1, AG_WINDOW_SFX_FRAME, 1); //If the window were longer than one frame, you can write this to fine tune when the sound starts playing. Starts at 0.


number value
The value you want to put in that spot.
Work In Progress
This guide will be updated as I get more time to edit it and more understanding of the system.
I will also edit it to be more beginner friendly, but a walkthrough will be done as a separate guide.

Sections Wanted
  • Getting Started: A guide on how to start from scratch and how to start from another character you have downloaded. (Suggested by Kodak Black)
  • Move List: A list of moves as used by the game (AT_JAB, AT_FTILT, etc.)
  • Attack Variables: A list of variables you can set with the set_attack_value() function
  • Window Variables: A list of variables you can set with the set_window_value() function
  • Set Hitbox Value: An overview of the set_hitbox_value() function
  • Hitbox Variables: A list of variables you can set with the set_hitbox_value() function
22 Comments
x 23 Nov, 2024 @ 7:03pm 
pov ur trying to do something even slightly advanced in this game but theres literally no documentation on it anywhere :steamsalty:
NoOneCorpGuy 27 Jul, 2024 @ 5:21am 
Now i'm no ROA player, but what the hell is this
4567pokemaster 19 Jul, 2023 @ 11:15am 
@Mr Fez use the additional hitstun command and set it to like 180.:dip:
Zaku II (Alias WatcherZigzagoon) 25 Jul, 2021 @ 6:41pm 
... I never did succeed in Coding/Programming classes during my school years, so I'm probably not cut out for this :SadOtus:
croissant 11 Oct, 2020 @ 5:49am 
Hello, did someone know if we can change the burn effect color? I 've tried to do so for a skin, but it keep be in the default one.
Sigmund Froid 2 May, 2020 @ 11:49am 
Although I've been in this modding community only for a short time I might be able to help with some of the wanted sections. I might also try working on a getting started section as requested.
TheRealFrosti  [author] 29 Apr, 2020 @ 9:18pm 
I need another author. I have been spending my time in C# recently so I haven't kept up with Rivals modding
DoomBox 28 Apr, 2020 @ 8:30pm 
@Mike Game Maker Studio 2. gml files, GML = Game Maker Language

Also is there going to be a continuation of this or is this a dead thread?
*jrl 21 Jan, 2020 @ 11:30pm 
@Mike don't quote me but I think ROA is programmed in GameMaker Studio 2's "GML"
SpaceCow 19 Jan, 2020 @ 1:37pm 
What language is ROA programmed in?
:steambored: