RimWorld

RimWorld

MIM - WH40k Core
Showing 11-20 of 501 entries
< 1  2  3  4 ... 51 >
Update: 4 Aug @ 10:28am

# 🛠 August 4th Update – *Asuryani Path System v0.8*

### 💬 Developer-Focused Changelog & Commentary

---

## 🌌 Overview

This update marks a major iteration in the **Asuryani Path System**, expanding it into a fully modular, lore-aligned specialization engine for Aeldari pawns.
The core of the update introduces a **Shadow & White Seer expansion**, a fully-featured **Pathless damnation fallback**, major adjustments to **path transition eligibility**, and the **Slaneesh corruption engine** via `HediffComp_SlaaneshWhispers`.

---

## 🧱 Architectural Refactors

### 1. **TransitionEntry Decoupling (for Starting Paths)**

We've removed all dependency on `AsuryaniPathTransitionEntry` for starting path selection.
Instead, path assignment now directly pulls from:

```csharp
DefDatabase<AsuryaniPathDef>.AllDefs
.Where(def =>
def.isStartingPath &&
(!def.isFemaleOnly || pawn.gender == Gender.Female) &&
(!def.isMaleOnly || pawn.gender == Gender.Male)
)
.ToList();
```

➡️ This eliminates unnecessary overhead and simplifies extension via patching.
➡️ Use `Utility_AsuryaniPath.FindRandomStartingPath(pawn)` to assign an initial discipline.

---

### 2. **Pathless Lockout State (`isPathless`)**

When a pawn becomes "pathless" (e.g. via failed exit from `Consumed` or `Novice` state), they now enter a hard-coded **discipline lockout**:

* `GetGizmos()` is fully disabled
* `TickInterval()` aborts all processing
* No further path transitions are offered
* Pawn cannot re-enter a Path via fallback

```csharp
if (isPathless)
{
yield break; // in GetGizmos
}
```

This state is **intended to be semi-permanent** and dramatically raises the stakes for poor Path management.

---

### 3. **Slaanesh Corruption: `HediffComp_SlaaneshWhispers`**

A new `HediffComp` attached to `Hediff_AsuryaniPath` triggers **chaos-themed degeneration** once a pawn has lost their discipline:

* Daily 5% chance to trigger
* Effects include:

* Random `ThoughtDef` ("She Who Thirsts"-themed despair)
* Forced mental breaks
* Application of chaos-aligned `HediffDef`
* Mutation via `GeneDef`

All are configured via `HediffCompProperties_SlaaneshWhispers`:

```xml
<dailyTriggerChance>0.05</dailyTriggerChance>
<causedThoughts>
<li>EMAE_SlaaneshWhispered</li>
</causedThoughts>
...
```

➡️ Designed to be extended with modded thoughts, mental states, mutations, etc.

---

## 🧠 Behavior + Systems

### 1. **New Immersion Falloff Logic (`TryHandleEarlyExitFallback`)**

Refactored to allow variable resolution when pawns prematurely leave a Path:

| From | Fallback | Chance |
| ---------- | -------------- | ------------------------------ |
| `Consumed` | Damnation Path | `props.damnationChance + 0.5f` |
| 〃 | Outcast Path | `props.outcastChance - 0.5f` |
| 〃 | Fully Pathless | `5%` fixed |
| `Novice` | Outcast Path | `props.outcastChance` |
| 〃 | Damnation Path | `props.damnationChance` |
| 〃 | Fully Pathless | `5%` fixed |

This creates a **rare but meaningful possibility of absolute breakdown**, triggering the Slaanesh corruption path.

---

### 2. **Score-Based Path Transition Selection**

Introduced `TryMatchAndScore()` inside `AsuryaniPathTransitionEntry`:

```csharp
public bool TryMatchAndScore(Pawn pawn, out int score)
{
score = 1;
score += requiredSkills.Sum(skill => pawn.skills?.GetSkill(skill.skill)?.Level ?? 0);
score += requiredTraits.Count * 10;
}
```

* Traits give heavier weight (10 pts each)
* Skills are additive
* `MeetsRequirements()` is evaluated before scoring
* This is used in:

* `OfferNextPathChoice(pawn)`
* Could be used in future UI preview

➡️ You can mod your own transitions with implicit bias by manipulating traits/skills.

---

## 💀 Psychological Degeneration: `ThoughtDef` – “She Who Thirsts”

### New thought for Slaanesh corruption:

```xml
<ThoughtDef Name="EMAE_SlaaneshWhispered">
<label>the whisper</label>
<description>
It doesn't whisper.
It unfolds — inside my thoughts, behind my eyes.
She Who Thirsts has found a place to drink.
And I no longer know what is mine.
</description>
</ThoughtDef>
```

* This is a permanent memory
* Designed for madness mood debuffs
* Can be triggered by comp or scripted event

➡️ You can add more `ThoughtDef`s and plug into `causedThoughts` in the comp XML.

---

## 📘 Lore Consistency Improvements

### 🔮 White Seer, Shadow Seer, and Way Seer added

All three now have fully designed:

* Base descriptions
* Immersion progression titles
* Fallback/Exarch/Farseer logic
* Entry-level trait recommendations
* Path-defining background text

➡️ These are **non-Warrior psychic disciplines** with distinct utility and personality.

---

## ⚖️ Balance Notes

* All full Path loss cases (`MarkPathAsLost`) are now capped to **5% chance**, to reduce over-punishment
* `FallbackPath` is still `"EMAE_PathOfTheOutcast_Ranger"` and is only triggered if *no valid starting paths* are found
* Trait/Skill requirements for transitions now default to OR logic, not AND, to increase build flexibility
* DisallowedTraits/DisallowedSkills only checked if requiredTraits/Skills are not met

---

## 📦 Extensibility

### New `HediffComp_SlaaneshWhispers` can be reused in:

* Generic chaos corruption systems
* Mental instability frameworks
* Post-mortem resurrection mechanics
* Psychic overload mechanics for non-Aeldari

Can be easily patched into other Hediffs.
Supports full XML configuration without needing C# edits.

---

## 🧪 Debug Features

* All logs now respect `debugMode` flag on paths and comps
* You can force `MarkPathAsLost()` to test Pathless state
* Supports `Log.Message` tracing during transition/assignment

---

## ⏭️ Coming Soon

* UI for choosing fallback paths interactively
* Pathless mental breakdown chain events
* Damnation alignment trees (Khaine / Slaanesh split)
* Tied-in Harlequin disciplines (Shadowseer fully implemented, still gated)

---

## 🧾 Patch Note Footer

If you're a modder and want to extend this system:

* Add your own `AsuryaniPathDef` with `isStartingPath = true`
* You don't need a TransitionEntry for starting paths anymore
* Add `HediffComp_SlaaneshWhispers` to any path-loss state
* Use `entryConditions` to gate paths behind Ideology, Traits, etc.

Want more modularity? Ask for hooks — the architecture is growing cleanly.

Update: 3 Aug @ 10:19am

1.6: New code set - Asuryani Path related code sets added.
1.6: Code updated - Spirit stone now stores Asuryani path as a part of information stored.

Update: 2 Aug @ 12:14am

Fixed Royal title related tags to work properly for all royal titles.

Update: 1 Aug @ 9:44pm

1.6: Refactored namespaces for sub libraries. Now Necron, GenestealerCult, Orks, as well as Aeldari (to be added) uses their own, independent namespaces.

Update: 1 Aug @ 6:37am

1.5 / 1.6: All servitor chip now nullifying any terror related thoughts, if Ideology is enabled.

Update: 31 Jul @ 8:23am

1.6: Fixed Psycast Living Lighting cases error loop.

Update: 28 Jul @ 9:59am

1.4/1.5/1.6: NameDB / Rulepack updated for Aeldari

Update: 25 Jul @ 6:32am

1.6: Apparel abstracts updated to properly applying mod extensions.

Update: 21 Jul @ 12:46am

1.6: Mod Option Added: Disable body size resizing mechanism of this mod when RimDark is enabled. Default is false, so turn it on at your own risk. This may causes side effect of reducing size of other factional pawns, like genestealer.

This function was added because of complaint from Hollenwülf-TTV

Update: 20 Jul @ 7:12pm

1.6: Fixed vanilla Odyssey starting faction always hostile to mod-oriented factions.