Skip to content

Species without biotech

RecompiledBirds edited this page Jun 28, 2025 · 2 revisions

Creating a species that does not rely on biotech's xenotypes is relatively simple within Vine. For the purposes of this guide, we will be re-creating the Avali from our mod, RimVali: Far From Avalon.

Please not this guide will not go over creating vanilla XML defs, such as BodyPartDefs, BodyTypeDefs, Stats, etc. To learn more about those, please refer to the Data/Core/Defs folder in your Rimworld install.

We will start with a template pawn, that has no data other than stats, a label, a description, and a defName added to it yet:

<Defs>
    <ThingDef  ParentName="BasePawn">
                <!-- Replace these with your own values -->
          	<defName>RVFFA_Avali</defName>
		<label>Avali</label>
		<description>Cute, fluffy raptors with highly advanced tech. The primary solvent in avali biology is ammonia, making them mostly incompatible with humans. Avali don't like being hot, as their blood boils at a much lower temp than a human's blood, but they can survive in the cold no problem.</description>
		<statBases>
			<MarketValue>1750</MarketValue>
			<MoveSpeed>4.6</MoveSpeed>
			<ComfyTemperatureMin>-30</ComfyTemperatureMin>
			<ComfyTemperatureMax>10</ComfyTemperatureMax>
			<LeatherAmount>75</LeatherAmount>
			<RoyalFavorValue>3</RoyalFavorValue>
			<Wildness>0.86</Wildness>
		</statBases>
    </ThingDef>
</Defs>

We recommend using ParentName="BasePawn" or ParentName="Human" to get the best results for compatibility with other mods. In RimValiFFA and Vine, we write defNames as [Mod]_[Thing], eg- RVFFA_Avali, Vine_ThoughtDidntCare, etc. There is no need to follow this yourself, but for the purposes of this guide that is what we will be doing.

Optional Pawn features

This section is about custom features Vine allows on Pawns. To keep things focused, most parameters not relevant to each section (eg. other comps, stats, race properties) are not shown.

The RVCP Comp

This comp handles various tasks under the hood, and is needed for automatically adding human surgeries and aiding in handling renderableDefs.

<Defs>
    <ThingDef  ParentName="BasePawn">
          	<defName>RVFFA_Avali</defName>
		<label>Avali</label>
		<description>Cute, fluffy raptors with highly advanced tech. The primary solvent in avali biology is ammonia, making them mostly incompatible with humans. Avali don't like being hot, as their blood boils at a much lower temp than a human's blood, but they can survive in the cold no problem.</description>
                <comps>
                   <!-- Other comps here-->
                   <li Class="RVCRestructured.RVRCP">
                        <linkHumanRecipes>true</linkHumanRecipes>
                   </li>
               </comps>
    </ThingDef>
</Defs>

The only field within this comp is linkHumanRecipes, which is always true by default if not written in XML. Setting this to false will disable automatically collecting human surgeries.

Custom Cannibalism Thoughts

We will be attaching a ThingComp to this ThingDef to influence it's reaction to cannibalism.

<Defs>
    <ThingDef  ParentName="BasePawn">
          	<defName>RVFFA_Avali</defName>
		<label>Avali</label>
		<description>Cute, fluffy raptors with highly advanced tech. The primary solvent in avali biology is ammonia, making them mostly incompatible with humans. Avali don't like being hot, as their blood boils at a much lower temp than a human's blood, but they can survive in the cold no problem.</description>
                <comps>
                   <!-- Other comps here-->
                   <li Class="RVCRestructured.RVRCannibalismComp">
	                <thoughts>
		             <li>
			         <race>RVFFA_Avali</race>
			         <rawEatenThought>RVFFA_AteAvaliLikeMeatDirect</rawEatenThought>
			         <rawCannibalThought>RVFFA_AteAvaliLikeMeatDirectCannibal</rawCannibalThought>
			         <cookedEatenThought>RVFFA_AteAvalilikeMeatAsIngredient</cookedEatenThought>
			         <cookedCannibalThought>RVFFA_AteAvalilikeMeatAsIngredientCannibal</cookedCannibalThought>
		             </li>
	                 </thoughts>
	                 <caresAboutUndefinedRaces>false</caresAboutUndefinedRaces>
                   </li>
               </comps>
    </ThingDef>
</Defs>

thoughts is a list of races that the pawn should care about eating. race is the def of the race we should care about, and the various thought parameters define what thoughts are given for eating that race. All thoughts must be filled out, otherwise Null Reference Errors may occur. caresAboutUndefinedRaces determines if a pawn cares about races that are not on this list.

Bodytype Limitations

To continue, we will limit the avali to only use a specific set of bodytypes (in this case one, but more are allowed).

<Defs>
    <ThingDef  ParentName="BasePawn">
          	<defName>RVFFA_Avali</defName>
		<label>Avali</label>
		<description>Cute, fluffy raptors with highly advanced tech. The primary solvent in avali biology is ammonia, making them mostly incompatible with humans. Avali don't like being hot, as their blood boils at a much lower temp than a human's blood, but they can survive in the cold no problem.</description>
                <comps>
                   <!-- Other comps here-->
                   <li Class="RVCRestructured.RVRBodyGetterComp">
	              <allowedBodyTypes>
		           <li>RVFFA_Avali</li>
	              </allowedBodyTypes>
                   </li>
               </comps>
    </ThingDef>
</Defs>

allowedBodyTypes is a list of all bodyTypeDefs the pawn can generate. Note: the pawn can only have these bodytypes, so only use this when you need extreme restrictions.

Allowing a race to generate textures and colors for RenderableDefs.

If using a renderTree with renderableDefs without biotech genes, this node is a requirement. This component handles determining what color channels, and textures to select for a pawn.

<Defs>
    <ThingDef  ParentName="BasePawn">
          	<defName>RVFFA_Avali</defName>
		<label>Avali</label>
		<description>Cute, fluffy raptors with highly advanced tech. The primary solvent in avali biology is ammonia, making them mostly incompatible with humans. Avali don't like being hot, as their blood boils at a much lower temp than a human's blood, but they can survive in the cold no problem.</description>
                <comps>
                        <!-- Other comps here-->
                   	<li Class="RVCRestructured.RVRGraphicsComp">
				<renderableDefs>
					<li>RVFFA_EyeL</li>
					<li>RVFFA_EyeR</li>
					<li>RVFFA_EarLL</li>
					<li>RVFFA_EarLU</li>
					<li>RVFFA_EarRL</li>
					<li>RVFFA_EarRU</li>

					<li>RVFFA_Head</li>

					<li>RVFFA_Body</li>

					<li>RVFFA_Tail</li>
					<li>RVFFA_TailSkirt</li>

					<li>RVFFA_Mouth</li>
				</renderableDefs>
				<colorGenerators>
					<li>
						<name>Eyes</name>
						<colorGenerator>
							<colorOne Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(0, 0, 0)</min>
										<max>(255, 255, 255)</max>
									</li>
								</options>
							</colorOne>
							<colorTwo Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(50, 50, 50)</min>
										<max>(200, 200, 200)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>RGBA(40, 40, 40, 255)</min>
										<max>RGBA(60, 60, 60, 255)</max>
									</li>
								</options>
							</colorTwo>
							<colorThree Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(50, 50, 50)</min>
										<max>(200, 200, 200)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>(40, 40, 40)</min>
										<max>(60, 60, 60)</max>
									</li>
								</options>
							</colorThree>
						</colorGenerator>
					</li>
					<li>
						<name>Feathers</name>
						<colorGenerator>
							<colorOne Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(200, 200, 200)</min>
										<max>(255, 255, 255)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>(220, 220, 220)</min>
										<max>(240, 240, 240)</max>
									</li>
									<li>
										<weight>5</weight>
										<min>RGBA(40, 40, 40, 255)</min>
										<max>RGBA(60, 60, 60, 255)</max>
									</li>
								</options>
							</colorOne>
							<colorTwo Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(50, 50, 50)</min>
										<max>(200, 200, 200)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>RGBA(40, 40, 40, 255)</min>
										<max>RGBA(60, 60, 60, 255)</max>
									</li>
								</options>
							</colorTwo>
							<colorThree Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(50, 50, 50)</min>
										<max>(200, 200, 200)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>(40, 40, 40)</min>
										<max>(60, 60, 60)</max>
									</li>
								</options>
							</colorThree>

						</colorGenerator>
						<colorGeneratorFemale>
							<colorOne Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(185, 185, 185)</min>
										<max>(215, 215, 215)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>(220, 220, 220)</min>
										<max>(240, 240, 240)</max>
									</li>
									<li>
										<weight>1</weight>
										<min>RGBA(40, 40, 40, 255)</min>
										<max>RGBA(60, 60, 60, 255)</max>
									</li>
								</options>
							</colorOne>
							<colorTwo Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(185, 185, 185)</min>
										<max>(215, 215, 215)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>(220, 220, 220)</min>
										<max>(240, 240, 240)</max>
									</li>
									<li>
										<weight>1</weight>
										<min>RGBA(40, 40, 40, 255)</min>
										<max>RGBA(60, 60, 60, 255)</max>
									</li>
								</options>
							</colorTwo>
							<colorThree Class="ColorGenerator_Options">
								<options>
									<li>
										<weight>10</weight>
										<min>(185, 185, 185)</min>
										<max>(215, 215, 215)</max>
									</li>
									<li>
										<weight>2</weight>
										<min>(220, 220, 220)</min>
										<max>(240, 240, 240)</max>
									</li>
									<li>
										<weight>1</weight>
										<min>RGBA(40, 40, 40, 255)</min>
										<max>RGBA(60, 60, 60, 255)</max>
									</li>
								</options>
							</colorThree>

						</colorGeneratorFemale>
					</li>
				</colorGenerators>
			</li>
               </comps>
    </ThingDef>
</Defs>

This comp looks a lot scarier than it actually is! Lets start by breaking it down.

<li Class="RVCRestructured.RVRGraphicsComp">
      <renderableDefs>
	<li>RVFFA_EyeL</li>
	<li>RVFFA_EyeR</li>
	<li>RVFFA_EarLL</li>
	<li>RVFFA_EarLU</li>
	<li>RVFFA_EarRL</li>
	<li>RVFFA_EarRU</li>

	<li>RVFFA_Head</li>

	<li>RVFFA_Body</li>

	<li>RVFFA_Tail</li>
	<li>RVFFA_TailSkirt</li>

	<li>RVFFA_Mouth</li>
      </renderableDefs>
</li>

This list contains all renderableDefs on the pawn in question.

Colorgenerators

Next, let's look at colorGenerators. First, let's look at the full thing. Then we'll break it down again.

<li Class="RVCRestructured.RVRGraphicsComp">
	<colorGenerators>
		<li>
			<name>Eyes</name>
			<colorGenerator>
				<colorOne Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(0, 0, 0)</min>
							<max>(255, 255, 255)</max>
						</li>
					</options>
				</colorOne>
				<colorTwo Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(50, 50, 50)</min>
							<max>(200, 200, 200)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>RGBA(40, 40, 40, 255)</min>
							<max>RGBA(60, 60, 60, 255)</max>
						</li>
					</options>
				</colorTwo>
				<colorThree Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(50, 50, 50)</min>
							<max>(200, 200, 200)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>(40, 40, 40)</min>
							<max>(60, 60, 60)</max>
						</li>
					</options>
				</colorThree>
			</colorGenerator>
		</li>
		<li>
			<name>Feathers</name>
			<colorGenerator>
				<colorOne Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(200, 200, 200)</min>
							<max>(255, 255, 255)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>(220, 220, 220)</min>
							<max>(240, 240, 240)</max>
						</li>
						<li>
							<weight>5</weight>
							<min>RGBA(40, 40, 40, 255)</min>
							<max>RGBA(60, 60, 60, 255)</max>
						</li>
					</options>
				</colorOne>
				<colorTwo Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(50, 50, 50)</min>
							<max>(200, 200, 200)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>RGBA(40, 40, 40, 255)</min>
							<max>RGBA(60, 60, 60, 255)</max>
						</li>
					</options>
				</colorTwo>
				<colorThree Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(50, 50, 50)</min>
							<max>(200, 200, 200)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>(40, 40, 40)</min>
							<max>(60, 60, 60)</max>
						</li>
					</options>
				</colorThree>

			</colorGenerator>
			<colorGeneratorFemale>
				<colorOne Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(185, 185, 185)</min>
							<max>(215, 215, 215)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>(220, 220, 220)</min>
							<max>(240, 240, 240)</max>
						</li>
						<li>
							<weight>1</weight>
							<min>RGBA(40, 40, 40, 255)</min>
							<max>RGBA(60, 60, 60, 255)</max>
						</li>
					</options>
				</colorOne>
				<colorTwo Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(185, 185, 185)</min>
							<max>(215, 215, 215)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>(220, 220, 220)</min>
							<max>(240, 240, 240)</max>
						</li>
						<li>
							<weight>1</weight>
							<min>RGBA(40, 40, 40, 255)</min>
							<max>RGBA(60, 60, 60, 255)</max>
						</li>
					</options>
				</colorTwo>
				<colorThree Class="ColorGenerator_Options">
					<options>
						<li>
							<weight>10</weight>
							<min>(185, 185, 185)</min>
							<max>(215, 215, 215)</max>
						</li>
						<li>
							<weight>2</weight>
							<min>(220, 220, 220)</min>
							<max>(240, 240, 240)</max>
						</li>
						<li>
							<weight>1</weight>
							<min>RGBA(40, 40, 40, 255)</min>
							<max>RGBA(60, 60, 60, 255)</max>
						</li>
					</options>
				</colorThree>

			</colorGeneratorFemale>
		</li>
	</colorGenerators>
</li>

Now, let's break this giant chunk down a bit more, and work up from a simple color generator to what we see on the vali. colorGenerators is a list of color-channels generated for the pawn. Let's make a simple color generator for the feathers, to start.

<!-- This element is inside the colorGenerators list -->
<li>
    <!-- the name to use for the channel -->
    <name>feathers</name>
    <colorGenerator>
        <!-- Return pure white for red, green, and blue channels -->
        <!-- Red on a mask texture -->
        <colorOne Class="ColorGenerator_Single">
                <color>(255,255,255)</color>
        </colorOne>
        <!-- Green on a mask texture -->
        <colorTwo Class="ColorGenerator_Single">
                <color>(255,255,255)</color>
        </colorTwo>
        <!-- Blue on a mask texture -->
        <colorThree Class="ColorGenerator_Single">
                <color>(255,255,255)</color>
        </colorThree>
    </colorGenerator>
</li>

Note: ColorGenerator_Single is a vanilla rimworld class. Other options include ColorGenerator_StandardApparel, ColorGenerator_White, and ColorGenerator_Options (which we will use later).

And if you want to add different color generators for female pawns, you can use the colorGeneratorFemale tag:

```xml
<!-- This element is inside the colorGenerators list -->
<li>
    <!-- the name to use for the channel -->
    <name>feathers</name>
    <colorGenerator>
        <!-- Return pure white for red, green, and blue channels -->
        <!-- Red on a mask texture -->
        <colorOne Class="ColorGenerator_Single">
                <color>(255,255,255)</color>
        </colorOne>
        <!-- Green on a mask texture -->
        <colorTwo Class="ColorGenerator_Single">
                <color>(255,255,255)</color>
        </colorTwo>
        <!-- Blue on a mask texture -->
        <colorThree Class="ColorGenerator_Single">
                <color>(255,255,255)</color>
        </colorThree>
    </colorGenerator>
    <colorGeneratorFemale>
        <!-- Return pure black for red, green, and blue channels -->
        <!-- Red on a mask texture -->
        <colorOne Class="ColorGenerator_Single">
                <color>(0,0,0)</color>
        </colorOne>
        <!-- Green on a mask texture -->
        <colorTwo Class="ColorGenerator_Single">
                <color>(0,0,0)</color>
        </colorTwo>
        <!-- Blue on a mask texture -->
        <colorThree Class="ColorGenerator_Single">
                <color>(0,0,0)</color>
        </colorThree>
    </colorGenerator>
</li>

Now, we will use Rimworlds ColorGenerator_Options class to add more color selection options to our pawns.

<colorGenerator>
    <colorOne Class="ColorGenerator_Options">
	<options>
		<li>
                        <!-- The chance rimworld has of picking this option for use as our color -->
			<weight>10</weight>
                        <!-- the min rgb values of the color-->
			<min>(200, 200, 200)</min>
                        <!-- the max rgb values of the color-->
			<max>(255, 255, 255)</max>
		</li>
		<li>
			<weight>2</weight>
			<min>(220, 220, 220)</min>
			<max>(240, 240, 240)</max>
		</li>
		<li>
			<weight>5</weight>
			<min>RGBA(40, 40, 40, 255)</min>
	         	<max>RGBA(60, 60, 60, 255)</max>
		</li>
	</options>
    </colorOne>
    <colorTwo Class="ColorGenerator_Options">
	<options>
		<li>
			<weight>10</weight>
			<min>(50, 50, 50)</min>
			<max>(200, 200, 200)</max>
		</li>
		<li>
			<weight>2</weight>
			<min>RGBA(40, 40, 40, 255)</min>
			<max>RGBA(60, 60, 60, 255)</max>
	        </li>
	</options>
    </colorTwo>
     <colorThree Class="ColorGenerator_Options">
	<options>
		<li>
			<weight>10</weight>
			<min>(50, 50, 50)</min>
			<max>(200, 200, 200)</max>
		</li>
		<li>
			<weight>2</weight>
			<min>(40, 40, 40)</min>
	         	<max>(60, 60, 60)</max>
		</li>
	</options>
      </colorThree>
</colorGenerator>

Restrictions

Vine allows you to limit content for your race, either by allowing or disallowing it. You can even do this across entire mods.

<Defs>
    <ThingDef  ParentName="BasePawn">
          	<defName>RVFFA_Avali</defName>
		<label>Avali</label>
		<description>Cute, fluffy raptors with highly advanced tech. The primary solvent in avali biology is ammonia, making them mostly incompatible with humans. Avali don't like being hot, as their blood boils at a much lower temp than a human's blood, but they can survive in the cold no problem.</description>
                <comps>
                   <!-- Other comps here-->
			<li Class="RVCRestructured.RVRRestrictionComp">
				<restrictions>
					<modRestrictions>
						<Nesi.RimValiFFARW>
							<BodyTypeDef>RequiredAndWhitelist</BodyTypeDef>
							<Equipment>WhiteListSelf</Equipment>
							<Building>WhiteListSelf</Building>
							<ResearchDef>WhiteListSelf</ResearchDef>
							<Apparel>WhiteListSelf</Apparel>
							<Beds>WhiteListSelf</Beds>
						</Nesi.RimValiFFARW>
					</modRestrictions>
					
					<defRestrictions>
						<ThoughtDef>
							<EnvironmentDark>BlackListSelf</EnvironmentDark>
							<Naked>BlackListSelf</Naked>
							<SleepDisturbed>BlackListSelf</SleepDisturbed>
							<SharedBed>BlackListSelf</SharedBed>
							<ObservedLayingCorpse>BlackListSelf</ObservedLayingCorpse>
							<ButcheredHumanlikeCorpse>BlackListSelf</ButcheredHumanlikeCorpse>
							<KnowButcheredHumanlikeCorpse>BlackListSelf</KnowButcheredHumanlikeCorpse>
							<SleptInBedroom>BlackListSelf</SleptInBedroom>
							<SleptInBarracks>BlackListSelf</SleptInBarracks>
						</ThoughtDef>
						<TraitDef>
							<BodyPurist>BlackListSelf</BodyPurist>
							<Transhumanist>BlackListSelf</Transhumanist>
							<RVFFA_PackBroken>WhiteListSelf</RVFFA_PackBroken>
						</TraitDef>
						<XenotypeDef>
							<RVFFA_BaseAvaliXenoType MayRequire="Ludeon.RimWorld.Biotech">WhiteListSelf</RVFFA_BaseAvaliXenoType>
							<RVFFA_Solfeather MayRequire="Ludeon.RimWorld.Biotech">WhiteListSelf</RVFFA_Solfeather>
						</XenotypeDef>
					</defRestrictions>
					
					<alwaysAllowed>
						<Apparel/>
					</alwaysAllowed>
				</restrictions>
			</li>
               </comps>
    </ThingDef>
</Defs>

The restrictions tag outlines all restrictions for this species. There are a few tags to note: RequiredAndWhiteList, WhiteListSelf, and BlackListSelf. RequiredAndWhiteList will, in some contexts, force a pawn to use this content. WhiteListSelf means only this ThingDef (and any other ThingDef that has whitelisted it) will be able to use this content. BlackListSelf does the opposite- any ThingDef with this content blacklisted will be unable to use it.

There are two types of restrictions in Vine: modRestrictions, and defRestrictions. Lets start with ModRestrictions. In RimVali: Far From Avalon's avali, we find that mod restrictions look like this:

<modRestrictions>
	<Nesi.RimValiFFARW>
		<BodyTypeDef>RequiredAndWhitelist</BodyTypeDef>
		<Equipment>WhiteListSelf</Equipment>
		<Building>WhiteListSelf</Building>
		<ResearchDef>WhiteListSelf</ResearchDef>
		<Apparel>WhiteListSelf</Apparel>
		<Beds>WhiteListSelf</Beds>
	</Nesi.RimValiFFARW>
</modRestrictions>

So, what's going on here? Nesi.RimValiFFARW is the ModID of RimVali: Far From Avalon. So we are telling Vine to select content in this mod. Next, our first line is <BodyTypeDef>RequiredAndWhitelist</BodyTypeDef>. This means that all BodyTypeDefs in this will be required for the avali, and also whitelisted for the avali.

Next, we see <Equipment>WhiteListSelf</Equipment>. This means that all Equipment (eg. guns, tools, and the like) will be restricted to only avali. The same applies to ResearchDef and Beds: Only avali will be able to use content in this mod.

After modRestrictions, we have defRestrictions. These are more targeted, restricting specific defs instead of an entire mod.

<defRestrictions>
	<ThoughtDef>
		<EnvironmentDark>BlackListSelf</EnvironmentDark>
	        <Naked>BlackListSelf</Naked>
		<SleepDisturbed>BlackListSelf</SleepDisturbed>
		<SharedBed>BlackListSelf</SharedBed>
		<ObservedLayingCorpse>BlackListSelf</ObservedLayingCorpse>
		<ButcheredHumanlikeCorpse>BlackListSelf</ButcheredHumanlikeCorpse>
		<KnowButcheredHumanlikeCorpse>BlackListSelf</KnowButcheredHumanlikeCorpse>
		<SleptInBedroom>BlackListSelf</SleptInBedroom>
		<SleptInBarracks>BlackListSelf</SleptInBarracks>
	</ThoughtDef>
	<TraitDef>
		<BodyPurist>BlackListSelf</BodyPurist>
		<Transhumanist>BlackListSelf</Transhumanist>
		<RVFFA_PackBroken>WhiteListSelf</RVFFA_PackBroken>
	</TraitDef>
	<XenotypeDef>
	        <RVFFA_BaseAvaliXenoType MayRequire="Ludeon.RimWorld.Biotech">WhiteListSelf</RVFFA_BaseAvaliXenoType>
		<RVFFA_Solfeather MayRequire="Ludeon.RimWorld.Biotech">WhiteListSelf</RVFFA_Solfeather>
	</XenotypeDef>
</defRestrictions>

These work in a similar way to mod restrictions, where a restrictionType node is written, and then the defs related to that restriction are put inside. Eg:

<ThoughtDef>
	<EnvironmentDark>BlackListSelf</EnvironmentDark>

The first line indicates we are restricting thoughtDefs, and the second indicates that we want avali to be BlackListed from getting the EnvironmentDark Thought.

The following restrictionType's exist in Vine as of writing, and can be used in both modRestrictions and defRestrictions:

  • ResearchDef: control what species can and cannot do the given researcheDefs.
  • BodyTypeDef: control what species can and cannot get the given bodytypeDefs.
  • XenotypeDef: control what species can and cannot get the given xenotypeDefs.
  • ThoughtDef: control what species can and cannot get the given thoughtDefs,
  • Equipment: control what species can and cannot use the given equipment.
  • TraitDef: control what species can and cannot get the given traitDefs.
  • Building: control what species can and cannot build the given buildings.
  • FoodDef: control what species can and cannot eat the given foods.
  • Apparel: control what species can and cannot wear the given apparel.
  • Beds: control what species can and cannot sleep in the given beds.