Skip to content

Example pack: The Ridge Raiders

A complete small mod: a new raider faction that hates survivors, a raider rifleman and brawler that spawn in the wasteland, and a deserter you can hire away from them once they trust you. Copy it, rename the ridge prefix, and change what you like.

DSD_NPCUtilities_RidgeRaiders/
  ModInfo.xml
  Config/
    entityclasses.xml
    entitygroups.xml
    npc.xml
    dialogs.xml
    Localization.txt
  NPCUtilities/
    factions.xml
<configs>
  <append xpath="/entity_classes">
    <!-- shared look and faction -->
    <entity_class name="ridgeRaiderBase" extends="dsdNpcTemplate">
      <property name="Mesh" value="#@modfolder(DSD_NPCUtilities):Resources/dsdnpcutilities.unity3d?dsdNpcSurvivor"/>
      <property name="PhysicsBody" value="dsdNpcSurvivor"/>
      <property name="NPCID" value="ridgeRaider"/>
      <property name="Faction" value="ridgeRaiders"/>
      <property name="DSDNpcRole" value="bandit"/>
      <property name="DSDNpcKillRep" value="0"/>
      <property name="LootDropProb" value="1"/>
    </entity_class>

    <entity_class name="ridgeRaiderRifleman" extends="ridgeRaiderBase">
      <property name="UserSpawnType" value="Menu"/>
      <property name="DSDNpcWeapon" value="gunRifleT1HuntingRifle"/>
      <property name="DSDNpcAmmo" value="30"/>
      <property name="DSDNpcAim" value="0.5"/>
    </entity_class>

    <entity_class name="ridgeRaiderBrawler" extends="ridgeRaiderBase">
      <property name="UserSpawnType" value="Menu"/>
      <property name="DSDNpcWeapon" value="meleeWpnClubT1BaseballBat,meleeToolAxeT1IronFireaxe"/>
      <effect_group name="Base Effects">
        <passive_effect name="HealthMax" operation="base_set" value="350"/>
      </effect_group>
    </entity_class>

    <!-- hireable once the raiders like you -->
    <entity_class name="ridgeDeserter" extends="dsdNpcTemplate">
      <property name="UserSpawnType" value="Menu"/>
      <property name="Mesh" value="#@modfolder(DSD_NPCUtilities):Resources/dsdnpcutilities.unity3d?dsdNpcSurvivor"/>
      <property name="PhysicsBody" value="dsdNpcSurvivor"/>
      <property name="NPCID" value="ridgeDeserter"/>
      <property name="Faction" value="ridgeRaiders"/>
      <property name="DSDNpcRole" value="companion"/>
      <property name="DSDNpcHireCost" value="8000"/>
      <property name="DSDNpcRepHire" value="650"/>
      <property name="DSDNpcWeapon" value="gunHandgunT1Pistol"/>
      <property name="DSDNpcAmmo" value="40"/>
      <property name="DSDNpcAim" value="0.3"/>
    </entity_class>
  </append>
</configs>
<configs>
  <append xpath="/npc/factions">
    <faction name="ridgeRaiders"/>
  </append>
  <append xpath="/npc">
    <npc_info id="ridgeRaider" name="Ridge Raider" name_key="ridgeRaiderBase" faction="ridgeRaiders"
      portrait="" greeting_type="nearby" stance="Dislike" voice_set="" dialog_id="dsdNpcCompanion"
      quest_faction="0" localization_id="ridgeRaiderBase"/>
    <npc_info id="ridgeDeserter" name="Deserter" name_key="ridgeDeserter" faction="ridgeRaiders"
      portrait="" greeting_type="nearby" stance="Neutral" voice_set="" dialog_id="ridgeDeserterTalk"
      quest_faction="0" localization_id="ridgeDeserter"/>
  </append>
</configs>
<npcutilities>
  <faction name="ridgeRaiders" player_start="350" hostile_below="250">
    <relation faction="undead" value="0"/>
    <relation faction="dsdSurvivors" value="0"/>
    <relation faction="dsdBandits" value="600"/>
  </faction>
</npcutilities>

Players start at 350: not hostile yet, but one dead raider (the template costs 150) tips them over.

<configs>
  <append xpath="/dialogs">
    <dialog id="ridgeDeserterTalk" startstatementid="start">
      <statement id="start" text="ridgeDes_hello">
        <response_entry id="hire"/>
        <response_entry id="notyet"/>
        <response_entry id="bye"/>
      </statement>
      <statement id="wait" text="ridgeDes_wait" nextstatementid="start"/>
      <response id="hire" text="ridgeDes_hire">
        <requirement type="DSDNpc, DSD_NPCUtilities" id="can_hire" requirementtype="Hide"/>
        <action type="DSDNpc, DSD_NPCUtilities" id="hire"/>
      </response>
      <response id="notyet" text="ridgeDes_ask" nextstatementid="wait">
        <requirement type="DSDNpc, DSD_NPCUtilities" id="hireable" requirementtype="Hide"/>
      </response>
      <response id="bye" text="ridgeDes_bye"/>
    </dialog>
  </append>
</configs>
<configs>
  <csv xpath="/entitygroups/entitygroup[@name='ZombiesWasteland']" op="add">ridgeRaiderRifleman, .04, ridgeRaiderBrawler, .04</csv>
</configs>
Key,File,Type,UsedInMainMenu,NoTranslate,english
ridgeRaiderBase,entityclasses,Entity,,,Ridge Raider
ridgeRaiderRifleman,entityclasses,Entity,,,Ridge Raider Rifleman
ridgeRaiderBrawler,entityclasses,Entity,,,Ridge Raider Brawler
ridgeDeserter,entityclasses,Entity,,,Deserter
ridgeDes_hello,dialogs,Dialog,,,"Keep it down. If the Ridge sees me talking to you, we're both dead."
ridgeDes_ask,dialogs,Dialog,,,"Want to get out?"
ridgeDes_wait,dialogs,Dialog,,,"Not yet. Prove you're worth the risk, and bring Dukes."
ridgeDes_hire,dialogs,Dialog,,,"Let's go. Now. (8,000 Dukes)"
ridgeDes_bye,dialogs,Dialog,,,"Forget you saw me."

Check the group name

ZombiesWasteland must exist in your game's entitygroups.xml; open it and pick the biome group you want.