Custom buddies are structured the same way as custom characters, with config.ini and the following folders: /sprites, /scripts, /sounds. You can read more about this structure on the introduction page, use a blank buddy template, or reference our example buddy Sandbert Jr.
The core buddy folder should also include:
- icon.png [15x15px] – used for the in-game buddies sub-menu
- preview.png [any size, but 16:9 aspect ratio, 960×540 recommended] – used in the preview window on the Steam Workshop website
A buddy can only execute load.gml and update.gml custom scripts.
Buddies’ animation names also differ from the ones used by characters.
By default a buddy is not affected by its owner’s custom colors. However, you can define a list of characters you want to affect your buddy’s colors by calling add_compatiable_urls(). The function accepts both urls of published workshop characters and ▼ default character indexes. If you want the buddy to be affected by any character’s custom colors, pass all to the function.
Example, called from load.gml:
// this buddy can only borrow Zetterburn's and Sandbert's custom colors:
add_compatiable_urls( CH_ZETTERBURN, 1865940669 );
// this buddy will borrow any character's custom colors (including both workshop and default ones):
add_compatiable_urls( all );
Variables
These are all the variables you can access for pet_obj:
| Variable | Default | Description |
|---|---|---|
| type | 0 | The type of buddy 0 = grounded 1 = flying |
| can_switch_type | false | Whether the buddy will automatically switch type after going through the wait animation (in the air, the buddy will fly toward their landing point, then go into the wait animation) |
| idle_spr | sprite_get( “idle” ) | The sprite to loop when idle |
| run_spr | sprite_get( “run” ) | The sprite to loop when running |
| turn_spr | sprite_get( “turn” ) | The sprite to play when turning around (should turn from facing left to right) |
| ledge_spr | sprite_get( “ledge” ) | The sprite to play when idling at ledge |
| wait_spr | sprite_get( “wait” ) | The sprite to play when idling normally |
| taunt_spr | sprite_get( “taunt” ) | The sprite to play when taunting |
| pet_w | 30 | The approximate width of the buddy, in pixels |
| run_speed | 3 | The speed of the run state, in pixels per frame |
| max_run_dist | 200 | The distance you can get away from the buddy before it starts to run toward you. Should be a fair bit more than double pet_w to avoid stuttering |
| state | The current state of the buddy: “idle” “run” “taunt” |
|
| teetering | If the buddy is in their ledge animation. Only relevant if state == “idle” | |
| waiting | If the buddy is in their wait animation. Only relevant if state == “idle” | |
| state_timer | The number of frames since starting the current state. This value is also reset when starting the ledge or wait animations |
Extra Variables
In case can_switch_type is set to true, you will also need to initialize the following variables in load.gml:
| Variable | Description |
|---|---|
| grnd_idle_spr | The sprite to loop when idle on ground |
| grnd_run_spr | The sprite to loop when running on ground |
| grnd_turn_spr | The sprite to play when turning on ground. Should turn from facing left to right |
| grnd_wait_spr | The sprite to play when idling on ground. Should transition from grnd_idle_spr to air_idle_spr) |
| grnd_taunt_spr | The sprite to play when taunting on ground |
| air_idle_spr | The sprite to loop when idle in the air |
| air_run_spr | The sprite to loop when moving in the air |
| air_turn_spr | The sprite to play when turning in the air. Should turn from facing left to right |
| air_wait_spr | The sprite to play when idling in the air. Should transition from air_idle_spr to grnd_idle_spr) |
| air_taunt_spr | The sprite to play when taunting in the air |


