LethalBestiary
A library for registering new monsters which brings a bunch of useful methods for monsters!
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100Evaisa-HookGenPatcher
Generates MonoMod.RuntimeDetour.HookGen's MMHOOK file during the BepInEx preloader phase.
Preferred version: 0.0.5README
Xilef992-LethalBestiary-LC
This is a lighweight API to load enemy which relies on Lethal Lib, I do not appropriate myself any of the methods and classes given from this API, they belong to their original creator and are only seperated from the main code in the objective of making a better supported API for monster implementation. Right now this API only helps you adding monster and doesn't provide any functions, but in the future, I will be adding a bunch of different methods that are going to be useful to create monsters. This API is meant to be lightweight making it less likely to break with future updates Join me on my Discord if you have any questions! Or ask them on the LethalCompany Modding Server
Usage :
Adding as dependency :
First, you will need to add LethalBestiary as a dependecy of your solution. The way to do it is different for both VisualStudio and rider so follow those documentations for those to IDE :
For Rider, simply right click your solutions dependency, click on add dependecy. On the popup window, click on add From and then reference LethalBestiary.dll
CAREFUL STEP : REMOVING UNSUSED DEPENDENCY
This is very important, if you are using LethalLib or LethalLevelLoader and you use other stuff of those dependencies, it will be important to make sure you are referencing the RIGHT dependency for our 3 api uses the same naming convention. If you only want to add enemy, use this api, if you want to add more stuff than enemy, I'd suggest using Lethal Level Loader once it updates or the current LethalLib.
Imports
In your Plugin.cs, add the following Imports :
using LethalBestiary.Modules;
Loading order
It will be important for this API to load before your mod else it will break, so you will have to add the following line above your PluginClass so that it will always load before yours! Here is an example :
namespace NightmareFoxyLC {
//Plugin BepInEx declaration
[BepInPlugin(ModGUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)]
//LINE TO ADD! ModGUID is a reference your mod GUID
[BepInDependency(LethalBestiary.Plugin.ModGUID)]
public class Plugin : BaseUnityPlugin {
//PluginOther stuff
Implementing your enemy!
Now to the main dishes, Here is how you implement your enemy into the game registry! In your Awake() function of your Plugin.cs, the following must be present :
InitializeNetworkBehaviours();
NetworkPrefabs.RegisterNetworkPrefab(FoxyEnemy.enemyPrefab);
Enemies.RegisterEnemy(EnemyType, RarityInt, Levels.LevelTypes.All, Enemies.SpawnType.Default, EnemyTerminalNodeTN, EnemyTerminalKeywordTk);
What are those you may ask? Let me break it down for you!
InitializeNetworkBehaviours();
This must be called before we register the next step. Don't give it any parameters, leave it as is!
NetworkPrefabs.RegisterNetworkPrefab(EnemyType.enemyPrefab);
We register our prefab on the network so that there will be good syncing, missing this step will result in your enemy not despawning for some players, the enemy killing people who don't see him and worse.
What I am giving to this method is a reference to my enemyPrefab connected to my enemy type.
As you may know, I got my enemy type from
var EnemyType = ModAssetsBundle.LoadAsset<EnemyType>("NameOfEemyTypeAssetInAssetBundle");
And this EnemyType holds a reference to my prefab!
Enemies.RegisterEnemy(EnemyType, RarityInt, Levels.LevelTypes.All, Enemies.SpawnType.Default, EnemyTerminalNodeTN, EnemyTerminalKeywordTk);
Here we are at the most important step! Registering our enemy! FINALY!!! Ok, so here are the parameters :
- EnemyType : This is your enemy type you got from your Asset Bundle
- RarityInt : This is how rare your enemy is! This is multiplied by your enemy Spawning logarithm you made inside unity
- Levels.LevelTypes.All : This is which moon your enemy can spawn. it is an enum included with the library and you can choose a specific moon
Levels.LevelTypes.AssuranceLevel
, modded moons only :Levels.LevelTypes.Modded
, vanilla moons only :Levels.LevelTypes.Vanilla
or all moons as I did earlierLevels.LevelTypes.All
- Enemies.SpawnType.Default : This is where your enemy can spawn, it is an enum included with the library. Here are the three choices : Inside the faculty :
Enemies.SpawnType.Default
, outside :Enemies.SpawnType.Outside
or like pacive monsters (outside but with a twist of not being considered an enemy) :Enemies.SpawnType.Daytime
- TerminalNode : Reference to your AssetBundles terminal node which you got with
ModAssets.LoadAsset<TerminalNode>("MonsterTN");
You have to create it and add it to your bundle! - TerminalKeyword : Reference to your AssetBundles terminal node which you got with
ModAssets.LoadAsset<TerminalNode>("MonsterTK");
You have to create it and add it to your bundle!\
Playing with your enemy!
Your enemy is now in the game! Have fun! You will have to have this package as a dependency to your mod tho...
Other useful function
The AddEnemyToLevel(SpawnableEnemy spawnableEnemy, SelectableLevel level)
you can add your enemy to a specific level.