CustomStateInjector.Miami (CSI Miami for short) is a plugin designed to allow the injection of custom generation steps during Shadows of Doubt map generation process. It uses attributes for ease of use.
SOD.CustomStateInjector.Miami.dll into the BepInEx/plugins folder of your game directory.To use the plugin in your code, you must call it in your Plugin.Load() function like so
using SODCustomStateInjectorMiami;
using SODCustomStateInjectorMiami.Attributes;
namespace YourNamespace;
[BepInPlugin("com.yourname.yourplugin", "Your Plugin Name", "1.0.0")]
[BepInDependency("Cukeds.CustomStateInjector.Miami")] // Recommended
public class Plugin
{
public override void Load()
{
CustomStateInjector.InjectStates();
}
}
To create a custom state, define a class and annotate it with the CustomStateAttribute. The attribute requires two parameters:
stepName: The name of the custom state.afterStepName: The name of the state after which the custom state should be executed. It can be either a regular step or a custom stepSingle Step Example:
[CustomState("generateClubs", "generateCompanies")]
public static class CustomStateGenerator
{
[GenerateState("generateClubs")]
public static void GenerateClubs()
{
Plugin.Log.LogInfo("Generating clubs...");
}
}
Multiple Step Example
[CustomState("generateClubs", "generateCompanies")]
[CustomState("generateGuards", "generateClubs")]
[CustomState("generateFaces", "generateBlueprints")]
public static class CustomStateGenerator
{
[GenerateState("generateClubs")]
public static void GenerateClubs()
{
Plugin.Log.LogInfo("Generating clubs...");
}
[GenerateState("generateGuards")]
public static void GenerateGuards()
{
Plugin.Log.LogInfo("Generating guards...");
}
[GenerateState("generateFaces")]
public static void GenerateFaces()
{
Plugin.Log.LogInfo("Generating faces...");
}
}
Game's generation steps in the order they appear in the Enum
parsingFile
setupCityBoundary
generateDistricts
generateBlocks
generateDensity
generateBuildings
generatePathfinding
generateBlueprints
generateCompanies
connectRooms
generateCitizens
generateRelationships
gatherData
generateAirDucts
generateEvidence
generateInteriors
prepareCitizens
loadObjects
finalizing
savingData
loadState
preSim
loadComplete
Methods to generate the custom states must be annotated with the GenerateStateAttribute, which takes a single parameter:
stateName: The name of the state to be generated.The plugin automatically registers and validates these methods upon loading.
git checkout -b feature/your-feature-name).git commit -am 'Add some feature').git push origin feature/your-feature-name).Needed dlls are included in the repository, but you may need to update them to the latest version.
This project is licensed under the MIT License - see the LICENSE file for details.