Bestiary

The Bestiary counts how many monsters of each family a character has killed. Kill milestones unlock permanent bonuses against that family, like Terraria banners: more damage to it, less damage from it, more loot from it, or a chance that a kill counts twice. Finishing every family of a map gives extra EXP on that map.

Players open the Bestiary from the Window Menu (U). It lists every family with its progress. The selected family shows its milestones (green once reached), the bonuses the player has now, the monsters that count and the map mastery it belongs to. A toast pops up on every milestone, in the same spot as the achievement toast (it waits while that one is up). Clicking the toast opens the Bestiary on that family.

File Location#

Data/Plugins/Bestiary/Bestiary.xml

Dependencies#

  • DataServer migration 0004_bestiary.sql (table BestiaryProgress). The 2.0.0 DataServer does not start without it.
  • Client files: fragments/bestiary.xml, fragments/bsttoast.xml, both shells, both skins and the axiom icons skins/axiom/icon/bst_mark.png, menu_bestiary.png, dgn_damage.png, dgn_defense.png, dgn_drop.png.

How It Works#

  • Kill credit: a kill counts for every player who gets EXP from it. Solo, that is every player who damaged the monster; in a party, every party member in EXP range.
  • Bonuses of the same type add up over a family's reached milestones and are capped at Cap.
  • Damage and Guard apply in every fight with that family. Damage also counts for the player's summons.
  • Spoils raises the item drop rate and the zen of that family's kills for the player who did the most damage (the player who gets the loot).
  • Hunter's Mark gives a chance that a kill counts twice toward the Bestiary.
  • Counts are per character and permanent. They save at once when a milestone is reached, every AutosaveSec while they change, with the character save and on logout.

Schema#

<Bestiary AutosaveSec="180" Cap="10">
    <Family Id="3" Name="Skeletons" Monsters="14-16">
        <Milestone Kills="100"   Type="Damage" Value="3"/>
        <Milestone Kills="500"   Type="Guard"  Value="3"/>
        <Milestone Kills="1500"  Type="Spoils" Value="5"/>
        <Milestone Kills="10000" Type="Mark"   Value="10"/>
    </Family>
    <MapBonus Map="4" Families="5,6,7" Exp="5"/>
</Bestiary>

Bestiary#

AttributeDefaultDescription
AutosaveSec180Seconds between saves while counts change (minimum 30). A milestone always saves at once
Cap10Highest % any one bonus type can reach per family

Family#

AttributeDescription
Id1-255. Unique and stable: progress is stored by Id. Never reuse an Id for another family. Removing a family keeps its counts in the database
NameShown in the window, the toast and the unlock message
MonstersMonster.xml indexes: 14,15,16 or ranges 14-16. A monster can belong to one family only (the first one wins, with a warning in the log)

Milestone#

Up to 8 per family, in any order.

AttributeDescription
KillsKill count that unlocks it
TypeDamage (+% damage dealt to the family), Guard (-% damage taken from it), Spoils (+% item drop rate and zen from it) or Mark (% chance a kill counts twice)
ValueThe %

MapBonus#

AttributeDescription
MapMap number
FamiliesFamily Ids, e.g. 5,6,7
Exp+% EXP on that map once every listed family is fully done (its last milestone reached)

GM Commands#

CommandEffect
$bststateYour counts and bonuses per family
$bstset <family id> <kills>Set your count (higher counts unlock milestones as if earned)
$bstresetWipe your counts
$bstreloadReload Bestiary.xml. New families reach the clients on their next login

Common Issues#

  • No Bestiary in the Window Menu. The module is not on the license, Bestiary.xml has no valid family (see the GameServer log), or the client was not updated.
  • Kills do not count. The monster is not in any family, gives no EXP (some event monsters), or the character's counts have not loaded yet (DataServer not updated or migration 0004_bestiary.sql not applied).

Last updated October 6, 2026