From 1a56d6661ffaad1ad5ee2e8565ecf622c3598cf8 Mon Sep 17 00:00:00 2001 From: Toggly Date: Sat, 29 Oct 2022 17:58:06 +1100 Subject: [PATCH] 1.0.5 update (art skill only, biotech kids) - Plushies now only use Art skill and have no minimum skill requirement (less confusing for players). - Biotech: Added specific thoughts for children cuddling plushies (extra +1, stacks with Kind) - Biotech: Babies now get a small +1 thought for having a plushie near their crib --- .vscode/settings.json | 3 ++ 1.4/Assemblies/Plushies.dll | Bin 10240 -> 11264 bytes Defs/ThingDef/plushies.xml | 50 +++++++++++++++-- README.md | 14 +++-- Source/Plushies/.vscode/extensions.json | 13 +++++ Source/Plushies/.vscode/settings.json | 3 ++ Source/Plushies/HarmonyPatches.cs | 54 +++++++++++++++++-- Source/Plushies/JoyGiver_CuddlePlushie.cs | 2 +- Source/Plushies/Plushies.csproj | 1 + Source/Plushies/ThoughtWorker_PlushieBaby.cs | 30 +++++++++++ 10 files changed, 158 insertions(+), 12 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 Source/Plushies/.vscode/extensions.json create mode 100644 Source/Plushies/.vscode/settings.json create mode 100644 Source/Plushies/ThoughtWorker_PlushieBaby.cs diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7d69b88 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "omnisharp.useModernNet": false +} \ No newline at end of file diff --git a/1.4/Assemblies/Plushies.dll b/1.4/Assemblies/Plushies.dll index 46ce6f42374ec94fb6f1f21d7e561d55cbc719f9..3d0ad48098a084e02b72e75dc23560ef035e04fd 100644 GIT binary patch delta 5547 zcmai23viUx6+ZX=`#*QH?EZNNgbjhPkVm75kSHP{A_R;k62J%uc`PIvSlA@kxFx#* zwNiC7{9{Lav}F*d)KMl)1+C+QDi*am;$xJl&#`LNQA@4u=xCC z=bm%!xsU(fBpZ`g+d=Pp-GDDqK+2rRBk5@~ zqF)WYQtqDu>&ryX2BO!Lp~6gGlE^0%=$PUZ@=~XT&9Zunpb6nS!}%F2GB-dH{)(N$ zY?_&bga9+a zV?#>Xw5UQ<;?=W8S*8}$(z=%D(J~Ah$Z+#Y6c3<^NGx9@R*s&TNzoNX*-CsyrXJKw zEed1lkV=V{PKThNXU=pUJ{ui0XBoY$qKe^jz`~VdDlGJwD*X%ULpp&1r-5+KRHP)r*8d{Io%;!js$z7Z3Plfv1cY zSoEX{oDj=X!{LBpx1RREuPh=WF zqqI0xBUu|+4mtS&EQ}{BD_RRv)W2lL5166gV`fONWW$*u%%J&$A+R0B$Npdh1?xX< zhLedMwFp@ewm0?#C!7=@4u}$61PMn$C7#ukHbm@`87L%XC+ru)s!Yi$ z@w#ICVt16Sxt?BiJtbrby?V_Th(tVZl=+OB_l4}qFy$)9>W>#(?uj-sCsteRgJLMf zj{G0hmc^c6h5B3WqWnj-&j=xo@ehSKv)U6voQ{A4mR@XGx`bQqw7O?j7_=H?#8E{V zqf0P6ycAHmLgDfX4A+B|E#`4?36^Cl(PiL@yaB_@A(qZ@?Ue8|u)N&d?5v#dC88rZ z=Ai-1y|@xSqtu|BjOve3awUw3lvvu>(VI!JFR@I@%rZ}LR*4$D48y{W0&rX{F=|+h za&JVrKUOl@8ok{0F7HI?`(|M^%^zNY4zFGs*Q3pl237(Rt?!2?4}T4Mi?Z~8W6U@gYy zW{20InU1V43||Ea=6S+g+|=XNSN_+D!xo1|ONvY9|Jo8c`}LU@c(9U11E@6G_wbx5 zTG1Qp+Onw!2~Z=h=1y#fqLnM?5hNXeu4u{1dK^MJ4!+eIwdpYw&9M!kx_l@dRcI4tpb zi5_KP0^KM1m2h!HVzum;rd+C8^jE!+Y2?ti*fERL-Q1$T(_zThYrDBd_izz-yZJRN z-!&VVMHy0m7YWT_kFY-g4;J0V1x{rG-!O#FpGupbdm357qOZ_c^rRf%)pv70)mTqr z1~D!i4QY+cPkYrT5qJs)Ta+c;t>Ki`~I;mUl?Y z`=m{+#BMI^ewlx(eJI?_$T^4Es2G{}oU0lGuXf7S3bqN@)qgF1+)sPu&k@EJG+!#Uz^ep{_uEVQFX`x^@ z=9OdTb2?YDp}g~qLC&dGvS%q9h32$;f@QO0&(LA@23SrK_fyJCLZLiKT{jAqOkfKp zu;vM@*JWf|w{V5l&KP&f5uS~2TS~oeX8-Yxrf^tGGC`~@}Z*H5lkUqSQh`eL!jmfjV;t-X=@ExnQ0me%eC zZB9ktw_01IV|{zfc{k7zZ0zpq>FkQs^>uV~N9sDex}Dl!o*{&eVwDrO3J6Zi%|1G1DRoVNPzjjlkIo8^KO(aIGn9^iL;O~71}22ZspJbx#s8G-4bz;Hf zNxL5Z>_B44VUP^nu>0(O&V$=H#}kvd3Zrd!8(`2kDVp6ShJL~|uHqjn@P-`vjSw;u zxg(h!XadL>kr&I1cK|*3AsXCfz)A9sVDglB2tZPG;E-Rp+>i)}4_>L5U&QzxFvtX` z0!#rJ0)hhawGiWIgnX6~BJK?-@OA^rI#{Uah_Cta6Q2A1K3%tymko=G!#!ruVCkB@ z&TbXa!~zVK;QcLu zRL(80tg5c8a6X^9Bb|huyQZz4s3;6gn}+w#iJyz`^LOlXRh@HHsDL-tIoE}bJO1hC avkfE5rXNwvh3*ftt(7Ce;xE}yh5l~_ZjIUi delta 4298 zcmZu#4RBP|6+Y*_-+kGH-Iq-^36O05mt+$X!ms=#B1-rx0fIze3fk0(e=7+(LL|G} zFbY*WS)Wd&j@J0YG@a3kv7oImGE}S`oq{m6jJ4=gZB<%erqd}^vERKLOrpNb`|kP9 zJ@?#m&b#-%w@I!~t{T|Aw7#VDOB%V}r?N;EHxNajFf+<07oe5A88=Zt$%05%^lLMs zWcuy;oK>*?p6qERI;EvcbN!o%{NU5kG07_xF|UKGonI6~6_L01V=nhKLz4c=yaQa~ z+YAX4P?h&rE-Tz6=f|}Kw;+R_t|S^LAYw07Im=rmvYP`4!ZEd-2v{f6?3HaO8X|Ib zT2j@=z>GSc2W@XYprkAwMq^$wgWhAJaH0=3m385&J{!U%6Qj+Zi7=>4`n(gOKe3dK zBSI0af-YJOpc<%*Z>uo-I4gvm+rR{eGN~YSBbwWLqVV9D@hQqtZi7xWP;0VZ^wvNb zo0DmKYbA+^gwiV38VO)VJ&i;O6hd}IQG{B*oofcoSOT#&$yh2fZSQnR z!edC^3~1sr0kxc;YXz-X)kuD$nW(t?;8qWX;p=Lo{B<8uYly3F@r>?ZOi~!@_n$!1C;i2VO6JvYO^w8@4U&^^hpI#C|*0MS8YR6+tCGny)H%75TpL*uFd2@3tD3Yl6lE|8?5A4K}UE z!oiwD7V-IrI*RS$G_BEu+6K{uGO@*?S8jy5TrJ)VuBlxRZGjl8$=GSp60m}BI4_hR zy;61rFMC)7mVc>3t}7&LQ-1dBf1q$$6s4;jU0PMty&d(|D(m#BP^}SPjA7BM<=E&o zKsijVGOZW;*vVA&4D92r-s5%wb{9FQYp)ew2B~j3pnm!YSs_XF2w5pf(FnmoW|$B_7Hsmc4M#*+IbzxD?lMw4AjzMA@;T+}luPl3_pb-mWN2IIqd z(Y0vGkjKJkJ0w`+EHRUEuZ&t>_w6L5t#`~icAP9$E zVTlJ!IsL1K#7gDv6`!;P@phj~U;|4`>{C&1R@w9`(+8E&$4WC*$sr+!H7U*SH0d;~g7{p?+tl>; zU^0^?8trO<45-z?Bv(m*p5ZU77RVX46RZm_FP&11gYa$b3#$Xvl#~ozGL0<7K2m)K z*_1@z8B6w=gmn(5Un)xzIY{=ekv{ot5TKjvjAagK9H1iT5b#qj&W>Y9D6>)sK~bt zQ+zDXm67Q+I_f%+X)1LKo0e2c zH<_G#v{tc9zCPNdSUXX@WVEx_F^IkGAqMvjrciomM**af#S~ zkF{-_q)AGX=KZ!uDH_m+XfMYS`g1hMC+%Sx;sf+sm_CRjBc-MZDLg^vutrWOnfU@A zqnCNE^+&o0O#nC@C+HyEXMKuF&Es?Q2KU?l#_~1ni}V2-e2G5cCe!3nen@w@0;Ad~ z&1JrF9;8*i#0T$bYb};?sPkZyE1bQx*!pxQ_gDYuGG^+E0uS=JujDjLiK@b;d56n;GWb>1#! zSZ~38KtGv)Dq_6DDRGnW7d}Fo_?Y*KZsRO)wJmX}l9wyF7V;ofnHP9aY&8DEL*jMc z=lrrbsF64#Cit>MJzivez+Ac)IFa@N%js9ZS~>)5qSL^+bOyMH&Wc1mEh9s#r!}f$ zgTfoA0-Bp?C9sD!X#LbrL)udck1G5d-3N`v9z6$qlnV87$Wwuj(&PFf$S(mOrAp%l z?uBK)!lx9L(x2#ETE{nVH?K(0cDS0zdQz_7vDX*!8*7XrD4tb}q1_Yldu0dA9pr3b`x!*ITYGP-zPtJg6yHgGJ<&v=6D^sFL~Vq2eQf18(E1FBTtOxqI4=Po7^ojC|R#moPszcZq?f3ibgF7~^E1drR9?Q%m4R>2{-+{YLn9_TLjV}58{2XCX;}7#EPERQ;DDQa%)KKEZ|z|688HandTailoringBench GeneralLaborSpeed - - 4 - 1 - Artistic UnfinishedApparel Tailor @@ -170,4 +166,50 @@ + + + PlushieCuddleChild + 1 + 1 + +
  • Psychopath
  • +
    + +
  • + + I feel extra snug and safe. + 2 +
  • +
    +
    + + + PlushieCuddleChildKind + 1 + 1 + +
  • Kind
  • +
    + +
  • + + I can take on the world with my fluffy best friend! + 4 +
  • +
    +
    + + + PlushieCuddleBaby + Plushies.ThoughtWorker_PlushieBaby + true + Baby + +
  • + + What is this fluffy creature? + 1 +
  • +
    +
    \ No newline at end of file diff --git a/README.md b/README.md index 6f398ed..861874c 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@

    Plushies

    - +f

    - v1.0.4 + v1.0.5 Compatible Rimworld 1.2-1.4 @@ -25,6 +25,7 @@ A mod that adds plushies to Rimworld! - "Psychopath" colonists are not too excited about plushies... - but "Kind" colonists really like plushie cuddles and get +3! - Colonists can also spend their free time cuddling plushies to gain joy! +- Biotech: Children particularly like plushies! Babies enjoy having some near their crib. ## Compatibility @@ -34,4 +35,11 @@ Plushies are patched in as linkables for anything with "Bed" in the defName, so Put the repository in your `RimWorld/Mods` folder. The assembly references in `Plushies.csproj` are relative paths that expect the mod to be located here. On Windows+Steam the mods folder will be at `C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods`. The mod will be listed in the Rimworld UI with a folder icon next to it (unlike the steam workshop versions which have a steam icon). -For developing in Visual Studio Code: If you open the `Source/Plushies` folder, it should autodetect that it's a C# project and download the necessary plugins. You can then run `dotnet build` in a terminal to build the Rimworld 1.4 assembly for the mod. \ No newline at end of file +For developing in Visual Studio Code: If you open the `Source/Plushies` folder, it should autodetect that it's a C# project and download the necessary plugins. You can then run `dotnet build` in a terminal to build the Rimworld 1.4 assembly for the mod. + +## Changelog + +- 1.0.5 + - Plushies now only use Art skill and have no minimum skill requirement (less confusing for players). + - Biotech: Added specific thoughts for children cuddling plushies (extra +1, stacks with Kind) + - Biotech: Babies now get a small +1 thought for having a plushie near their crib \ No newline at end of file diff --git a/Source/Plushies/.vscode/extensions.json b/Source/Plushies/.vscode/extensions.json new file mode 100644 index 0000000..398cc8c --- /dev/null +++ b/Source/Plushies/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. + // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp + + // List of extensions which should be recommended for users of this workspace. + "recommendations": [ + "ms-dotnettools.csharp" + ], + // List of extensions recommended by VS Code that should not be recommended for users of this workspace. + "unwantedRecommendations": [ + + ] +} \ No newline at end of file diff --git a/Source/Plushies/.vscode/settings.json b/Source/Plushies/.vscode/settings.json new file mode 100644 index 0000000..7d69b88 --- /dev/null +++ b/Source/Plushies/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "omnisharp.useModernNet": false +} \ No newline at end of file diff --git a/Source/Plushies/HarmonyPatches.cs b/Source/Plushies/HarmonyPatches.cs index 37805df..a3dfe7a 100644 --- a/Source/Plushies/HarmonyPatches.cs +++ b/Source/Plushies/HarmonyPatches.cs @@ -21,6 +21,8 @@ public static class PlushiesThoughtDefOf { public static ThoughtDef PlushieCuddle; public static ThoughtDef PlushieCuddleKind; + public static ThoughtDef PlushieCuddleChild; + public static ThoughtDef PlushieCuddleChildKind; static PlushiesThoughtDefOf() { @@ -49,34 +51,70 @@ static HarmonyPatches() } } + // [HarmonyPatch(typeof(Toils_LayDown))] + // [HarmonyPatch("ApplyBedRelatedEffects")] + // class BabyBedThoughtsPatch { + // static void Postfix( + // Pawn p, + // Building_Bed bed, + // bool asleep, + // bool gainRest, + // bool deathrest) { + + // Log.Message($"{p.ageTracker.CurLifeStage.developmentalStage} {p.mindState.applyBedThoughtsTick}") + // if (p.ageTracker.CurLifeStage.developmentalStage <= DevelopmentalStage.Baby && p.mindState.applyBedThoughtsTick == 0) + // { + // p.mindState.applyBedThoughtsTick = Find.TickManager.TicksGame + Rand.Range(2500, 10000); + // p.mindState.applyBedThoughtsOnLeave = false; + // } + // } + // } + + [HarmonyPatch(typeof(Toils_LayDown))] [HarmonyPatch("ApplyBedThoughts")] class BedThoughtsPatch { static void Postfix(Pawn actor) { + Log.Message("BedThoughtsPatch"); // These are here since it seems hard to figure out what properties in Rimworld // are actually nullable if (actor.needs == null || actor.needs.mood == null || actor.needs.mood.thoughts == null || actor.needs.mood.thoughts.memories == null) return; + Log.Message("Has memories"); + var bed = actor.CurrentBed(); if (bed == null) return; + Log.Message("Has bed"); + // This can be null in the case of a sleeping spot var comp = bed.GetComp(); if (comp == null) return; + Log.Message("Has comp"); + //var hasPlushie = comp.LinkedFacilitiesListForReading.Any(thing => thing.def.defName == "Plushie"); var hasPlushie = comp.LinkedFacilitiesListForReading.Any(thing => thing.def.defName.StartsWith("Plushie")); if (hasPlushie) { + Log.Message("Has plushie"); if (actor.story != null && actor.story.traits != null && actor.story.traits.HasTrait(TraitDefOf.Kind)) { - actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleKind); + if (!actor.ageTracker.Adult) { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleChildKind); + } else { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleKind); + } } else { - actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddle); + if (!actor.ageTracker.Adult) { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleChild); + } else { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddle); + } } } } @@ -105,9 +143,17 @@ static void Prefix(JobCondition condition, Pawn_JobTracker __instance, Pawn ___p if (condition == JobCondition.Succeeded) { var actor = ___pawn; if (actor.story.traits.HasTrait(TraitDefOf.Kind)) { - actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleKind); + if (!actor.ageTracker.Adult) { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleChildKind); + } else { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleKind); + } } else { - actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddle); + if (!actor.ageTracker.Adult) { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddleChild); + } else { + actor.needs.mood.thoughts.memories.TryGainMemory(PlushiesThoughtDefOf.PlushieCuddle); + } } } } diff --git a/Source/Plushies/JoyGiver_CuddlePlushie.cs b/Source/Plushies/JoyGiver_CuddlePlushie.cs index 7bb78c6..b17617f 100644 --- a/Source/Plushies/JoyGiver_CuddlePlushie.cs +++ b/Source/Plushies/JoyGiver_CuddlePlushie.cs @@ -27,7 +27,7 @@ public override Job TryGiveJob(Pawn pawn) CompArt compArt = thing.TryGetComp(); if (compArt == null) { - Log.Error("No CompArt on thing being considered for viewing: " + thing, false); + Log.Error("No CompArt on thing being considered for viewing: " + thing); return false; } //if (thing.def.defName != "Plushie") diff --git a/Source/Plushies/Plushies.csproj b/Source/Plushies/Plushies.csproj index 00204ab..4fc2f32 100644 --- a/Source/Plushies/Plushies.csproj +++ b/Source/Plushies/Plushies.csproj @@ -42,6 +42,7 @@ + diff --git a/Source/Plushies/ThoughtWorker_PlushieBaby.cs b/Source/Plushies/ThoughtWorker_PlushieBaby.cs new file mode 100644 index 0000000..7e76c98 --- /dev/null +++ b/Source/Plushies/ThoughtWorker_PlushieBaby.cs @@ -0,0 +1,30 @@ +using Verse; +using RimWorld; + +namespace Plushies +{ + public class ThoughtWorker_PlushieBaby : ThoughtWorker + { + protected override ThoughtState CurrentStateInternal(Pawn p) + { + if (!ModsConfig.BiotechActive) + return (ThoughtState) false; + + + Building_Bed bed = p.CurrentBed(); + if (bed == null || !bed.def.building.bed_crib) + return (ThoughtState) false; + + var comp = bed.GetComp(); + if (comp == null) + return (ThoughtState) false; + + var hasPlushie = comp.LinkedFacilitiesListForReading.Any(thing => thing.def.defName.StartsWith("Plushie")); + if (hasPlushie) { + return ThoughtState.ActiveDefault; + } else { + return (ThoughtState) false; + } + } + } +}