Otto Bobblehead Guide

Feb 17th, 2020
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!

Notice: For the time being, codec submissions are closed. I have a big to-do list and I don't want to add to it while I'm this far behind.

What's This?

Otto has a feature where you, Rivals of Aether character developer, can stick a sprite in your character's files. During a match, when Otto hops onto his bike, this sprite will appear as a bobblehead on his HUD dashboard! Here's how you can get this into your character, and in exchange, I will implement a Codec Conversation for your fighter into Otto's code. The following conditions apply:

  • Finished and uploaded characters only
  • No clones of existing Workshop characters, including Sandbert and Guadua
    --- If the original creator has uploaded two or more versions of the same character, I will make the codec work for all of them
    --- Fully resprited “Echo Fighters” such as Cinnamon and b̴̢͜͞i̷̧̡͟͠ŕ̶̛̀ḑ̶̴̡͏ ̸̀͢͝҉g̸͝ų́̕͢y̢̡͘͜ are fair game, though (if by the original creator)
  • The bobblehead must not have mixels (i.e. it must be drawn at the correct resolution; see instructions below)
  • You must DM ME ON DISCORD to get a codec; I can't exactly keep up with bobbles outside of DMs

(If any codecs break these rules, it’s because I agreed to it before making the rule, or I just forgot lol)

Sprite Creation

Here is the template bobblehead sprite:

Note that, just like any regular character sprite, this sprite is at half resolution. As such, you should downscale to 50% size, make your edits, upscale to 200% (original size), and immediately save it for use ingame. If you edit it at the full, large size, you are likely to get the wrong pixel resolution.

This sprite may be made into a sprite strip, just like any other sprite. If you do this, Otto's code will cause the bobblehead sprite to animate in a loop.

If you'd like examples of some bobbleheads, Otto's sprite folder contains 17 bobbleheads used for the base cast, Sandbert, Guadua, and the mirror matchup.

Optionally, you may create a sprite for the bobblehead's body to use, with this template:

You do not need to offset these sprites in load.gml, as the default offset of 0,0 is correct. If you expand the canvas at the top or left, however, you must adjust the offset accordingly. E.g. if you expand it 10 left and 6 up put in load.gml the line sprite_change_offset("my_bobblehead_sprite", 10, 6);.


In init.gml, you simply set a variable containing your bobblehead sprite.
otto_bobblehead_sprite = sprite_get("my_bobblehead_sprite");

If you choose to use the bobblehead body, add this line of code as well:
otto_bobblehead_body_sprite = sprite_get("my_bobblehead_body_sprite");

That's it! If this code does not work, ensure that your other init.gml code is not causing an error; try putting the Otto code at the top of the page. If it still fails to work, hit me up on Discord.

Another thing to note is that Otto loads the bobblehead newly each time he gets onto his bike, so you can change it mid-match. (For example, Kris randomizes his so that each time, it's a different bobblehead)


Stored within Otto is a variable called bobble_id which, once the bobblehead is loaded, stores your character's ID. So, you could do something like this (in update.gml for example):

var do_otto_interaction = false; //sets a variable that can be accessed from inside the with statement

    if ("i_am_otto_the_billiard_biker" in self && bobble_id == && bike){ //bike is the variable for if otto is on his bike
        do_otto_interaction = true;

if do_otto_interaction{
    //your code here

...Just in case you wanted to do some kind of interaction for when Otto accesses your character's bobblehead.

If you want to do something only at the moment Otto boards the bike... you'll need to add that logic in yourself. Soz

Also, Otto's variables called bobblehead_sprite and bobblebody_sprite store the sprite_get()s of the currently drawn bobblehead.

RAW Paste Data