Make, copy, import, export, edit and delete the fight profiles your bots play, on the Fight Profiles page, with the default profile, Idle, the profiles packages ship and profiles that extend another.
A fight profile tells the fight module how a bot plays: the role the character takes, the distance it fights at, which spells it prefers, which monsters it hits first, what it does when its life runs low. Each bot plays one profile, chosen on its Fight tab (The fight module), and one profile can serve as many bots as you like.
You don't need a profile to start. The default profile adapts to any character on its own, and a profile only needs the settings you want to change. A few lines, such as a role, a range and elements, already make a profile that adapts to any character of that kind; everything else is for making it yours.
Where profiles come from
| Profile | What it is | Can you change it? |
|---|---|---|
| The default profile | Every setting at its default. It isn't in the list: a bot plays it when its Profile is empty. | No: it's what every setting falls back to. |
| Idle, Built-in | Takes part in the fight and passes every turn after 5 seconds. Every part off, one rule. | No. Copy it to change the delay or switch parts back on. |
| Yours | Profiles you made, copied or imported. Each is a file in Asterobot's data folder. | Yes. |
| A package's, Package | Shipped by a package you installed, named after it, such as @some-author:fighters/fire-cra. |
No. Copy it to change it. |
@asterobot:base, Asterobot's official package, ships 24 profiles ready to play: see Ready-made profiles in base.
The Fight Profiles page
Open Fight Profiles in Asteroboard's menu. The page lists every profile: Idle first, then yours by name, then those of your packages.
| Column | What it shows |
|---|---|
| Name | The profile's name, the one a bot's Profile list shows. |
| Source | Yours, Built-in or Package. |
| Status | Ready, Can't be played when it has an error, or how many warnings it has. Hover over it to read them. |
The filter above the table finds a profile by name. Each row has a menu:
| Item | What it does |
|---|---|
| Edit | Opens your profile in the editor. View for Idle and a package's, which open read-only. |
| Copy | Saves a copy under a name of your own, then opens it in the editor. |
| Export | Downloads the profile as a .json file. |
| Delete | Deletes one of your profiles, after asking. Idle and a package's can't be deleted. |
The page stays current on its own when a profile is saved, imported or deleted, and when a package is installed or removed.
Make a profile
- Click New profile.
- Type a Name, then click Create.
The editor opens on the new profile. Every setting starts at its default, so it plays like a bot with no profile until you change something.
A name is also the profile's file name: it can't be empty, start with @, or contain a / or a character a file name can't hold. The dialog then shows fightprofiles: a profile's name can't be empty, start with @, or hold / or a character a file name can't. A name another profile has gives fightprofiles: a profile already has this name.
Copy a profile
Copy in a row's menu, or in the editor, opens a dialog with the name filled in as the original's followed by copy. Change it if you like, then click Copy. The copy is yours, with every setting the original had.
Copying is how you change Idle or a package's profile: the copy is a profile of yours that you can edit. To keep following a package's profile as it's updated while changing a few settings, extend it instead (see Extend another profile).
Share profiles
Export downloads the profile exactly as it's stored, as a file named after the profile, such as fire-cra.json. Characters other than letters, digits, ., - and _ become - in the file name.
To use a profile someone shared:
- Click Import.
- Pick the file under Profile file, or paste the JSON under Profile JSON. Picking a file fills in the text, so what you see is what's imported.
- Click Import.
The profile joins yours under the name it carries. When you already have a profile with that name, the dialog asks "You already have a profile named ... Replace it with this one?", and Replace it overwrites yours. Text that isn't JSON gives "This isn't valid JSON:" with the reason, and JSON that isn't an object gives "A profile is a JSON object." A profile Asterobot can't accept is refused with the reason, as when you save it.
A profile names spells, monsters and states by their game ids, which are the same for everyone playing the same game version, so a shared profile plays the same on another Asterobot.
Delete a profile
Delete asks first: "... will be deleted for good. Bots set to it will play the default profile." Bots set to it keep its name and play the default profile until you give them another one.
The editor
The editor shows the profile twice: the form on the left, section by section, and its JSON on the right. Both are live. A change in the form shows in the JSON at once, and JSON you type fills the form as soon as it reads as a profile.
The sections are General, Archetype, Play, Spells, Opening, Monsters, Rules and Weights. Profile settings describes every field, and Rules and conditions the rules.
- Empty means default. A field you leave empty shows Default, or Inherited: with the value the extended profile gives it. The reset button next to a field you set empties it again.
- Picking spells. Spells are chosen in Choose a spell: pick a class to list its spells, each beside its variant, with their AP cost, range and icon, followed by the spells of the summons those spells bring and the spells every class can learn. Type to filter them, or to search every other spell of the game by name.
- Picking monsters, races and states. Type a few letters of the name, in the game's language, and pick it in the list. Monsters and states show their icon.
- Saving. Save is greyed out until something changes. Leaving the page with unsaved changes asks "Leave without saving your changes?" first.
- Renaming. Changing the Name in General and saving renames the profile: every bot playing it, and every profile of yours extending it, follows the new name.
- What the form doesn't show. Some settings are written in the JSON only, such as an opening spell aimed at a target or a fighter targeted by its id in a rule. The form shows them as they're written and keeps them. Settings it doesn't know, written for a newer Asterobot, are kept too.
Names and icons come from the game data of the game version your Asterobot is made for, or of the newest version you extracted when that one isn't, in the language you use Asteroboard in. Icons appear once that version's game data has been extracted with them: after updating Asterobot, extract it again on the Game Manager page (Extract game data).
Errors and warnings
When you save, Asterobot checks the profile. A value it can't use stops the save, and the editor shows the reason with the field it's about, such as:
fight: malformed profile: spells[0].use: "sometimes" is not one of prefer, normal, avoid, never
The field is written the way the JSON is: spells[0] is the first entry of Spells. Fix it in the form or the JSON, and save again.
Other things don't stop it from playing, and show as warnings above the form, under Worth knowing:
| Warning | What it means |
|---|---|
spell 12345: not in the game data, ignored |
An id the newest game version you installed doesn't have. The same for monster, monster race and state. |
rules[0].when.self.something: no such subject: never holds |
A condition that this Asterobot doesn't know. It never holds. |
weights.something: no such scoring term: ignored |
A weight with an unknown name. |
version: 2 is newer than this module's 1: what it adds is ignored |
A profile written for a newer Asterobot. |
extends: no profile has this name: its own fields play over the default profile |
The profile it extends is gone. |
name: "...", but its file is "....json": it plays as "..." |
A file renamed by hand: the file's name wins. |
A profile that can't be played at all, such as a file that isn't JSON or one whose extends itself extends another profile, shows Can't be played as it is with the reason. A bot set to it plays the default profile.
Extend another profile
Extends, in General, makes a profile start from another one: it takes every setting of that profile, and changes only the ones it sets itself. It's the way to follow a package's profile, or one of your own, and keep a few changes on top:
| What the profile sets | What it plays |
|---|---|
| A setting such as Role or Risk | Its own value, instead of the extended profile's. |
| An object, such as Parts | Field by field: the fields it sets replace the extended profile's, the others stay. |
| Spells and Monsters | The extended profile's entries, then its own. An entry for a spell or a monster the extended profile already has replaces that entry. |
| Rules | The extended profile's rules, then its own. |
| Weights | The extended profile's weights, with its own replacing them by name. |
The editor shows the inherited values greyed out in each field, and the inherited entries of a list folded above it ("... inherited entries").
When the extended profile changes, for example because its package was updated, every profile extending it follows. When it's gone, the profile plays its own settings over the default profile and says so in a warning. You can extend Idle, one of your profiles or a package's, but only one level deep: extending a profile that extends another one is refused with extends: "..." extends another profile, and one level is all.
Profiles from packages
A package can ship fight profiles alongside its script. Once the package is installed, its profiles show on the page with the Package source, named <package>/<name>, and any bot can play them, whether or not it plays that package.
| Question | Answer |
|---|---|
| Which version plays? | The newest version of the package installed, for every bot. To keep a profile as it is whatever the package's updates do, copy it into your own profiles with Copy. |
| What happens when the package is updated? | Its profiles are updated with it, and the profiles extending them follow. |
| And when it's removed? | Bots set to one of its profiles play the default profile, and their console says why. |
Package authors will find how to ship profiles in Ship fight profiles.
Ready-made profiles in base
@asterobot:base, Asterobot's official package, ships 24 profiles ready to play. Install it and they're on the page and in every bot's Profile list. None of them names a spell, so each plays any class at any level, with the character's own spells and weapon. What a profile doesn't set stays the default profile's: one whose purpose isn't a role leaves the role to the class, so a Feca still supports and an Eniripsa still heals. View shows what each one sets.
| Profile | How it fights |
|---|---|
@asterobot:base/careful |
Never ends a turn where the enemies can hurt it badly, and hides once its life is low |
@asterobot:base/all-in |
Deals as much damage as it can and ignores the danger, death included |
@asterobot:base/melee-charge |
Starts close, closes in on the nearest enemy and hits in contact |
@asterobot:base/ranged-kite |
Starts far, hits from afar, then steps out of the enemies' reach |
@asterobot:base/ranged-hide |
Starts far, hits from afar, then ends its turn out of the enemies' sight |
@asterobot:base/hold-position |
Moves only to reach a cast, so the enemies beside it stay locked |
@asterobot:base/finish-the-weakest |
Kills the enemy with the least life left first |
@asterobot:base/kill-the-most-dangerous |
Kills first the enemy that can hurt it the most where it stands |
@asterobot:base/healer |
Heals the weakest ally first, then itself, and hits when nobody needs healing |
@asterobot:base/bodyguard |
Keeps its allies safe: shields and boosts the weakest, and stands where it shelters them |
@asterobot:base/support |
Weakens the enemies and boosts its allies before hitting |
@asterobot:base/tank |
Goes in front, takes the hits for the team and locks the enemies in contact |
@asterobot:base/crowd-control |
Pushes the enemies, takes their AP and MP and puts them in states before hitting them |
@asterobot:base/summoner |
Summons whenever it can and stays behind its summons, out of the enemies' sight |
@asterobot:base/trapper |
Lays traps and glyphs where the enemies will walk, then keeps out of their reach |
@asterobot:base/earth-strength |
Prefers its earth spells, for a strength build |
@asterobot:base/fire-intelligence |
Prefers its fire spells, for an intelligence build |
@asterobot:base/water-chance |
Prefers its water spells, for a chance build |
@asterobot:base/air-agility |
Prefers its air spells, for an agility build |
@asterobot:base/weapon-fighter |
Hits with its weapon whenever it can, in contact |
@asterobot:base/spells-only |
Never hits with the weapon or bare hands: its AP go to its spells |
@asterobot:base/team-player |
Never hurts an ally with its areas, and heals and boosts its allies whenever it helps |
@asterobot:base/carried |
A low level in a strong group: starts far, stays out of danger and sight, and hits only when it's safe |
@asterobot:base/boss-fight |
For bosses and dungeons: careful, kills the most dangerous enemy first and keeps the group safe |
To change one, copy it into your own profiles, or make a profile that extends it and sets only what differs, so it keeps following base's updates (Extend another profile). Their names don't change from one version of base to the next, so a bot set to one keeps it.
Profile files
Your profiles are files in the fightprofiles folder of Asterobot's data folder (Files and folders), one <name>.json file each, in the same JSON the editor shows.
Asterobot reads a profile's file each time it's used, so you can also edit them by hand: a change plays from the next fight, and shows on the page the next time it loads. A file that isn't a readable profile is listed with its error. Copying a .json file into the folder is the same as importing it.
Next, Profile settings describes every setting of a profile.