From 601f7d156e4bcd9267d64491b4904e00087a7ac3 Mon Sep 17 00:00:00 2001 From: Shabakur <109368764+Shabakur@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:29:45 +0100 Subject: [PATCH] Add files via upload --- About/About.xml | 31 ++++ Assemblies/RJW_BGS.dll | Bin 0 -> 10752 bytes Defs/RaceGeneDefs/RaceGeneDefs _template.xml | 38 +++++ Defs/RaceGeneDefs/RaceGeneDefs.xml | 109 ++++++++++++++ Source/RJW_BGS/Class1.cs | 30 ++++ Source/RJW_BGS/Harmony_Init.cs | 21 +++ Source/RJW_BGS/InheritanceUtility.cs | 64 +++++++++ .../PatchRJWBestialityPregnancyUtility.cs | 49 +++++++ .../RJW_BGS/PatchVanillaPregnancyUtility.cs | 34 +++++ Source/RJW_BGS/Properties/AssemblyInfo.cs | 36 +++++ Source/RJW_BGS/RJW_BGS.csproj | 70 +++++++++ Source/RJW_BGS/RJW_BGS.sln | 25 ++++ Source/RJW_BGS/RJWcopies.cs | 133 ++++++++++++++++++ Source/RJW_BGS/RaceGeneDef.cs | 20 +++ .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 205 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7216 bytes .../RJW_BGS.csproj.AssemblyReference.cache | Bin 0 -> 55681 bytes .../RJW_BGS.csproj.CoreCompileInputs.cache | 1 + .../Debug/RJW_BGS.csproj.FileListAbsolute.txt | 4 + Source/RJW_BGS/obj/Debug/RJW_BGS.dll | Bin 0 -> 10752 bytes 20 files changed, 665 insertions(+) create mode 100644 About/About.xml create mode 100644 Assemblies/RJW_BGS.dll create mode 100644 Defs/RaceGeneDefs/RaceGeneDefs _template.xml create mode 100644 Defs/RaceGeneDefs/RaceGeneDefs.xml create mode 100644 Source/RJW_BGS/Class1.cs create mode 100644 Source/RJW_BGS/Harmony_Init.cs create mode 100644 Source/RJW_BGS/InheritanceUtility.cs create mode 100644 Source/RJW_BGS/PatchRJWBestialityPregnancyUtility.cs create mode 100644 Source/RJW_BGS/PatchVanillaPregnancyUtility.cs create mode 100644 Source/RJW_BGS/Properties/AssemblyInfo.cs create mode 100644 Source/RJW_BGS/RJW_BGS.csproj create mode 100644 Source/RJW_BGS/RJW_BGS.sln create mode 100644 Source/RJW_BGS/RJWcopies.cs create mode 100644 Source/RJW_BGS/RaceGeneDef.cs create mode 100644 Source/RJW_BGS/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 Source/RJW_BGS/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.AssemblyReference.cache create mode 100644 Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.CoreCompileInputs.cache create mode 100644 Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.FileListAbsolute.txt create mode 100644 Source/RJW_BGS/obj/Debug/RJW_BGS.dll diff --git a/About/About.xml b/About/About.xml new file mode 100644 index 0000000..d445da6 --- /dev/null +++ b/About/About.xml @@ -0,0 +1,31 @@ + + RJW Animal Gene Inheritance + Shabakur + Shabakur.rjw.animal.gene.inheritance + +
  • 1.4
  • +
    + Allows pawn to inherit genes from beasts. + +
  • + ludeon.rimworld.biotech + Biotech +
  • +
  • + rim.job.world + RimJobWorld + https://www.loverslab.com/files/file/7257-rimjobworld/ +
  • +
  • + brrainz.harmony + Harmony + steam://url/CommunityFilePage/2009463077 + https://github.com/pardeike/HarmonyRimWorld/releases/latest +
  • +
    + +
  • brrainz.harmony
  • +
  • ludeon.rimworld.biotech
  • +
  • rim.job.world
  • +
    +
    \ No newline at end of file diff --git a/Assemblies/RJW_BGS.dll b/Assemblies/RJW_BGS.dll new file mode 100644 index 0000000000000000000000000000000000000000..6a03c3a96f458c4f7eb0b92ee1d8e612ad004338 GIT binary patch literal 10752 zcmeHN4R9Rgd4BijcJEH7lkQHIZ4l=Cn?rZHN|wMj7)P=s%QBWNTf#pSBk$?f^5MJN z^X>^-F}O02fD4_*Lqg)VFtm_R8d^$gCX|x!6PO_bnNB-Q3R40k1CwDU4N#aC2xIqo zzuh~X&V;lx?X)xP%KPs7_q~7L`+d8&>yc}|N(vFFIM1CUdK_0idIkJ^Fbi?`;wQp% zCh()Bk4syBv~>Jn&WV?7YsxkX@kygtw94^}8Mmj4@mw)Juzf6Eu(D>lu`#&9Gd(&; zv{h2*C%?Sok&3rBX<58M>LgkQj^=W&>%%pUb3aa^W`WCY+|2OQi0%UcJ|7D0|1zuc zzqzYNG7CotcDFOKpXgRDMEx-f9q``kC2FgeeI6Yr^4G}ypf}gh>9TpW3_80M05XxQ z7dI$z#1U26cI-(|BDVcNc%mxB1IkA){-td*Z$Xh`rCFS8D}l4-=q1`%LkhGP`SZcC z$>gIImk_G&rhVc>SS^yACZq=+-APuA+gO^~-StaC8 zT}B>hEdsAG*$`C{i-ETfuQzBZUGv!O zB!Mf_T3R$pO`L&DG1_y88W@jtN`!E@JQ1=HWy!e+HiDY9gpIbx5dTK7(FzfAE@qLO zYL=}yFl#A5>scu&wKnLf8%aL442+OJ0n1ur0J+4}h?>e!OU&0A(~@Zl976_b0``(I zJ))-;R5);-T$osi;W1)vNW0uZ2AVSGg z07s9ZH-i?MEf`$80Q@K=+CiW%=F$rJ*L}?C=*N-}!EekL@uk9~>rM)co0#hftq$N; z8erjGRDPAmc1H?fM6-U2b+E0Vf~Yw3B3kQN6%)#H)A5obC%PbP#1*rzq4^@JwHln5 zKY2mapXg>Z;8~6YTCE;1RuLqZ0_pe(8q|Nb6}?bx(11HUh~YtZIQKn=9cicz56%q_ z&L7T2!O{p`{>IsJ=U|=Awg%>`w^QF%(Z}>xs1eFcui_L9k1J-7-p9%OMW}BrpKFoPBpeifY1~#mv0;G(h zw;Pg6&<;pZ+u`lMM^r7h#`jyP)mdxaj?5-LDJ-7y-+*W2XGUXkP3#t8#x2s z4;ysttcER6b2frXpzg^8ijWL3AKPF(ztNvSgvo$_dw8Sa#zhMw)RvgO_79LqL|q6T zHjY$;`~lv5lUx(*J;~$#huA^L`V^5F^tvK32joX6M7VQ0=F~GEgbI} zi7l1F;g+B|S8?H>kxZbfZsBlesOL9wL2*Z@=f_lR)BXe|Cn?GpLiq5?K_{;Y2!5)v z8@GzxJ4Au1#w8K8UWM!4h&ib0`1nRZ5nn8T0tDL8Co+~ag64i}3CdXB+_4Q>C`tZy zw~x3VQ99f^vABcBkzMT!;2x?uSf-dWmLyQIq_rKioIrh&!6a#Odv4m<0m&@)b$i-@ zT$|+uHK(vaahr4})X?kg?FttXd!kf}Zc?lItLWxznv(p!s&0YdGH*=1eQbdhUGA*U)tbVE~H zeOJJ53Ybut^P#{S1wJJ3Hsu!%LLj*PoVx^!w_oa*%!p`awDbT%#xCJ-#sgqyC&8rMK0mr6|21G`IUz=wx+< zPYTTvtZDQnF?>VjEOHWi{FL_ig7lHF{7Yh+j=VNP+$*;<- zG%P=bQQr`w-W2g47WQ9P_izE}JECkn@3X)zlFmqjz+Eb@yOa#NnHv2rrO*l7>aO%C zpP=F%r3uYD)HBivU|5qF_pz{|by9NuukPG4+*2?U)UP4hrgS`my#WibDPs z70o|~zp|iQ%>d1MvKM{#DgpY`qwZ552Q{$L9kX2SjnrWd& z-3BT`%RK5D`k4}?9znVOV$|!&Zl~9j809_cSx_zXjT+4bbe|{7(>uxnddZ`{4XTws z@~9E%9fjAmMDL>;W%>wE5>TcO&?yRGM^qX5f2}fp%X#o=!8sz}ztlio z*uVGJ!T_~v5_S}x=f!|Qx&*M9x&&M&V4r})0`3rSuYd;N0?G;euz)iHo&eP7r+^pG zJ5_usEtZ%cq85D+zt!5b-PrB!)u-sR==v4l%wRudPKy3kzn%J|zegtzON>7%EI&$@ zWBvCCo6pdC{VCcZT_N92&!8gD(_ZNp`VRrWs=q?(=~vP}L-XIH59y@Pf0h1JTPY0) zFI$C|XDF;+AsL9O7f{nTN#pcq`X0dTzH7mGM9xU>(}!3OJz~_gVw530DBmPqDCBJ7Mb2C#@& zGx~^pSo#b7I>24}^?>{3SLka(x>q`?-vQ21WcNqH%L9UcLfWFeEkEp8*e`z~cS$Y! z0_Ct2*W=0=@HLu|lJW+nOPZ4Vl~a=BA5u<>J!S>P^<7FDcb|6wWAqW=g|tvj({hRf zCaD9kTfi%*8+gCqUq!vZ#{~bk1)M}?X*xtF0Uf$q?Wbe(mO3fmeRK!#`?2=kQJ)t0 z59lu1=36fPA^80QP70W$JFy3RLSK>Ym;P01mG8xl{!@8GxmLLnZ*%s;^38aY^)}XU zk2EUXAU!Jmjr4QrUFlcS7v)>zAILAt@5w!iI?HRM_BaC)i=uiM%8Nol0{1)dOT|8c zcQIHc^~aM!k5?X+rFXoC^;mE3c_9v9pAX_}z&S)O(=g5<`lfV*eui_id>hV_IPbvu zdpJ+wybI?MdKt2pWsH$AM!tudls~34-|W|KST`}zInhb$cN&xClx=sPeyOfb(hhOWBSXnkAI74QcoeY`90rS9c zv25B!BQIRg`ihJL`1R8BMs|Jf$SxWlEKV0p+sNe2{apmZ14h}%7!FgTwuw}YGUFA! zvSowXnsdsyh)m&uOSF1o_2;^pCqFOD)wF54IJti{4G*BWIjd;cGoU=n-M_&yNi8%`?80(X6zw9B*|llrYfDVH~GkvnEO+gHZ(b!NJ3($I9S zh8i$4(^FF%@|*?+@5(v3dAvTyF$? z7xY`D89O(1@H0h)l2M$Q8?$q|Sk4tp_6a|kTs~K>k&fFlXtP~Le%ho;OJNaGW$qb2 zgf`===swIW9Jb91`0%9$p zv}Lnc9yKNpAszrk>cs%dmF=m@t=pK84y^U%^Ofb8&I0E?AI8G-VycE_9`KeS%oXPr zrKky2=DMSQ?4V(n<`N{a9U}`=b`s$_WgGKl+1ra?+2!d{#s1b@@vx|$7*Ml+(^d-& znMJlEM$wouZ8~6-v1X`Xi3`uk1TT(pRP_+}HTxiE?yYM0q%?a56c?}L136==XgP?^ z5vgMeil{r>IhD{Vvm)wgmBvi_hTNoip1875t8#Ziy2hZMF)}$^cz)2fCDSf5S!pBQ zBOFmT7xT6Yhx&@Sf{`CCBIO)bKWFN2UUeLvw!vc7ni6uRFtKO?2OCJSY+%c)q%${n zUdCQPOcl)|Ca)SX3ilP-p1B^IFHgBSW|k{$I9$w?X;aR2%G+)DFsAcmY^%2EFtXD? z7=^*SSwL%wn)XlIb``g<+GyP3`xA{|C)~zggY4^Z?|1J5qnL~XxudihceVouCN||!(eFc5H*e`Qw_upDGV!stN|l2@(EjrKvs1rx_6b{!t&@o zIci4Rld zG)C=uh&@M*s3FEh_j!K(BD?55Fj$VO?s_w-7coxNqO*^(t*8;;bP@FIV<>>QA|F3w zG4gAyG5c7EJTL4}b1nPhG9*YfqN|?sic2*J&%*e=Mi!#(CjLfbujZy7l|F^KARAd~ zTeP^Dvq$Z#NelTBR27y?Z(dAfz?M`UH4Q-H%UoH^mW;wQ$0QxLVid!#j)rJLn2U~x zz&z+j0Qe`%ocs4=E$l@xBD{<=qv)(&jiCVyR^hM~eO81l;Ml&-Z3P7$>5cz7L@V@Q zH08$8CgPX}(H`iGHm@RWUMy`QmNs2iM6il3;kA<63DMcpoHWWdds=Ss+*N9J3eII8 ziZy#W$kWMvJbR)MT9v{sAt64&Hl7!S<1##isSf){mcwDcF6LNt7z&Cihh_hFzjW=c z#XWDHbh|$k#1wdCN87FlFe&EI&luN1Xt*)r#{=HWVF99Nnxlm|^d>(XM$P8v2wq;H zbS7Wg#0ANnK;u9v;0XGU^A$v!U&5~%K9=z7vT?a}w{4WRS;fJllcspW89!)SM;r-y zy7<);0#bPvCiiV6vo?>$hl`W=rUyHVtB*4AXCI1tlKAS*)p#d*i9{>9FI{7FuI*Xd zv35=8x{jX9j7&!+yKZeq&$z_nV1tOD#MqUX{d!w#u1gF$SA>`m=WJR2(U$;uRkvh;(Nv-jBP* zv~6BlG^fk9kx#`(r!)E7Zj{B>Qub$ zDP+!NSGp&?w)?W~bXR9*_nQBh=UDwc7WY3HneOF0%rrlC{1fO|u`d^0g+iZLRRhl)oA4BpClfY{bO28we5?@faK<4uz;z%us0=*| zlzaT8dOM6thzU ztanyV_7j31_FERZMZ}b^iEO_8G@j)0_~RK|jB#5rW=f3UtV=W_BAlXwu!b*8=ken7 z5VD+~YaHLNI&tz>EW)>cuHl?rceb+dQ-B{EZwM + + + \ No newline at end of file diff --git a/Defs/RaceGeneDefs/RaceGeneDefs.xml b/Defs/RaceGeneDefs/RaceGeneDefs.xml new file mode 100644 index 0000000..7802539 --- /dev/null +++ b/Defs/RaceGeneDefs/RaceGeneDefs.xml @@ -0,0 +1,109 @@ + + + + Canine + Canine_Group + +
  • Ears_Floppy
  • +
    + +
  • 90
  • +
    +
    + + + Insect + Insect_Group + +
  • Beauty_Ugly
  • +
    + +
  • 50
  • +
    +
    + + + Feline + Feline_Group + +
  • Ears_Cat
  • +
  • Sleepy
  • +
  • DarkVision
  • +
    + +
  • 90
  • +
  • 25
  • +
  • 25
  • +
    +
    + + + Dragon + Dragon_Group + +
  • Unstoppable
  • +
  • Headbone_CenterHorn
  • +
    + +
  • 25
  • +
  • 90
  • +
    +
    + + + Rodent + Rodent_Group + +
  • Fertile
  • +
    + +
  • 10
  • +
    +
    + + + Racoon + Raccon_Group + +
  • StrongStomach
  • +
    + +
  • 50
  • +
    +
    + + +
    \ No newline at end of file diff --git a/Source/RJW_BGS/Class1.cs b/Source/RJW_BGS/Class1.cs new file mode 100644 index 0000000..b987f18 --- /dev/null +++ b/Source/RJW_BGS/Class1.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using rjw; +using Verse; +using RimWorld; +namespace RJW_BGS +{ + [StaticConstructorOnStartup] + internal static class Class1 + { + static Class1() + { + RJWcopy.Racegroupdictbuilder(); + foreach (RaceGroupDef raceGroupDef2 in DefDatabase.AllDefs) + { + //Log.Message("defName = " + raceGroupDef2.defName); + if (raceGroupDef2.raceNames != null) + { + foreach (string race in raceGroupDef2.raceNames) + { + //Log.Message(race); + } + } + } + } + } +} diff --git a/Source/RJW_BGS/Harmony_Init.cs b/Source/RJW_BGS/Harmony_Init.cs new file mode 100644 index 0000000..120a4e8 --- /dev/null +++ b/Source/RJW_BGS/Harmony_Init.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using Verse; + +namespace RJW_BGS +{ + [StaticConstructorOnStartup] + internal static class HarmonyInit + { + // Token: 0x0600001F RID: 31 RVA: 0x000029A4 File Offset: 0x00000BA4 + static HarmonyInit() + { + Harmony harmony = new Harmony("RJW_BGS"); + harmony.PatchAll(); + } + } +} diff --git a/Source/RJW_BGS/InheritanceUtility.cs b/Source/RJW_BGS/InheritanceUtility.cs new file mode 100644 index 0000000..20724fa --- /dev/null +++ b/Source/RJW_BGS/InheritanceUtility.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; + +namespace RJW_BGS +{ + public class InheritanceUtility + { + public static List AnimalInheritedGenes(Pawn father, Pawn mother) + { + List genelist = new List(); + if (father != null && !father.RaceProps.Humanlike) + { + PawnKindDef pawnKindDef = father.kindDef; + RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef); + if (raceGeneDef != null) + { + GeneDef gene = null; + //In case you hit a modded gene not currently active try again. + for (int i = 0; i < 50 || gene == null; i++) + { + if (raceGeneDef.genes.Any()) + { + gene = DefDatabase.GetNamed(raceGeneDef.genes.RandomElement()); + } + } + if (gene != null) + { + genelist.Add(gene); + } + } + } + + if (mother != null && !mother.RaceProps.Humanlike) + { + PawnKindDef pawnKindDef = mother.kindDef; + RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef); + if (raceGeneDef != null) + { + GeneDef gene = null; + //In case you hit a modded gene not currently active try again. + for (int i = 0; i < 50 || gene == null; i++) + { + if (raceGeneDef.genes.Any()) + { + gene = DefDatabase.GetNamed(raceGeneDef.genes.RandomElement()); + } + } + if (gene != null) + { + genelist.Add(gene); + + } + + } + } + return genelist; + } + } +} diff --git a/Source/RJW_BGS/PatchRJWBestialityPregnancyUtility.cs b/Source/RJW_BGS/PatchRJWBestialityPregnancyUtility.cs new file mode 100644 index 0000000..fc2bbc6 --- /dev/null +++ b/Source/RJW_BGS/PatchRJWBestialityPregnancyUtility.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; +using rjw; + +namespace RJW_BGS +{ + [HarmonyPatch(typeof(Hediff_BasePregnancy), "Initialize")] + public static class PatchRJWBestialityPregnancyUtility + { + [HarmonyPostfix] + public static void AddGenes(Pawn mother, Pawn dad, ref Hediff_BasePregnancy __instance) + { + foreach (Pawn baby in __instance.babies) + { + if (baby.RaceProps.Humanlike) + { + if (baby.genes == null) + { + baby.genes = new Pawn_GeneTracker(baby); + } + + //Remove the hair and skin genes pawns always start with, should get correct ones from human parent anyway. + for (int i = baby.genes.Endogenes.Count - 1; i >= 0; i--) + { + baby.genes.RemoveGene(baby.genes.Endogenes[i]); + } + + List genes = PregnancyUtility.GetInheritedGenes(dad, mother); + List beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother); + + foreach (GeneDef gene in beastgenes) + { + baby.genes.AddGene(gene, false); + } + foreach (GeneDef gene in genes) + { + baby.genes.AddGene(gene, false); + } + } + } + } + } +} diff --git a/Source/RJW_BGS/PatchVanillaPregnancyUtility.cs b/Source/RJW_BGS/PatchVanillaPregnancyUtility.cs new file mode 100644 index 0000000..4321667 --- /dev/null +++ b/Source/RJW_BGS/PatchVanillaPregnancyUtility.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; +using rjw; +namespace RJW_BGS +{ + [HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[] + { + typeof(Pawn), + typeof(Pawn), + //typeof(bool) + } + )] + public static class PatchVanillaPregnancyUtility + { + [HarmonyPostfix] + public static void AnimalInheritedGenes(Pawn father, Pawn mother, ref GeneSet __result) + { + List genes = InheritanceUtility.AnimalInheritedGenes(father, mother); + if (genes.Any()) + { + foreach (GeneDef gene in genes) + { + __result.AddGene(gene); + } + } + } + } +} diff --git a/Source/RJW_BGS/Properties/AssemblyInfo.cs b/Source/RJW_BGS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e1325ac --- /dev/null +++ b/Source/RJW_BGS/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RJW_BGS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("HP Inc.")] +[assembly: AssemblyProduct("RJW_BGS")] +[assembly: AssemblyCopyright("Copyright © HP Inc. 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("357a0848-8709-46ab-bd98-49fd8fd5dd13")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Source/RJW_BGS/RJW_BGS.csproj b/Source/RJW_BGS/RJW_BGS.csproj new file mode 100644 index 0000000..b1eb624 --- /dev/null +++ b/Source/RJW_BGS/RJW_BGS.csproj @@ -0,0 +1,70 @@ + + + + + Debug + AnyCPU + {357A0848-8709-46AB-BD98-49FD8FD5DD13} + Library + Properties + RJW_BGS + RJW_BGS + v4.7.2 + 512 + true + + + false + none + false + ..\..\Assemblies\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll + False + + + ..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + False + + + ..\..\..\RJW\1.4\Assemblies\RJW.dll + False + + + + + + + + + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll + False + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/RJW_BGS/RJW_BGS.sln b/Source/RJW_BGS/RJW_BGS.sln new file mode 100644 index 0000000..d256888 --- /dev/null +++ b/Source/RJW_BGS/RJW_BGS.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32519.379 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJW_BGS", "RJW_BGS.csproj", "{357A0848-8709-46AB-BD98-49FD8FD5DD13}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {357A0848-8709-46AB-BD98-49FD8FD5DD13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {357A0848-8709-46AB-BD98-49FD8FD5DD13}.Debug|Any CPU.Build.0 = Debug|Any CPU + {357A0848-8709-46AB-BD98-49FD8FD5DD13}.Release|Any CPU.ActiveCfg = Release|Any CPU + {357A0848-8709-46AB-BD98-49FD8FD5DD13}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BAF54302-9171-409B-BCFA-9817A3BF9A66} + EndGlobalSection +EndGlobal diff --git a/Source/RJW_BGS/RJWcopies.cs b/Source/RJW_BGS/RJWcopies.cs new file mode 100644 index 0000000..c09f95a --- /dev/null +++ b/Source/RJW_BGS/RJWcopies.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using rjw; +using Verse; +using RimWorld; +namespace RJW_BGS +{ + internal class RJWcopy + { + //Code copied from rjw, as their code was internal and I need the dictionary to know which genes to add to the pawn + public static void Racegroupdictbuilder() + { + foreach (PawnKindDef pawnKindDef2 in from pawnKindDef in DefDatabase.AllDefs + where pawnKindDef.race.race != null + select pawnKindDef) + { + RaceGroupDef raceGroupDef = null; + bool temp = TryGetRaceGroupDef(pawnKindDef2, out raceGroupDef); + } + } + + public static bool TryGetRaceGroupDef(PawnKindDef pawnKindDef, out RaceGroupDef raceGroupDef) + { + + if (RaceGroupByPawnKind.TryGetValue(pawnKindDef, out raceGroupDef)) + { + return raceGroupDef != null; + } + raceGroupDef = GetRaceGroupDefInternal(pawnKindDef); + RaceGroupByPawnKind.Add(pawnKindDef, raceGroupDef); + return raceGroupDef != null; + } + + public static RaceGroupDef GetRaceGroupDefInternal(PawnKindDef kindDef) + { + string raceName = kindDef.race.defName; + string pawnKindName = kindDef.defName; + IEnumerable allDefs = DefDatabase.AllDefs; + List list = allDefs.Where(delegate (RaceGroupDef group) + { + List pawnKindNames = group.pawnKindNames; + return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); + }).ToList(); + List list2 = allDefs.Where(delegate (RaceGroupDef group) + { + List raceNames = group.raceNames; + return raceNames != null && raceNames.Contains(raceName); + }).ToList(); + int num = list.Count() + list2.Count(); + if (num == 0) + { + return null; + } + if (num == 1) + { + return list.Concat(list2).Single(); + } + RaceGroupDef result; + if ((result = list.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) + { + if ((result = list2.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) + { + result = (list.FirstOrDefault() ?? list2.FirstOrDefault()); + } + } + return result; + } + + public static RaceGeneDef GetRaceGenDefInternal(PawnKindDef kindDef) + { + string raceName = kindDef.race.defName; + string pawnKindName = kindDef.defName; + string raceGroupName = GetRaceGroupDef(kindDef).defName; + IEnumerable allDefs = DefDatabase.AllDefs; + List list = allDefs.Where(delegate (RaceGeneDef group) + { + List pawnKindNames = group.pawnKindNames; + return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); + }).ToList(); + List list2 = allDefs.Where(delegate (RaceGeneDef group) + { + List raceNames = group.raceNames; + return raceNames != null && raceNames.Contains(raceName); + }).ToList(); + List list3 = allDefs.Where(delegate (RaceGeneDef group) + { + String raceGroupDefName = group.raceGroup; + return raceGroupDefName != null && raceGroupDefName == raceGroupName; + }).ToList(); + + RaceGeneDef result = null; + //First check if there is a matching pawnkinddef then race, then racegroup + if (list.Any()) + { + result = list.RandomElement(); + } + else if (list2.Any() && result == null) + { + result = list2.RandomElement(); + } + else if (list3.Any() && result == null) + { + result = list3.RandomElement(); + } + else + { + result = null; + } + return result; + + + } + + private static RaceGroupDef GetRaceGroupDef(PawnKindDef kindDef) + { + RaceGroupDef raceGroupDef = null; + bool temp = TryGetRaceGroupDef(kindDef, out raceGroupDef); + return raceGroupDef; + } + + private static bool IsThisMod(Def def) + { + return LoadedModManager.RunningMods.Single((ModContentPack pack) => pack.Name == "RimJobWorld").AllDefs.Contains(def); + } + + private static readonly IDictionary RaceGroupByPawnKind = new Dictionary(); + } + + +} diff --git a/Source/RJW_BGS/RaceGeneDef.cs b/Source/RJW_BGS/RaceGeneDef.cs new file mode 100644 index 0000000..9e9b01e --- /dev/null +++ b/Source/RJW_BGS/RaceGeneDef.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using rjw; + +namespace RJW_BGS +{ + public class RaceGeneDef : Def + { + public String raceGroup; + public List raceNames; + public List pawnKindNames; + public List genes; + public List geneweights; + public String hybridName; + } +} diff --git a/Source/RJW_BGS/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/Source/RJW_BGS/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000000000000000000000000000000000000..c5634ba28c34795f55fe80d6277dfb5be1b4799f GIT binary patch literal 205 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 literal 0 HcmV?d00001 diff --git a/Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.CoreCompileInputs.cache b/Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..2079049 --- /dev/null +++ b/Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +a5d60a90fbe0915a4fbdad7293220b682c74b0b1 diff --git a/Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.FileListAbsolute.txt b/Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..01ed640 --- /dev/null +++ b/Source/RJW_BGS/obj/Debug/RJW_BGS.csproj.FileListAbsolute.txt @@ -0,0 +1,4 @@ +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW_Bestiality_Gene_Support\Assemblies\RJW_BGS.dll +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW_Bestiality_Gene_Support\Source\RJW_BGS\obj\Debug\RJW_BGS.csproj.AssemblyReference.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW_Bestiality_Gene_Support\Source\RJW_BGS\obj\Debug\RJW_BGS.csproj.CoreCompileInputs.cache +C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW_Bestiality_Gene_Support\Source\RJW_BGS\obj\Debug\RJW_BGS.dll diff --git a/Source/RJW_BGS/obj/Debug/RJW_BGS.dll b/Source/RJW_BGS/obj/Debug/RJW_BGS.dll new file mode 100644 index 0000000000000000000000000000000000000000..6a03c3a96f458c4f7eb0b92ee1d8e612ad004338 GIT binary patch literal 10752 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