<?xml version="1.0"?>
<rss version="2.0"><channel><title/><link>https://www.loverslab.com/blogs/blog/1295-speele-blog-entries/</link><description/><language>en</language><item><title>Sudden burst into Time Wound</title><link>https://www.loverslab.com/blogs/entry/16198-sudden-burst-into-time-wound/</link><description><![CDATA[<p>
	<img alt="135896933_ScreenShot2copie.jpg.a3ec9b362ebcde915d2997957bbd61c8.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="1405098" data-ratio="56.25" width="1200" src="https://www.loverslab.com/uploads/monthly_2022_04/135896933_ScreenShot2copie.jpg.a3ec9b362ebcde915d2997957bbd61c8.jpg" />
</p>

<p>
	 
</p>

<p>
	One rare screenshot. Couldn't resist to capture it.
</p>

<p>
	And so we learn that in this particular scene, base-leveled actors (like bandits and guards) are not unloaded by the engine (I had 13 followers and only this one followed in Time Wound).
</p>

<p>
	Everything else in the scene went as expected, fortunately.
</p>

<p>
	 
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Spoiler</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			[04/01/2022 - 09:37:43PM] OnTrackedStatsEvent::* a stat changed: Quests Completed: 140<br />
			[04/01/2022 - 09:37:44PM] PropagateExcitment: propagating 3.000000 Excitation on 13 actors<br />
			[04/01/2022 - 09:37:44PM] ApplyExcitation: Rift Guard gains 3.000000 excitment and is now at 73.865005<br />
			[04/01/2022 - 09:37:44PM] ApplyExcitation: Rift Guard has now 60.794155 excitation and 38.099293 sex need<br />
			[04/01/2022 - 09:37:44PM] ApplyExcitation: Jonna gains 3.000000 excitment and is now at 68.789474<br />
			[04/01/2022 - 09:37:45PM] ApplyExcitation: Einarth gains 3.000000 excitment and is now at 57.551453<br />
			[04/01/2022 - 09:37:45PM] ApplyExcitation: Einarth has now 55.733574 excitation and 50.553917 sex need<br />
			[04/01/2022 - 09:37:49PM] OnTrackedStatsEvent: Anwen is impressed<br />
			[04/01/2022 - 09:37:49PM] GrowLust: Anwen waits for some opportunity to say her desire to Brutal<br />
			[04/01/2022 - 09:39:30PM] ABILITY | Rift Guard enters combat with Dragon<br />
			[04/01/2022 - 09:39:31PM] ABILITY | Dragon is in range of Brutal<br />
			[04/01/2022 - 09:39:32PM] PLAYER unequips <br />
			[04/01/2022 - 09:39:33PM] ABILITY | Dragon is in range of Brutal<br />
			[04/01/2022 - 09:39:34PM] ABILITY | Hakon One-Eye enters combat with Rift Guard <span style="color:#e74c3c;">&lt;= she was innocent, crazy but innocent</span><br />
			[04/01/2022 - 09:39:34PM] ABILITY | Felldir the Old enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:34PM] ABILITY | Felldir the Old equips Ice Form<br />
			[04/01/2022 - 09:39:35PM] ABILITY | Gormlaith Golden-Hilt enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:36PM] ABILITY | Dragon enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:37PM] ABILITY | Felldir the Old got hit by Rift Guard<br />
			[04/01/2022 - 09:39:39PM] ABILITY | Felldir the Old unequips Ice Form<br />
			[04/01/2022 - 09:39:39PM] ABILITY | Felldir the Old equips Fire Breath<br />
			[04/01/2022 - 09:39:41PM] ABILITY | Dragon got hit by Rift Guard<br />
			[04/01/2022 - 09:39:42PM] ABILITY | Rift Guard unequips Hunting Bow<br />
			[04/01/2022 - 09:39:42PM] ABILITY | Rift Guard equips Riften Guard's Shield<br />
			[04/01/2022 - 09:39:42PM] ABILITY | Rift Guard equips Steel War Axe<br />
			[04/01/2022 - 09:39:50PM] ABILITY | Rift Guard got hit by Felldir the Old<br />
			[04/01/2022 - 09:39:51PM] ABILITY | Rift Guard entered bleeding out state<br />
			[04/01/2022 - 09:39:51PM] ABILITY | Rift Guard equips Healing<br />
			[04/01/2022 - 09:39:51PM] ABILITY | Rift Guard unequips Riften Guard's Shield<br />
			[04/01/2022 - 09:39:51PM] GainSkill: Rift Guard has now 46 in TwoHanded<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Rift Guard got hit by Felldir the Old<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Dragon enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Gormlaith Golden-Hilt stops combat<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Felldir the Old enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Dragon enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Hakon One-Eye enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Rift Guard unequips Healing<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Dragon stops combat<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Dragon stops combat<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Hakon One-Eye stops combat<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Rift Guard stops combat<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Gormlaith Golden-Hilt enters combat with Rift Guard<br />
			[04/01/2022 - 09:39:52PM] ABILITY | Rift Guard has been mortally wounded by Felldir the Old<br />
			[04/01/2022 - 09:39:53PM] ABILITY | Felldir the Old stops combat<br />
			[04/01/2022 - 09:39:53PM] ABILITY | Hakon One-Eye stops combat<br />
			[04/01/2022 - 09:39:54PM] MemberDismiss: dismissed Rift Guard<br />
			[04/01/2022 - 09:39:54PM] OnKill: Rift Guard has been killed by Felldir the Old<br />
			[04/01/2022 - 09:39:54PM] ApplyExcitation: Felldir the Old gains 1.000000 excitment and is now at 12.549923<br />
			[04/01/2022 - 09:39:56PM] OnDefeated: starting the rape of Rift Guard in combat<span style="color:#e74c3c;"> &lt;= in the middle of the scene....</span><br />
			[04/01/2022 - 09:40:06PM] DecideSex: Borri is deciding sex<br />
			[04/01/2022 - 09:40:20PM] OnKill: Dragon has been killed by Gormlaith Golden-Hilt<br />
			[04/01/2022 - 09:40:20PM] ApplyExcitation: Gormlaith Golden-Hilt gains 1.000000 excitment and is now at 6.053768<br />
			[04/01/2022 - 09:41:21PM] ModSexNeed: sex need of Felldir the Old is now 7.460191<br />
			[04/01/2022 - 09:41:21PM] ModSexNeed: sex need of Rift Guard is now 19.432085<br />
			[04/01/2022 - 09:41:21PM] OnEjaculate: Felldir the Old is now perverted<br />
			[04/01/2022 - 09:41:21PM] TrainFemale: Rift Guard's sexuality is now at level 13<br />
			[04/01/2022 - 09:41:30PM] OnAnimationEnd: sex need of Rift Guard is now 11.659251<br />
			[04/01/2022 - 09:41:30PM] OnAnimationEnd: sex need of Felldir the Old is now 4.476115<br />
			[04/01/2022 - 09:41:31PM] ApplyExcitation: Hakon One-Eye gains 1.000000 excitment and is now at 12.027640<br />
			[04/01/2022 - 09:41:31PM] OnAnimationEnd: propagated orgasm excitment on 7 actors<br />
			[04/01/2022 - 09:42:09PM] DecideSex: Arngeir is deciding sex<br />
			[04/01/2022 - 09:43:00PM] OnTrackedStatsEvent::* a stat changed: Words Of Power Learned: 40<br />
			[04/01/2022 - 09:43:00PM] OnTrackedStatsEvent::* a stat changed: Words Of Power Learned: 41<br />
			[04/01/2022 - 09:43:00PM] OnTrackedStatsEvent::* a stat changed: Shouts Learned: 21<br />
			[04/01/2022 - 09:43:00PM] OnTrackedStatsEvent::* a stat changed: Shouts Mastered: 5<br />
			[04/01/2022 - 09:43:00PM] OnTrackedStatsEvent::* a stat changed: Words Of Power Learned: 42<br />
			 
		</p>
	</div>
</div>

<p>
	 
</p>
]]></description><guid isPermaLink="false">16198</guid><pubDate>Fri, 01 Apr 2022 20:44:20 +0000</pubDate></item><item><title>Make children grow to teens in Skyrim</title><link>https://www.loverslab.com/blogs/entry/10753-make-children-grow-to-teens-in-skyrim/</link><description><![CDATA[<p>
	I have no idea if a mod is already doing the stuff, but I designed one from a talk with some friends.
</p>

<p>
	 
</p>

<p>
	The thing is: there are children in Skyrim. Good. How to make them grow to teens?<br />
	So the thing becomes: keep the original children, but find a way to change them in teens at some moment.<br />
	 
</p>

<p>
	<strong>DISCLAIMER:</strong>
</p>

<p>
	the provided code is functionnal
</p>

<p>
	I tested with Camilia Valerius, who got a child, then a teen I named Cimalia Valerius
</p>

<p>
	but the follwing code must be adapted to any need
</p>

<p>
	 
</p>

<p>
	<strong>1. TES5EDIT</strong><br />
	I made a script for TES5Edit (you need MXPF). Its goal is to consolidate any interesting NPC as a teen version.<br />
	So, if one is unique, the related teen would not.
</p>

<p>
	 
</p>

<p>
	Teens are copies, not overrides, of their parent.<br />
	And their FormId is <strong>exactly </strong>the same as their parent, but in the load order of the resulting mod/patch.<br />
	The only limitation is FormId collision. However, I got none with Legendary Edition.
</p>

<p>
	 
</p>

<p>
	I stuck myself in the name "Teens.esp" to build the database of base actors.<br />
	First, load all the mods containing actors you think they should have a teen version.<br />
	Click on any of them and Apply Script &gt; MakeTeens<br />
	Then, when this script asks for a file name, enter "Teens".
</p>

<p>
	<br /><strong>MakeTeens.pas</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Spoiler</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pun">{</span><span class="pln">
  </span><span class="typ">Make</span><span class="pln"> </span><span class="typ">Teens</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

unit </span><span class="typ">MakeTeens</span><span class="pun">;</span><span class="pln">
uses </span><span class="str">'lib\mxpf'</span><span class="pun">;</span><span class="pln">

function </span><span class="typ">Initialize</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Integer</span><span class="pun">;</span><span class="pln">
var
  i</span><span class="pun">,</span><span class="pln"> fid</span><span class="pun">,</span><span class="pln"> cur</span><span class="pun">:</span><span class="pln"> integer</span><span class="pun">;</span><span class="pln">
  rec</span><span class="pun">:</span><span class="pln"> </span><span class="typ">IInterface</span><span class="pun">;</span><span class="pln">
  s</span><span class="pun">:</span><span class="pln"> </span><span class="typ">String</span><span class="pun">;</span><span class="pln">

begin
  </span><span class="typ">DefaultOptionsMXPF</span><span class="pun">;</span><span class="pln">
  </span><span class="typ">InitializeMXPF</span><span class="pun">;</span><span class="pln">
  </span><span class="typ">PatchFileByAuthor</span><span class="pun">(</span><span class="str">'TeenMaker'</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">SetExclusions</span><span class="pun">(</span><span class="pln">mxHardcodedDatFiles</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">AddMasterIfMissing</span><span class="pun">(</span><span class="pln">mxPatchFile</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Update.esm'</span><span class="pun">);</span><span class="pln">

  cur </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">GetLoadOrder</span><span class="pun">(</span><span class="pln">mxPatchFile</span><span class="pun">);</span><span class="pln">
  cur </span><span class="pun">:=</span><span class="pln"> cur shl </span><span class="lit">24</span><span class="pun">;</span><span class="pln">

  </span><span class="typ">LoadRecords</span><span class="pun">(</span><span class="str">'NPC_'</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">for</span><span class="pln"> i </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">MaxRecordIndex</span><span class="pln"> downto </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> begin
    rec </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">GetRecord</span><span class="pun">(</span><span class="pln">i</span><span class="pun">);</span><span class="pln">
    s </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">EditorID</span><span class="pun">(</span><span class="typ">LinksTo</span><span class="pun">(</span><span class="typ">ElementByPath</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'RNAM'</span><span class="pun">)));</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s </span><span class="pun">=</span><span class="pln"> </span><span class="str">'ImperialRaceChild'</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">s </span><span class="pun">=</span><span class="pln"> </span><span class="str">'RedguardRaceChild'</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">S </span><span class="pun">=</span><span class="str">'NordRaceChild'</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">s </span><span class="pun">=</span><span class="pln"> </span><span class="str">'BretonRaceChild'</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">s </span><span class="pun">=</span><span class="pln"> </span><span class="str">'BretonRaceChildVampire'</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">s </span><span class="pun">=</span><span class="pln"> </span><span class="str">'DefaultRace'</span><span class="pun">)</span><span class="pln"> then
      </span><span class="typ">RemoveRecord</span><span class="pun">(</span><span class="pln">i</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'DATA/Flags/Child'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Invulnerable'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Respawn'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">)</span><span class="pln"> then
      </span><span class="typ">RemoveRecord</span><span class="pun">(</span><span class="pln">i</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FULL - Name'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">)</span><span class="pln"> or </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FULL - Name'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Prisoner'</span><span class="pun">)</span><span class="pln"> then
      </span><span class="typ">RemoveRecord</span><span class="pun">(</span><span class="pln">i</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln">
      </span><span class="typ">CopyRecordToPatch</span><span class="pun">(</span><span class="pln">i</span><span class="pun">)</span><span class="pln">
  end</span><span class="pun">;</span><span class="pln">

  </span><span class="com">// we remove the flags, the packages, the factions, the inventory, the scripts</span><span class="pln">
  </span><span class="com">// we change level to 1</span><span class="pln">
  </span><span class="com">// we keep the outfit</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> i </span><span class="pun">:=</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> to </span><span class="typ">MaxPatchRecordIndex</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> begin
    rec </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">GetPatchRecord</span><span class="pun">(</span><span class="pln">i</span><span class="pun">);</span><span class="pln">
    fid </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">GetLoadOrderFormID</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">);</span><span class="pln">
    fid </span><span class="pun">:=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">fid and $00FFFFFF</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> cur</span><span class="pun">;</span><span class="pln">
    </span><span class="typ">SetLoadOrderFormID</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> fid</span><span class="pun">);</span><span class="pln">
    s </span><span class="pun">:=</span><span class="pln"> geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'EDID - Editor ID'</span><span class="pun">);</span><span class="pln">
    seev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'EDID - Editor ID'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'_z_'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> s</span><span class="pun">);</span><span class="pln">
    s </span><span class="pun">:=</span><span class="pln"> geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FULL - Name'</span><span class="pun">);</span><span class="pln">
    seev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'FULL - Name'</span><span class="pun">,</span><span class="pln"> s </span><span class="pun">+</span><span class="pln"> </span><span class="str">' Teen'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Unique'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">)</span><span class="pln"> then
      seev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Unique'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'0'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Essential'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">)</span><span class="pln"> then
      seev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Essential'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'0'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Protected'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">)</span><span class="pln"> then
      seev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/Protected'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'0'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">geev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/PC Level Mult'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">)</span><span class="pln"> then
      seev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Flags/PC Level Mult'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'0'</span><span class="pun">);</span><span class="pln">
    seev</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ACBS/Level'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'1'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="typ">ElementExists</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'VMAD - Virtual Machine Adapter'</span><span class="pun">)</span><span class="pln">
      then </span><span class="typ">RemoveElement</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'VMAD - Virtual Machine Adapter'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="typ">ElementExists</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'SHRT - Short Name'</span><span class="pun">)</span><span class="pln">
      then </span><span class="typ">RemoveElement</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'SHRT - Short Name'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="typ">ElementExists</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Factions'</span><span class="pun">)</span><span class="pln">
      then </span><span class="typ">RemoveElement</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Factions'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="typ">ElementExists</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Items'</span><span class="pun">)</span><span class="pln">
      then </span><span class="typ">RemoveElement</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Items'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="typ">ElementExists</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Packages'</span><span class="pun">)</span><span class="pln">
      then </span><span class="typ">RemoveElement</span><span class="pun">(</span><span class="pln">rec</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Packages'</span><span class="pun">);</span><span class="pln">
  end</span><span class="pun">;</span><span class="pln">

  </span><span class="typ">PrintMXPFReport</span><span class="pun">;</span><span class="pln">
  </span><span class="typ">FinalizeMXPF</span><span class="pun">;</span><span class="pln">
end</span><span class="pun">;</span><span class="pln">
end</span><span class="pun">.</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	 
</p>

<p>
	Now we have a mod, named "Teens.esp", full of base actors, beginning with formID "_z_".
</p>

<p>
	 
</p>

<p>
	<strong>2. Creation Kit on Teens.esp</strong><br />
	Now the boring part. Load "Teens.esp" in CK. Go to Actors.<br />
	The first ones are teens (they all begin with "_z_"). Select all the teens, and only them.<br />
	Press Ctrl+F4 to export all facegen data. This should eliminate the gray face bug - but it will take a while.<br />
	Close CK once done, or make an archive from all facegen (note that such archive is valid, if limited to LE DLCs).
</p>

<p>
	 
</p>

<p>
	<em>&gt; however, Cimalia Valerius had the gray face, despite the file present.</em>
</p>

<p>
	<em>&gt; it may have been because I was there along the whole process, I don't know</em>
</p>

<p>
	<span style="color:#c0392b;">=&gt; EDIT: this "bug" was quite interesting. It was coming from... Ordenator, which repacked the vanilla BSAs.</span>
</p>

<p>
	<span style="color:#c0392b;">So to make this export of facegeometry and facegendata working as expected, do not optimize your vanilla bsas with Ordenator.</span>
</p>

<p>
	 
</p>

<p>
	<strong>3. Scripting things.</strong>
</p>

<p>
	You can do the big-big part or just focus on the grow-to-teen process.
</p>

<p>
	 
</p>

<p>
	The big-big part is:
</p>

<p>
	- make the aliases arrays (or use an auto register), for example 64 children and 64 moms
</p>

<p>
	  &gt; a big mod should have 128 male children and 128 female ones, then 2*128 moms<br />
	- make all sets of hairs/eyes for children + base actors, anything you need for birth
</p>

<p>
	  &gt; Serana's boy and girl will require a bit of work...<br />
	- catch a birth signal by mod event (from a pregnancy mod) and spawn the child, setting all the head parts (similar as OnTeenAge, below)<br />
	- assign the child into an alias<br />
	- make sure you catch OnLoad in the child alias to refresh head parts when the child is loaded<br />
	- make a player alias to re-register your events (birth and becoming teen)<br />
	- create a package template with two sequential procedures: follow mom and sandbox
</p>

<p>
	  &gt; with conditions: inSameCell packageData-&gt;mom, don't forget to make the child run while following
</p>

<p>
	- create as many packages as the number of children aliases<br />
	- create as many mom aliases as the number of children aliases<br />
	- for package000, assign it to child alias000 and make it targetting to mom alias000
</p>

<p>
	With everything above, you have a complete children mod and it's not so hard to make.
</p>

<p>
	 
</p>

<p>
	Now to the grow-to-teen process.
</p>

<p>
	The design is to place a child into an alias.<br />
	Once in the alias, make it updating the scale from 0.5 to 0.8 (the latter being the scale of Skyrim's children).<br />
	And once the scale is 0.8, transform the child into a teen.<br />
	Then, make the teen grow, from 0.8 to 1.0.
</p>

<p>
	 
</p>

<p>
	I set 50 days for each grow.
</p>

<p>
	 
</p>

<p>
	Now, to the code.
</p>

<p>
	 
</p>

<p>
	<strong>The Kid Alias (interessing part)</strong><br />
	-------------
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Spoiler</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pun">;---</span><span class="pln"> ONUPDATEGAMETIME
</span><span class="typ">Event</span><span class="pln"> </span><span class="typ">OnUpdateGameTime</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">;</span><span class="pln"> fBirthday is the decimal game day when born
  </span><span class="pun">;</span><span class="pln"> fSpeedUp is a way to speed the grow
  </span><span class="pun">;</span><span class="pln"> </span><span class="typ">IsTeen</span><span class="pln"> is a boolean

  </span><span class="pun">;</span><span class="pln"> scale </span><span class="kwd">for</span><span class="pln"> child</span><span class="pun">:</span><span class="pln">
  </span><span class="pun">;</span><span class="pln"> </span><span class="lit">0.50</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0.80</span><span class="pun">,</span><span class="pln"> in </span><span class="lit">50</span><span class="pln"> days
  </span><span class="pun">;</span><span class="pln"> </span><span class="lit">0.625</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.375</span><span class="pln"> of range
  </span><span class="pun">;</span><span class="pln"> scale </span><span class="kwd">for</span><span class="pln"> teen</span><span class="pun">:</span><span class="pln">
  </span><span class="pun">;</span><span class="pln"> </span><span class="lit">0.80</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">1.00</span><span class="pun">,</span><span class="pln"> in </span><span class="lit">50</span><span class="pln"> days </span><span class="pun">(</span><span class="pln">same </span><span class="kwd">for</span><span class="pln"> range</span><span class="pun">)</span><span class="pln">

  </span><span class="typ">Float</span><span class="pln"> myGrow </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Utility</span><span class="pun">.</span><span class="typ">GetCurrentGameTime</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> fBirthDay </span><span class="pun">+</span><span class="pln"> fSpeedUp </span><span class="pun">;</span><span class="pln"> expressed in days
  myGrow </span><span class="pun">/=</span><span class="pln"> </span><span class="lit">50.0</span><span class="pln">
  </span><span class="typ">If</span><span class="pun">(</span><span class="pln">bIsTeen</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">If</span><span class="pun">(</span><span class="pln">myGrow </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">)</span><span class="pln">
      me</span><span class="pun">.</span><span class="typ">SetScale</span><span class="pun">(</span><span class="lit">1.0</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">Return</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> adult size</span><span class="pun">,</span><span class="pln"> no update needed anymore
    </span><span class="typ">Else</span><span class="pln">
      myGrow </span><span class="pun">*=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pln">
      myGrow </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">0.8</span><span class="pln">
      me</span><span class="pun">.</span><span class="typ">SetScale</span><span class="pun">(</span><span class="pln">myGrow</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">EndIf</span><span class="pln">
  </span><span class="typ">Else</span><span class="pln">
    </span><span class="typ">If</span><span class="pun">(</span><span class="pln">myGrow </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">)</span><span class="pln">
      </span><span class="pun">;</span><span class="pln"> become teen</span><span class="pun">,</span><span class="pln"> with a grow </span><span class="kwd">for</span><span class="pln"> </span><span class="lit">50</span><span class="pln"> another days </span><span class="pun">(</span><span class="pln">or remain a child</span><span class="pun">)</span><span class="pln">
      me</span><span class="pun">.</span><span class="typ">SetScale</span><span class="pun">(</span><span class="lit">1.0</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">Int</span><span class="pln"> handle </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ModEvent</span><span class="pun">.</span><span class="typ">Create</span><span class="pun">(</span><span class="str">"KidooTeenAge"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> </span><span class="pun">&lt;=</span><span class="pln"> that</span><span class="str">'</span><span class="pln">s it
      </span><span class="typ">ModEvent</span><span class="pun">.</span><span class="typ">PushInt</span><span class="pun">(</span><span class="pln">handle</span><span class="pun">,</span><span class="pln"> slot</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">ModEvent</span><span class="pun">.</span><span class="typ">Send</span><span class="pun">(</span><span class="pln">handle</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">Return</span><span class="pln">
    </span><span class="typ">Else</span><span class="pln">
      myGrow </span><span class="pun">*=</span><span class="pln"> </span><span class="lit">0.375</span><span class="pln">
      myGrow </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">0.625</span><span class="pln">
      me</span><span class="pun">.</span><span class="typ">SetScale</span><span class="pun">(</span><span class="pln">myGrow</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">EndIf</span><span class="pln">
  </span><span class="typ">EndIf</span><span class="pln">
  </span><span class="typ">RegisterForSingleUpdateGameTime</span><span class="pun">(</span><span class="lit">10.0</span><span class="pun">)</span><span class="pln">
</span><span class="typ">EndEvent</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	The code above works and has been tested.
</p>

<p>
	If a child cannot grow to teen (in the next script) then he/she will be stuck into the alias, with max children size. It's okay.
</p>

<p>
	 
</p>

<p>
	<strong>The Mod Event</strong><br />
	-------------
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Spoiler</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted">

<span class="pun">;---</span><span class="pln"> ONTEENAGE
</span><span class="typ">Event</span><span class="pln"> </span><span class="typ">OnTeenAge</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> i</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">Log</span><span class="pun">(</span><span class="str">"receiving teen age signal for slot "</span><span class="pun">+</span><span class="pln">i</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">KidAlias</span><span class="pln"> refAlias </span><span class="pun">=</span><span class="pln"> vChildren</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">KidAlias</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> vChildren is a referencealias</span><span class="pun">[]</span><span class="pln"> </span><span class="kwd">where</span><span class="pln"> all child</span><span class="pun">/</span><span class="pln">teen aliases </span><span class="kwd">auto</span><span class="pln"> registered on init
  </span><span class="typ">Actor</span><span class="pln"> refChild </span><span class="pun">=</span><span class="pln"> refAlias</span><span class="pun">.</span><span class="pln">me </span><span class="pun">;</span><span class="pln"> </span><span class="kwd">property</span><span class="pln"> </span><span class="str">"Actor me"</span><span class="pln"> on alias

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> we have a base actor</span><span class="pun">?</span><span class="pln">
  </span><span class="typ">Int</span><span class="pln"> refID
  </span><span class="typ">Actor</span><span class="pln"> myMother </span><span class="pun">=</span><span class="pln"> refAlias</span><span class="pun">.</span><span class="pln">myMother </span><span class="pun">;</span><span class="pln"> </span><span class="kwd">property</span><span class="pln"> </span><span class="str">"Actor myMother"</span><span class="pln"> on alias
  </span><span class="typ">Actor</span><span class="pln"> myFather </span><span class="pun">=</span><span class="pln"> refAlias</span><span class="pun">.</span><span class="pln">myFather </span><span class="pun">;</span><span class="pln"> </span><span class="kwd">property</span><span class="pln"> </span><span class="str">"Actor myFather"</span><span class="pln"> on alias
  </span><span class="typ">Int</span><span class="pln"> childSex </span><span class="pun">=</span><span class="pln"> refChild</span><span class="pun">.</span><span class="typ">GetLeveledActorBase</span><span class="pun">().</span><span class="typ">GetSex</span><span class="pun">()</span><span class="pln">
  </span><span class="typ">If</span><span class="pun">(</span><span class="pln">childSex </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln">
    refID </span><span class="pun">=</span><span class="pln"> myMother</span><span class="pun">.</span><span class="typ">GetLeveledActorBase</span><span class="pun">().</span><span class="typ">GetFormID</span><span class="pun">()</span><span class="pln">
  </span><span class="typ">Else</span><span class="pln">
    refID </span><span class="pun">=</span><span class="pln"> myFather</span><span class="pun">.</span><span class="typ">GetLeveledActorBase</span><span class="pun">().</span><span class="typ">GetFormID</span><span class="pun">()</span><span class="pln">
  </span><span class="typ">EndIf</span><span class="pln">

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> find a match in the database
  refID </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="typ">LogicalAnd</span><span class="pun">(</span><span class="pln">refID</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0x00FFFFFF</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">ActorBase</span><span class="pln"> refBase </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Game</span><span class="pun">.</span><span class="typ">GetFormFromFile</span><span class="pun">(</span><span class="pln">refID</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Teens.esp"</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">ActorBase</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> </span><span class="pun">&lt;=</span><span class="pln"> here
  </span><span class="typ">If</span><span class="pun">(!</span><span class="pln">refBase</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> </span><span class="pun">&lt;=</span><span class="pln"> nothing was found</span><span class="pun">,</span><span class="pln"> so the child will remain a child eternally
    </span><span class="typ">Log</span><span class="pun">(</span><span class="str">"no teen base found"</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">Return</span><span class="pln">
  </span><span class="typ">EndIf</span><span class="pln">
  </span><span class="typ">Log</span><span class="pun">(</span><span class="str">"teen base found: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> refBase</span><span class="pun">.</span><span class="typ">GetName</span><span class="pun">())</span><span class="pln">

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> store all data
  </span><span class="typ">Int</span><span class="pln"> iHair </span><span class="pun">=</span><span class="pln"> refAlias</span><span class="pun">.</span><span class="pln">iHair </span><span class="pun">;</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> is the index in the formlist of children hairs
  </span><span class="typ">Int</span><span class="pln"> iEyes </span><span class="pun">=</span><span class="pln"> refAlias</span><span class="pun">.</span><span class="pln">iEyes </span><span class="pun">;</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> is the index in the formlist of children eyes </span><span class="pun">(</span><span class="kwd">for</span><span class="pln"> non human</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">Float</span><span class="pln"> fBirthDay </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Utility</span><span class="pun">.</span><span class="typ">GetCurrentGameTime</span><span class="pun">()</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> reinit grow </span><span class="kwd">for</span><span class="pln"> </span><span class="lit">50</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> days
  </span><span class="typ">ColorForm</span><span class="pln"> refHairColor </span><span class="pun">=</span><span class="pln"> refAlias</span><span class="pun">.</span><span class="pln">refHairColor </span><span class="pun">;</span><span class="pln"> the </span><span class="typ">ColorForm</span><span class="pln"> used as a child

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> spawn the teen
  refBase</span><span class="pun">.</span><span class="typ">SetHairColor</span><span class="pun">(</span><span class="pln">refHairColor</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">Actor</span><span class="pln"> refTeen </span><span class="pun">=</span><span class="pln"> refChild</span><span class="pun">.</span><span class="typ">PlaceActorAtMe</span><span class="pun">(</span><span class="pln">refBase</span><span class="pun">)</span><span class="pln">
  refTeen</span><span class="pun">.</span><span class="typ">SetDisplayName</span><span class="pun">(</span><span class="pln">refChild</span><span class="pun">.</span><span class="typ">GetDisplayName</span><span class="pun">(),</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> transfer the name

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> assign </span><span class="kwd">new</span><span class="pln"> hair</span><span class="pun">,</span><span class="pln"> eyes with respect to those previously chosen </span><span class="kwd">for</span><span class="pln"> childhood
  </span><span class="pun">;</span><span class="pln"> the trick is</span><span class="pun">:</span><span class="pln"> the formlist </span><span class="kwd">for</span><span class="pln"> children and those </span><span class="kwd">for</span><span class="pln"> teens have the same internal order
  </span><span class="pun">;</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> example orc ice yes is at index </span><span class="lit">4</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> child</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> teen

  </span><span class="typ">Race</span><span class="pln"> myRace </span><span class="pun">=</span><span class="pln"> refTeen</span><span class="pun">.</span><span class="typ">GetRace</span><span class="pun">()</span><span class="pln">
  </span><span class="typ">FormList</span><span class="pln"> hairList
  </span><span class="typ">FormList</span><span class="pln"> eyesList

  </span><span class="typ">If</span><span class="pun">(</span><span class="pln">childSex</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">If</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">ArgonianRace</span><span class="pun">)</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenArgonianFemale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenArgonian</span><span class="pln">
    </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">BretonRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">ImperialRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">NordRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">RedguardRace</span><span class="pun">)</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenHumanFemale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenHuman</span><span class="pln">
      </span><span class="pun">;</span><span class="pln"> there s only one eyes </span><span class="kwd">for</span><span class="pln"> human children so we have to choose randonly here
      iEyes </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Utility</span><span class="pun">.</span><span class="typ">RandomInt</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> eyesList</span><span class="pun">.</span><span class="typ">GetSize</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> because I left inside</span><span class="pun">,</span><span class="pln"> at the last index</span><span class="pun">,</span><span class="pln"> vampire eyes </span><span class="pun">(</span><span class="pln">not used</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">DarkElfRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">HighElfRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">WoodElfRace</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">If</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">DarkElfRace</span><span class="pun">)</span><span class="pln">
        hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenDarkElfFemale</span><span class="pln">
        eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenDarkElf</span><span class="pln">
      </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">HighElfRace</span><span class="pun">)</span><span class="pln">
        eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenHighElf</span><span class="pln">
        hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenElfFemale</span><span class="pln">
      </span><span class="typ">Else</span><span class="pln">
        eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenWoodElf</span><span class="pln">
        hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenElfFemale</span><span class="pln">
      </span><span class="typ">EndIf</span><span class="pln">
    </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">KhajiitRace</span><span class="pun">)</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenKhajiitFemale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenKhajiit</span><span class="pln">
    </span><span class="typ">Else</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenOrcFemale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenOrc</span><span class="pln">
    </span><span class="typ">EndIf</span><span class="pln">
  </span><span class="typ">Else</span><span class="pln">
    </span><span class="typ">If</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">ArgonianRace</span><span class="pun">)</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenArgonianMale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenArgonian</span><span class="pln">
    </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">BretonRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">ImperialRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">NordRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">RedguardRace</span><span class="pun">)</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenHumanMale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenHuman</span><span class="pln">
      iEyes </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Utility</span><span class="pun">.</span><span class="typ">RandomInt</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> eyesList</span><span class="pun">.</span><span class="typ">GetSize</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">DarkElfRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">HighElfRace</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">WoodElfRace</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">If</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">DarkElfRace</span><span class="pun">)</span><span class="pln">
        hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenDarkElfMale</span><span class="pln">
        eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenDarkElf</span><span class="pln">
      </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">HighElfRace</span><span class="pun">)</span><span class="pln">
        eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenHighElf</span><span class="pln">
        hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenElfMale</span><span class="pln">
      </span><span class="typ">Else</span><span class="pln">
        eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenWoodElf</span><span class="pln">
        hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenElfMale</span><span class="pln">
      </span><span class="typ">EndIf</span><span class="pln">
    </span><span class="typ">ElseIf</span><span class="pun">(</span><span class="pln">myRace </span><span class="pun">==</span><span class="pln"> </span><span class="typ">KhajiitRace</span><span class="pun">)</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenKhajiitMale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenKhajiit</span><span class="pln">
    </span><span class="typ">Else</span><span class="pln">
      hairList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_HairTeenOrcMale</span><span class="pln">
      eyesList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">_EyesTeenOrc</span><span class="pln">
    </span><span class="typ">EndIf</span><span class="pln">
  </span><span class="typ">EndI</span><span class="pln">
  </span><span class="pun">;</span><span class="pln"> as you see above</span><span class="pun">,</span><span class="pln"> there s a lot of formlists to make</span><span class="pun">...</span><span class="pln">

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> assign the </span><span class="kwd">new</span><span class="pln"> hair style and eyes
  </span><span class="typ">HeadPart</span><span class="pln"> refHair </span><span class="pun">=</span><span class="pln"> hairList</span><span class="pun">.</span><span class="typ">GetAt</span><span class="pun">(</span><span class="pln">iHair</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">HeadPart</span><span class="pln">
  </span><span class="typ">HeadPart</span><span class="pln"> refEyes </span><span class="pun">=</span><span class="pln"> eyesList</span><span class="pun">.</span><span class="typ">GetAt</span><span class="pun">(</span><span class="pln">iEyes</span><span class="pun">)</span><span class="pln"> </span><span class="typ">As</span><span class="pln"> </span><span class="typ">HeadPart</span><span class="pln">
  refTeen</span><span class="pun">.</span><span class="typ">ChangeHeadPart</span><span class="pun">(</span><span class="pln">refHair</span><span class="pun">)</span><span class="pln">
  refTeen</span><span class="pun">.</span><span class="typ">ChangeHeadPart</span><span class="pun">(</span><span class="pln">refEyes</span><span class="pun">)</span><span class="pln">
  refTeen</span><span class="pun">.</span><span class="typ">QueueNiNodeUpdate</span><span class="pun">()</span><span class="pln">

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> prepare
  refTeen</span><span class="pun">.</span><span class="typ">SetScale</span><span class="pun">(</span><span class="lit">0.8</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> the initial scale of a teen
  refTeen</span><span class="pun">.</span><span class="typ">AddToFaction</span><span class="pun">(</span><span class="typ">KidFaction</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> something to identify them quickly

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="kwd">delete</span><span class="pln"> now the child
  </span><span class="typ">Log</span><span class="pun">(</span><span class="str">"deleting child form"</span><span class="pun">)</span><span class="pln">
  refAlias</span><span class="pun">.</span><span class="typ">Cleanup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> mostly clear</span><span class="pun">()</span><span class="pln">
  refChild</span><span class="pun">.</span><span class="typ">Delete</span><span class="pun">()</span><span class="pln">

  </span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> assign the teen
  refAlias</span><span class="pun">.</span><span class="typ">ForceRefTo</span><span class="pun">(</span><span class="pln">refTeen</span><span class="pun">)</span><span class="pln">
  refAlias</span><span class="pun">.</span><span class="typ">Initialize</span><span class="pun">(</span><span class="pln">myMother</span><span class="pun">,</span><span class="pln"> myFather</span><span class="pun">,</span><span class="pln"> fBirthDay</span><span class="pun">,</span><span class="pln"> refHairColor</span><span class="pun">,</span><span class="pln"> hairList</span><span class="pun">,</span><span class="pln"> eyesList</span><span class="pun">,</span><span class="pln"> iHair</span><span class="pun">,</span><span class="pln"> iEyes</span><span class="pun">,</span><span class="pln"> i</span><span class="pun">,</span><span class="pln"> bIAmTeen </span><span class="pun">=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> i was the slot parameter of </span><span class="kwd">this</span><span class="pln"> event
  </span><span class="typ">Debug</span><span class="pun">.</span><span class="typ">Notification</span><span class="pun">(</span><span class="pln">refTeen</span><span class="pun">.</span><span class="typ">GetDisplayName</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">" has become a teen"</span><span class="pun">)</span><span class="pln">
</span><span class="typ">EndEvent</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	<br />
	 
</p>

<p>
	For existing children, you have to place them into an alias, with their mom and dad, so it may be a bit tricky to retrieve information.
</p>

<p>
	But hey, after a while, Whiterun children will be all teens!
</p>

<p>
	 
</p>

<p>
	Now the little story: I made this log entry because one of my friends doubted it was possible to grow children to teens in Skyrim.
</p>

<p>
	I'll be happy to show the result.
</p>

<p>
	 
</p>

<p>
	Feel free to plunder the code if you are interested.
</p>]]></description><guid isPermaLink="false">10753</guid><pubDate>Fri, 06 Mar 2020 22:11:00 +0000</pubDate></item><item><title>OBSE co-save file surgery</title><link>https://www.loverslab.com/blogs/entry/10557-obse-co-save-file-surgery/</link><description><![CDATA[<p>
	This entry is intended to store some RegExp to search through the OBSE co-save of a savegame file of Oblivion.
</p>

<p>
	 
</p>

<p>
	Searching data in OBSE co-save may appear stupid.
</p>

<p>
	After all, if a mod pollutes the co-save with inconsistent data, you just have to remove the mod to clean the mess.
</p>

<p>
	Sometimes however, you do not want to remove the mod. In this case, you need to search for certain data and, after a careful consideration, to delete/edit this certain data.
</p>

<p>
	And when the co-save is about 2-3 Mo, searching inside is a pain.
</p>

<p>
	 
</p>

<p>
	I don't know if anyone post anything related to this subject.
</p>

<p>
	Perhaps there's a co-save viewer/editor existing somewhere, but I wasn't able to find it.
</p>

<p>
	 
</p>

<p>
	Through Wrye Bash, you can ask for OBSE stats by right clicking a regular save. This gives you hints.
</p>

<p>
	Now, I'm talking about deleting parts of the co-save or modify them.
</p>

<p>
	 
</p>

<p>
	You need first a text-editor able to read hexadecimal values.
</p>

<p>
	Some hex-editors will be fine, however you need an editor with a regexp search.
</p>

<p>
	For most of them, you have to buy a license and so on, but you can dowload MadEdit for free, which has the search feature we want.
</p>

<p>
	  &gt; With MadEdit, long outputs can overflow the buffer, resulting in an "exclamation" of the software: just position your cursor the line below and retry
</p>

<p>
	Otherwise, use your favorite editor.
</p>

<p>
	 
</p>

<p>
	Hit Ctrl+F and choose "find with regular expression", or "regexp find".
</p>

<p>
	The parts interesting you are either Strings (RVTS entries) or Arrays (RVRA entries).
</p>

<p>
	Some tags mark the beginning/end of all Strings or of all Arrays, like EVRA: end of arrays, SVRA: start of arrays.
</p>

<p>
	 
</p>

<p>
	Select the next String:
</p>

<pre class="ipsCode prettyprint lang-perl prettyprinted">
<span class="pln">RVTS</span><span class="pun">(.*?)(?=</span><span class="pln">RVTS</span><span class="pun">|</span><span class="pln">SVRA</span><span class="pun">)</span></pre>

<p>
	Select the next Array:
</p>

<pre class="ipsCode prettyprint lang-perl prettyprinted">
<span class="pln">RVRA</span><span class="pun">(.*?)(?=</span><span class="pln">RVRA</span><span class="pun">|</span><span class="pln">EVRA</span><span class="pun">)</span></pre>

<p>
	Select the next array containing containing the word "Dummy" or the next String containing the word "LVL":
</p>

<pre class="ipsCode prettyprint lang-perl prettyprinted">
<span class="pln">RVRA</span><span class="pun">(?=(?(?!</span><span class="pln">RVRA</span><span class="pun">).)*</span><span class="typ">Dummy</span><span class="pun">)(.*?)(?=</span><span class="pln">RVRA</span><span class="pun">|</span><span class="pln">EVRA</span><span class="pun">)</span><span class="pln">
RVTS</span><span class="pun">(?=(?(?!</span><span class="pln">RVTS</span><span class="pun">).)*</span><span class="pln">LVL</span><span class="pun">)(.*?)(?=</span><span class="pln">RVTS</span><span class="pun">|</span><span class="pln">SVRA</span><span class="pun">)</span></pre>

<p>
	You can search for a FormID instead, if the mod stores them in one or many of its arrays.
</p>

<p>
	In this case, adapt the regexp with the following one showing you how to write hexadecimal numbers.
</p>

<p>
	 
</p>

<p>
	Select the next array owned by the mod #31 (hexadecimal number) in your load order, this number is preceded by 3 null bytes:
</p>

<pre class="ipsCode prettyprint lang-perl prettyprinted">
<span class="pln">RVRA</span><span class="pun">(?=(?(?!</span><span class="pln">RVRA</span><span class="pun">).)*</span><span class="pln">\x</span><span class="lit">00</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}</span><span class="pln">\x</span><span class="lit">31</span><span class="pun">)(.*?)(?=</span><span class="pln">RVRA</span><span class="pun">)</span></pre>

<p>
	You should have no problem to deduce how to find the next string for mod #31...
</p>

<p>
	 
</p>

<p>
	These regexps will highlight parts of data in your co-save.
</p>

<p>
	This is not a way to diagnose-for-nothing. You can compromise a mod by messing the entries.
</p>

<p>
	You should search for specific things. Ideally, you'd want to clean some mod data, without restarting a game or removing the mod.
</p>

<p>
	 
</p>

<p>
	<img alt="MadEdit.jpg.64ce8a9f66db713e8cb52ad644aae62e.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="841716" data-ratio="96.55" style="width:290px;height:auto;" width="890" src="https://www.loverslab.com/uploads/monthly_2020_01/MadEdit.jpg.64ce8a9f66db713e8cb52ad644aae62e.jpg" /></p>

<p>
	<em>Above: highlighting the second string in autosave.obse with MadEdit</em>
</p>

<p>
	 
</p>

<p>
	Once your search highlight the matching entry, you can modify it carefully, or simply delete it.
</p>

<p>
	By deleting entries, you must spare special tags (like SVRA) and delete from RVTS to *before* the next RVTS (RVRA for arrays).
</p>

<p>
	 
</p>

<p>
	For deletion:
</p>

<p>
	If you are curious, you'll notice OBSE stores the exact number of entries in the header of your co-save.
</p>

<p>
	So if you delete one, you may expect trouble. In fact, there's no trouble.
</p>

<p>
	OBSE will indeed complain it could not find all the entries. But since the related entries where bad for you, what's the trouble? None.
</p>

<p>
	 
</p>

<p>
	All these manipulation have been performed by myself on a polluted co-save of my own.
</p>

<p>
	I mostly deleted entries, because I forgot to destroy strings through a mod devel. But I also edited two ref ids in an array I corrupted unintentionaly.
</p>

<p>
	It also helps me to diagnose and monitor the current entries of some mods liking bulky data (like SetBody) or horrid StringMaps (like Tamago).
</p>

<p>
	 
</p>

<p>
	Perhaps this post will have no use. But if a gamer wants to repair something in a co-save, it may help.
</p>]]></description><guid isPermaLink="false">10557</guid><pubDate>Fri, 17 Jan 2020 09:46:00 +0000</pubDate></item></channel></rss>
