[1.3] Children and Pregnancy - v4.1.0

Started by GhostData, March 22, 2020, 04:32:51 PM

Previous topic - Next topic

lbmaian

Quote from: Tragix on May 05, 2020, 07:34:20 PM
As an aside, looking through the code and some of your comments, I'd be interested in hearing what you think about the decision to override numerous rendering methods instead of providing new body types that are already adjusted with appropriate graphics and scales. My first guess is that the author didn't want to have to deal with changing back to the generated/adult body type when no longer rendering the pawn as a child.
As part of alien races support, I want to provide a way for the developer to provide an override for the graphics we render at each life stage, but the more I look at it, it seems it would make more sense to just make a custom body type that contains all of these graphics.

I haven't looked in depth how body types are actually used in the RW source, so maybe there are other reasons changing body type is a bad idea.

Well the historical reason was that body type used to be a hardcoded enum rather a proper BodyTypeDef that we have nowadays. Note how hacked on the baby/toddler graphics are (head & body graphics are combined into a single body graphics with the head rendering omitted). A BodyTypeDef-based baby/toddler implementation with minimal PawnRendering patching may be possible now, but you may want to stick with the existing body types for non-baby/toddler children to have maximal compatibility with existing apparel graphics.

Third_Of_Five

Quote from: Geese man on May 05, 2020, 04:54:17 PM
And found a tiny "bug": a child with under grounder trait will still have the -8 scared of the dark debuff.

This has been fixed in my latest MR

GhostData

#152
Just thought I would share this abomination from the POC:


For some reason, Alien Races shifts the body graphics up a good amount when using a new BodyTypeDef. When assigning a graphic override this doesn't happen. I've tried narrowing it in the alien races code, but haven't been able to find where an offset might be applied. Best I can tell is it happens when assigning graphics.

Geese man

#153
there is a issue with the "babies will cry when wounded" imprisoned wild toddlers will not cry if they have untended wounds but the game will spam "X is fully healed"

they will also always prefer eating a human corpse over (nutrient paste) meals in their cell but if they are just roaming on the map they will always go for meals and eat corpses last.

Laconique

Hello everyone, thanks for the mod author contribution.

I happen to stumble on an annoyinbg bug that make trading with NPC impossible. Fairly well explained in this reddit link :

https://www.reddit.com/r/RimWorld/comments/gck463/unable_to_trade_with_trading_visitors/

I can also provide a video if needed.

And here is my error log :

[Children_and_Pregnancy][ERR] Failed to apply Harmony patches for children.and.pregnancy. Exception was: HarmonyLib.HarmonyException: Patching exception in method System.Void Verse.Pawn_HealthTracker::CheckForStateChange(System.Nullable`1<Verse.DamageInfo> dinfo, Verse.Hediff hediff) ---> System.Exception: Wrong null argument: br NULL
  at HarmonyLib.MethodBodyReader+<>c__DisplayClass21_0.<FinalizeILCodes>b__2 (HarmonyLib.CodeInstruction codeInstruction) [0x0015c] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.CollectionExtensions.Do[T] (System.Collections.Generic.IEnumerable`1[T] sequence, System.Action`1[T] action) [0x00014] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.MethodBodyReader.FinalizeILCodes (HarmonyLib.Emitter emitter, System.Collections.Generic.List`1[T] transpilers, System.Collections.Generic.List`1[T] endLabels, System.Boolean& hasReturnCode) [0x001f7] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.MethodCopier.Finalize (HarmonyLib.Emitter emitter, System.Collections.Generic.List`1[T] endLabels, System.Boolean& hasReturnCode) [0x00000] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.MethodPatcher.CreateReplacement (System.Collections.Generic.Dictionary`2[System.Int32,HarmonyLib.CodeInstruction]& finalInstructions) [0x00209] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.PatchFunctions.UpdateWrapper (System.Reflection.MethodBase original, HarmonyLib.PatchInfo patchInfo) [0x00057] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.PatchClassProcessor.ProcessPatchJob (HarmonyLib.PatchJobs`1+Job[T] job) [0x0015d] in <2161c8330234450b8141397c32c11571>:0
   --- End of inner exception stack trace ---
  at HarmonyLib.PatchClassProcessor.ReportException (System.Exception exception, System.Reflection.MethodBase original) [0x0010f] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.PatchClassProcessor.Patch () [0x00082] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.Harmony.<PatchAll>b__10_0 (System.Type type) [0x00007] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.CollectionExtensions.Do[T] (System.Collections.Generic.IEnumerable`1[T] sequence, System.Action`1[T] action) [0x00014] in <2161c8330234450b8141397c32c11571>:0
  at HarmonyLib.Harmony.PatchAll (System.Reflection.Assembly assembly) [0x00006] in <2161c8330234450b8141397c32c11571>:0
  at HugsLib.ModBase.ApplyHarmonyPatches () [0x00095] in <16781bf8b2ce4f1e84cb63572631a10b>:0

(Filename: C:\buildslave\unity\build\Runtime/Export/Debug/Debug.bindings.h Line: 35)

[HugsLib] initializing Children_and_Pregnancy
Mod BabyAndChildren CE Patch is missing packageId in About.xml! (example: <packageId>AuthorName.ModName.Specific</packageId>)

(Filename: C:\buildslave\unity\build\Runtime/Export/Debug/Debug.bindings.h Line: 35)

Mod Smart Speed: targetVersion field is obsolete, use supportedVersions instead.

(Filename: C:\buildslave\unity\build\Runtime/Export/Debug/Debug.bindings.h Line: 35)

PS : I run the mod with CE enabled.

GhostData

Quote from: Laconique on May 07, 2020, 07:48:43 PM
Hello everyone, thanks for the mod author contribution.

I happen to stumble on an annoyinbg bug that make trading with NPC impossible. Fairly well explained in this reddit link :

https://www.reddit.com/r/RimWorld/comments/gck463/unable_to_trade_with_trading_visitors/

I can also provide a video if needed.


CE is not supported yet, and I have not performed any compatibility testing with it.
Be sure to vet the mods you're installing, as the Babies and Children CE patch you're using is for a different iteration of this mod.

FrozenSnowFox

#156
I put my female colonist on priority 1 for Childcare but it results in her just standing around at the crib a lot of the time.  Checking the log a lot of errors are being thrown.  I do have Dubs Bad Hygiene with thirst enabled so I'm not sure if that makes any difference.  Also it seems that I can't tell my people to give the baby water to satisfy the thirst need.

Seara started 10 jobs in 10 ticks. List: (Wait_MaintainPosture (Job_967478)) , (PlayWithBaby (Job_967480) A=Thing_Human128246) , (PlayWithBaby (Job_967482) A=Thing_Human128246) , (PlayWithBaby (Job_967486) A=Thing_Human128246) , (PlayWithBaby (Job_967489) A=Thing_Human128246) , (PlayWithBaby (Job_967491) A=Thing_Human128246) , (PlayWithBaby (Job_967496) A=Thing_Human128246) , (PlayWithBaby (Job_967501) A=Thing_Human128246) , (PlayWithBaby (Job_967503) A=Thing_Human128246) , (PlayWithBaby (Job_967507) A=Thing_Human128246)  curDriver=JobDriver_PlayWithBaby (toilIndex=3) curJob=(PlayWithBaby (Job_967507) A=Thing_Human128246)
Verse.Log:Warning(String, Boolean)
Verse.AI.JobUtility:DMD<DMD<TryStartErrorRecoverJob_Patch0>?1878566016::TryStartErrorRecoverJob_Patch0>(Pawn, String, Exception, JobDriver)
Verse.AI.Pawn_JobTracker:FinalizeTick()
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:DMD<DMD<Tick_Patch1>?-520848384::Tick_Patch1>(Pawn)
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:DMD<DMD<UpdatePlay_Patch1>?-2126437376::UpdatePlay_Patch1>(Game)
Verse.Root_Play:Update()

GhostData

Quote from: FrozenSnowFox on May 11, 2020, 12:17:59 AM
I put my female colonist on priority 1 for Childcare but it results in her just standing around at the crib a lot of the time.  Checking the log a lot of errors are being thrown.  I do have Dubs Bad Hygiene with thirst enabled so I'm not sure if that makes any difference.  Also it seems that I can't tell my people to give the baby water to satisfy the thirst need.

A few folks have reported issues with Bad Hygiene. I believe the new way we handle the feed baby job doesn't allow doctors or parents to bring water to the baby. Definitely on the todo list. For now, I believe Bad Hygiene allows you to disable thirst for babies - another user mentioned something to that effect around page 4 I think?

For anyone working on contributions, CNP will be under a code freeze until the Alien Race changes are merged - probably a week or two at best. As part of this change, I am refactoring large parts of the project to match my preferred coding standards and adding a linter to help enforce these standards. As such, there will likely be a large number of merge conflicts if PRs are merged prior, and I do not want to deal with that.
Feel free to continue development, but I will not be reviewing or merging PRs until after the changes are complete and conflicts are resolved.

The body type POC worked out well enough, so some of the nasty code in the PawnRenderer patch can be replaced soon. I am implementing a racial def that allows configurations at any number of lifestages so each race can decide how CNP handles their different life cycles.
Currently working on a new settings interface so we can enable or disable individual races at play-time.
Races without a custom racial def will attempt to use the default (human) def, which may not work in all cases, or at the least may not make sense for some race.

This will obviously be a major change, so expect a new major release version 3.0.0, which will not be backwards compatible.

Doctrine

I think this is incompatible with androids right now. The droids (haven't tried the androids) were unable to bedrest for surgeries or repairs. Also they become unable to recharge from power sources so they need to eat droid batteries or die.

Sshodan

First - thank you so much for updating this! :) I love this mod and can't imagine playing without it!
I do have a couple of issues I never had before - one is the mentioned inability to give water to the baby... I did switch the thirst need off, but I have to say I'd love to have it back.
The second one is with Facial Stuff - I never used to have this issue before, but atm the infants have facial features floating over their heads and they are offset when laying in the crib. Does not seam to have any negative gamplay effects so far but it could look better :)

peppybojagger

If I use any version above 2.0.3, my colonists will wash people (I'm using Dubs Bad Hygiene mod) with no injuries who are sleeping in private, non-medical beds. If I stay on 2.0.3 it doesn't happen so I'm pretty sure it's coming from this mod even though I'm the only one I've seen having this problem. I'm okay staying on 2.0.3 for now but I would like to update eventually!

Code from running 2.1.1:
11213194 Donna: CheckForJobOverride
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:CheckForJobOverride()
RimWorld.<>c__DisplayClass2_0:<LayDown>b__1()
Verse.AI.JobDriver:DMD<DMD<DriverTick_Patch1>?-1859684352::DriverTick_Patch1>(JobDriver)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213194 Donna: StartJob [washPatient (Job_3143876) A=Thing_Human127922 B=Thing_DBH_WaterBottle322249] lastJobEndCondition=InterruptOptional, jobGiver=RimWorld.JobGiver_Work, cancelBusyStances=False
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<StartJob_Patch2>?2041608320::StartJob_Patch2>(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:CheckForJobOverride()
RimWorld.<>c__DisplayClass2_0:<LayDown>b__1()
Verse.AI.JobDriver:DMD<DMD<DriverTick_Patch1>?-1859684352::DriverTick_Patch1>(JobDriver)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213194 Donna: CleanupCurrentJob LayDown condition InterruptOptional
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<CleanupCurrentJob_Patch1>?1584573312::CleanupCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:DMD<DMD<StartJob_Patch2>?2041608320::StartJob_Patch2>(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:CheckForJobOverride()
RimWorld.<>c__DisplayClass2_0:<LayDown>b__1()
Verse.AI.JobDriver:DMD<DMD<DriverTick_Patch1>?-1859684352::DriverTick_Patch1>(JobDriver)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213950 Donna: JobDriver_washPatient ends current job washPatient (Job_3143876) A=Thing_Human127922 B=Thing_DBH_WaterBottle322249 because of toils[1].endConditions[2]
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:DMD<DMD<DriverTick_Patch1>?-1859684352::DriverTick_Patch1>(JobDriver)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213950 Donna: EndCurrentJob washPatient (Job_3143876) A=Thing_Human127922 B=Thing_DBH_WaterBottle322249 condition=Succeeded curToil=1
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<EndCurrentJob_Patch1>?73835520::EndCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:DMD<DMD<DriverTick_Patch1>?-1859684352::DriverTick_Patch1>(JobDriver)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213950 Donna: CleanupCurrentJob washPatient condition Succeeded
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<CleanupCurrentJob_Patch1>?1584573312::CleanupCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:DMD<DMD<EndCurrentJob_Patch1>?73835520::EndCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:DMD<DMD<DriverTick_Patch1>?-1859684352::DriverTick_Patch1>(JobDriver)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213950 Donna: StartJob [Wait_MaintainPosture (Job_3143914)] lastJobEndCondition=None, jobGiver=, cancelBusyStances=False
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<StartJob_Patch2>?2041608320::StartJob_Patch2>(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:DMD<DMD<EndCurrentJob_Patch1>?73835520::EndCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:DMD<DMD<DriverTick_Patch1>?-1859684352::DriverTick_Patch1>(JobDriver)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213951 Donna: Job expire
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213951 Donna: EndCurrentJob Wait_MaintainPosture (Job_3143914) condition=Succeeded curToil=0
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<EndCurrentJob_Patch1>?73835520::EndCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213951 Donna: CleanupCurrentJob Wait_MaintainPosture condition Succeeded
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<CleanupCurrentJob_Patch1>?1584573312::CleanupCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:DMD<DMD<EndCurrentJob_Patch1>?73835520::EndCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213951 Donna: TryFindAndStartJob
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:DMD<DMD<EndCurrentJob_Patch1>?73835520::EndCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

11213951 Donna: StartJob [UseToilet (Job_3143915) A=Thing_ToiletAdvStuff26104] lastJobEndCondition=None, jobGiver=DubsBadHygiene.JobGiver_UseToilet, cancelBusyStances=False
Verse.Log:Message(String, Boolean)
Verse.AI.Pawn_JobTracker:DebugLogEvent(String)
Verse.AI.Pawn_JobTracker:DMD<DMD<StartJob_Patch2>?2041608320::StartJob_Patch2>(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:DMD<DMD<EndCurrentJob_Patch1>?73835520::EndCurrentJob_Patch1>(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:JobTrackerTick()
Verse.Pawn:Tick()
Verse.TickList:Tick()
Verse.TickManager:DoSingleTick()
Verse.TickManager:TickManagerUpdate()
Verse.Game:UpdatePlay()
Verse.Root_Play:Update()

Sshodan

@peppybojagger I have this problem as well, I was just not sure what mod was doing it - I have a long list. But yep, creepy doctors go around washing people at night :D
Although one of my infants grew up a bit... Now it has a whole second head floating over it... So yep Facial Stuff conflict is here and strong.

Zarak

Happy to see this mod being maintained. I used to use this with the Baby mod, that would have newborns appear as Babies and not fully grown adults at one years old. Does this mod have such a feature, or should I try using the abandoned Baby mod?

GhostData

Quote from: Zarak on May 12, 2020, 07:51:27 PM
Happy to see this mod being maintained. I used to use this with the Baby mod, that would have newborns appear as Babies and not fully grown adults at one years old. Does this mod have such a feature, or should I try using the abandoned Baby mod?
IIRC, Babys and Children is a fork of CNP with some features stripped and a different focus.
CNP broadly handles the following:
Pregnancy and birth
Child rendering (1 year olds look like 1 year olds)
Pawn development with age

Personally I would hold off on this mod for the time being, as it's still in a transition phase with a lot of changes coming. Other mod support is spotty at the moment. Once the primary feature list is finished out, I will start adding other mods to my test setup and workout some of the incompatibilities we've introduced.

Geese man

Perhaps make a carry mechanic that allows a pawn with childcaring to carry 1 or 2 infants/toddlers around using a "baby wrap" first one on the back only adding a very slight movement debuff due to weight and the second one in front adding more to the slowdown and add a lets say a 10% manipulation debuff.
This can be used to make other factions take their infants and toddler with them although unless you are planning on adding a chance for female pawns to be pregnant upon generation this should be a very rare occasion. Add somewhat decent insulation to the wrap so infants and toddlers dont freeze/overheat to easily maybe also add a tiny cowboy hat for warmer climates?

I would also reccomend removing the need to bring a infant/toddler to a crib to feed them as this might become troublesome if a pawn attempts to feed a infant/toddler it is carrying, instead they should be able to get fed anywhere use the mechanics of "stabilize here" if this proves difficult to implement.

As for handling imprisoment I think its best that infants and toddlers can simply be adopted without reducing resistance, to balance this however perhaps a colony wide debuff something like "-5 great another noise generator to feed" for 15 days? And to make this better still remove the need for a crib to feed as for now imprisoned toddlers will be taken out the prison to a colonist crib to feed them which is kinda annoying having to micromanage the escorting them back to bed (infants will always be fed inside their assigned prison cribs and occasionally toddlers too)