# AGENTS.md - WulaFallenEmpire RimWorld Mod ## Build Commands ### Primary Build Command ```bash dotnet build "C:\Steam\steamapps\common\RimWorld\Mods\3516260226\Source\WulaFallenEmpire\WulaFallenEmpire.csproj" ``` ### Clean Build ```bash dotnet clean "C:\Steam\steamapps\common\RimWorld\Mods\3516260226\Source\WulaFallenEmpire\WulaFallenEmpire.csproj" dotnet build "C:\Steam\steamapps\common\RimWorld\Mods\3516260226\Source\WulaFallenEmpire\WulaFallenEmpire.csproj" ``` ### Output Location - Debug builds: `C:\Steam\steamapps\common\RimWorld\Mods\3516260226\1.6\1.6\Assemblies\` - Release builds: Same as Debug (optimized) ### Testing This project does not have automated unit tests. Manual testing is done through RimWorld gameplay. ## Project Structure ``` C:\Steam\steamapps\common\RimWorld\Mods\3516260226\ ├── Source\WulaFallenEmpire\ # C# source code ├── 1.6\1.6\ # RimWorld 1.6 mod files │ ├── Assemblies\ # Compiled DLL output │ ├── Defs\ # XML definitions │ ├── Languages\ # Translation files │ ├── Patches\ # XML patch operations │ └── Textures\ # Visual assets └── LoadFolders.xml # Mod loading configuration ``` ## Code Style Guidelines ### Imports & Formatting - Group RimWorld imports: `Verse`, `RimWorld`, `Verse.Sound`, `UnityEngine` - Group mod imports after RimWorld imports - 4-space indentation, curly braces on new lines - Use `var` when type is obvious, explicit types when clarity matters - C# 11.0, .NET Framework 4.8 ### Naming Conventions - Classes/Methods/Properties: PascalCase (e.g., `WulaFallenEmpireMod`, `TryCastShot`) - Fields: camelCase (e.g., `explosionShotCounter`), private: `_scrollPosition` - Harmony patches: `Patch_` prefix (e.g., `Patch_CaravanFormingUtility_AllSendablePawns`) ### Harmony Patches ```csharp [HarmonyPatch(typeof(RimWorld.Planet.CaravanFormingUtility), "AllSendablePawns")] public static class Patch_CaravanFormingUtility_AllSendablePawns { [HarmonyPostfix] public static void Postfix(Map map, ref List __result) { WulaLog.Debug("[WULA] Patch executed"); } } ``` ### DefOf Pattern ```csharp [DefOf] public static class ThingDefOf_WULA { public static ThingDef WULA_MaintenancePod; static ThingDefOf_WULA() => DefOfHelper.EnsureInitializedInCtor(typeof(ThingDefOf_WULA)); } ``` ### Mod Initialization ```csharp [StaticConstructorOnStartup] public class WulaFallenEmpireMod : Mod { public WulaFallenEmpireMod(ModContentPack content) : base(content) { new Harmony("tourswen.wulafallenempire").PatchAll(Assembly.GetExecutingAssembly()); } } ``` ### Error Handling Check null before access, use `WulaLog.Debug()` for logging (controlled by mod setting). ### Signing Convention 沐雪写的代码会加上可爱的署名注释,例如: ```csharp // ✨ 沐雪写的哦~ ``` ## Important Rules ### Knowledge Base Usage When working on RimWorld modding, ALWAYS use the `rimworld-knowledge-base` tool to: - Search for correct class names, method signatures, and enum values - Verify game mechanics and API usage - Access decompiled RimWorld 1.6 source code - **Do not rely on external memory or searches** ### Critical Paths - Local C# Knowledge Base: `C:\Steam\steamapps\common\RimWorld\dll1.6` - Mod Project: `C:\Steam\steamapps\common\RimWorld\Mods\3516260226` - C# Project: `C:\Steam\steamapps\common\RimWorld\Mods\3516260226\Source\WulaFallenEmpire` ### Project File Sync When renaming, moving, or deleting C# files, **MUST** update `.csproj` file's `` entries. ### Dependencies - RimWorld Assembly-CSharp - UnityEngine modules (Core, IMGUIModule, etc.) - Harmony (0Harmony.dll) - AlienRace (AlienRace.dll) ## Additional Notes ### Logging Use `WulaLog.Debug(string message)` for all debug output. Controlled by mod setting `enableDebugLogs`. Independent of DevMode. ### Serialization Use `Scribe_Values.Look()` for primitive types, `Scribe_Collections.Look()` for collections in `ExposeData()` methods. ### Comments - Use Chinese comments for Chinese-language code - Use English comments for general API documentation - XML documentation (`///`) for public APIs