<?xml version="1.0"?>
<rss version="2.0"><channel><title/><link>https://www.loverslab.com/blogs/blog/2206-mm1-file-dump/</link><description><![CDATA[<p>
	Sorry for the blog spam. I don't know what I'm doing with blogs....
</p>
]]></description><language>en</language><item><title>MGF</title><link>https://www.loverslab.com/blogs/entry/25657-mgf/</link><description><![CDATA[<p>
	Just wanted to show off a little something I've been working on. This is the Room Mapping system in MGF. Does what you think it does. What you see is the ActorRoomChange event being received which triggers a RoomMap() for the current room using static soul gems as navmesh vertex markers to visually define the room (for debugging purposes). 
</p>

<p>
	 
</p>

<div class="ipsEmbeddedVideo" contenteditable="false">
	<div>
		<iframe allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" frameborder="0" height="240" referrerpolicy="strict-origin-when-cross-origin" src="https://player.vimeo.com/video/1196058688?app_id=122963" title="Timeline 1" width="426"></iframe>
	</div>
</div>

<p>
	<br>
	<br>
	API surface thus far:<br>
	 
</p>

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

	<div class="ipsSpoiler_contents ipsClearfix" data-gramm="false">
		<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_5645_15" style=""><span class="pun">;========================================================================================</span><span class="pln">
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Room</span><span class="pln"> </span><span class="typ">Detection</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Experimental</span><span class="pun">)(</span><span class="pln">WIP</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="pun">;</span><span class="pln"> </span><span class="typ">Register</span><span class="pln"> a form </span><span class="kwd">for</span><span class="pln"> reference room change events</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Registrations</span><span class="pln"> survive save </span><span class="pun">+</span><span class="pln"> reload</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Event</span><span class="pln"> </span><span class="typ">On_MGF_ActorRoomChange</span><span class="pun">(</span><span class="typ">Actor</span><span class="pln"> akActor</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Int</span><span class="pln"> </span><span class="typ">OldRoom</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Int</span><span class="pln"> </span><span class="typ">NewRoom</span><span class="pun">)</span><span class="pln">
</span><span class="pun">;</span><span class="pln"> akActor</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> actor that changed room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">OldRoom</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room akActor came from</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">NewRoom</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room akActor is now in</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomTrackActor</span><span class="pun">(</span><span class="typ">Form</span><span class="pln"> akForm</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Unregister</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> reference </span><span class="kwd">for</span><span class="pln"> room change events</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomUntrackActor</span><span class="pun">(</span><span class="typ">Form</span><span class="pln"> akForm</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Untrack</span><span class="pln"> all references</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomUntrackAll</span><span class="pun">(</span><span class="typ">Form</span><span class="pln"> akForm</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Is</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> reference registered </span><span class="kwd">for</span><span class="pln"> room change events on </span><span class="kwd">this</span><span class="pln"> form</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomIsTrackedActor</span><span class="pun">(</span><span class="typ">Form</span><span class="pln"> akForm</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ObjectReference</span><span class="pln"> akRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> a list </span><span class="kwd">of</span><span class="pln"> all references registered </span><span class="kwd">for</span><span class="pln"> tracking on </span><span class="kwd">this</span><span class="pln"> form</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">ObjectReference</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetTrackedActors</span><span class="pun">(</span><span class="typ">Form</span><span class="pln"> akForm</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> whether </span><span class="kwd">this</span><span class="pln"> form has been registered in the room system</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> opening</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> stair</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> not registered</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomIsRegisteredStatic</span><span class="pun">(</span><span class="typ">Form</span><span class="pln"> akForm</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomRegisterStatic</span><span class="pun">(</span><span class="typ">Form</span><span class="pln"> akForm</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> aiType</span><span class="pun">,</span><span class="pln"> string asFile</span><span class="pun">).</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">When</span><span class="pln"> registering an opening</span><span class="pun">,</span><span class="pln"> stand in the center </span><span class="kwd">of</span><span class="pln"> the opening and face the </span><span class="str">'door jamb'</span><span class="pun">,</span><span class="pln"> so that you</span><span class="str">'</span><span class="pln">re facing parallel
</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">with</span><span class="pln"> the dividing wall and at </span><span class="lit">90</span><span class="pln"> degrees from the angle </span><span class="kwd">of</span><span class="pln"> the opening</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> more centered you are in both the x</span><span class="pun">,</span><span class="pln"> y axis the better the results generally</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Type</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> opening</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> stair
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">FileName</span><span class="pun">:</span><span class="pln"> filename only </span><span class="pun">(</span><span class="pln">no path separators</span><span class="pun">).</span><span class="pln"> </span><span class="typ">Eg</span><span class="pun">:</span><span class="pln"> </span><span class="str">"mymod.json"</span><span class="pln">
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomRegisterStatic</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> akRef</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Type</span><span class="pun">,</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="typ">FileName</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Attempts</span><span class="pln"> to add a boundary where akActor is standing</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> success</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Stand</span><span class="pln"> in the center </span><span class="kwd">of</span><span class="pln"> the opening and face parallel </span><span class="kwd">with</span><span class="pln"> the dividing wall</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> system will </span><span class="kwd">try</span><span class="pln"> to find the closest</span><span class="pun">,</span><span class="pln"> parallel edge to create a </span><span class="kwd">new</span><span class="pln"> boundary</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Boundaries</span><span class="pln"> are saved to json </span><span class="pun">&lt;</span><span class="typ">FileName</span><span class="pun">&gt;</span><span class="pln">
</span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomAddBoundary</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> </span><span class="typ">FileName</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Attempts</span><span class="pln"> to remove a boundary within </span><span class="typ">Radius</span><span class="pln"> </span><span class="kwd">of</span><span class="pln"> the player</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> success</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Removes</span><span class="pln"> all manual boundaries within </span><span class="pun">&lt;</span><span class="typ">Radius</span><span class="pun">&gt;</span><span class="pln"> from all jsons</span><span class="pun">.</span><span class="pln">  
</span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomRemoveBoundary</span><span class="pun">(</span><span class="typ">Float</span><span class="pln"> </span><span class="typ">Radius</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">64.0</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> how many manual boundaries in the current cell</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetOverrideCount</span><span class="pun">()</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomRegisterObjectsAs</span><span class="pun">(</span><span class="typ">Form</span><span class="pun">[]</span><span class="pln"> akForms</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> aiRole</span><span class="pun">,</span><span class="pln"> string asModName</span><span class="pun">)</span><span class="pln"> native global
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomUnregisterMod</span><span class="pun">(</span><span class="pln">string asModName</span><span class="pun">)</span><span class="pln"> native global
</span><span class="typ">String</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetClassificationScores</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> aiRoom</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomUnregisterStatic</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> akRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Remap</span><span class="pln"> the current cell again</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomRemapCell</span><span class="pun">()</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Force</span><span class="pln"> the system to ignore a particular door reference</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Need</span><span class="pln"> to call </span><span class="typ">RoomRemapCell</span><span class="pun">()</span><span class="pln"> afterwards to update the room map</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Added</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> after discovering a door buried in a wall in </span><span class="typ">Dragonsreach</span><span class="pln"> messing up the room mapping</span><span class="pun">...</span><span class="pln">
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Unlike</span><span class="pln"> </span><span class="typ">RoomIsIgnoredDoorEid</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> affects a single reference</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomIgnoreDoorRef</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Opposite</span><span class="pln"> </span><span class="kwd">of</span><span class="pln"> </span><span class="typ">RoomIgnoreDoorRef</span><span class="pun">().</span><span class="pln"> 
</span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomUnignoreDoorRef</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> reference is in MGF</span><span class="str">'</span><span class="pln">s door reference ignore list</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomIsIgnoredDoorRef</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Is</span><span class="pln"> defined </span><span class="pun">(</span><span class="pln">via json</span><span class="pun">)</span><span class="pln"> as a </span><span class="str">'weird door'</span><span class="pln"> the system should ignore</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Eg</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Display</span><span class="pln"> cases</span><span class="pun">,</span><span class="pln"> shackles</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">This</span><span class="pln"> is essentially a string check </span><span class="kwd">of</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="str">'s base EditorID against MGF'</span><span class="pln">s list </span><span class="kwd">of</span><span class="pln"> strings to ignore</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomIsIgnoredDoorEid</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> boundary midpoints as flat </span><span class="pun">[</span><span class="pln">x</span><span class="pun">,</span><span class="pln">y</span><span class="pun">,</span><span class="pln">z</span><span class="pun">,</span><span class="pln"> </span><span class="pun">...]</span><span class="pln"> </span><span class="kwd">float</span><span class="pln"> array</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">These</span><span class="pln"> are the positions </span><span class="kwd">of</span><span class="pln"> the entrances</span><span class="pun">/</span><span class="pln">exits to a room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room to check</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Float</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetBoundaryMidpoints</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> the navmesh triangle count </span><span class="kwd">of</span><span class="pln"> the room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room to check</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetTriangleCount</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetTriangleForRef</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetTriangleFlags</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Tries</span><span class="pln"> to </span><span class="kwd">return</span><span class="pln"> the center position </span><span class="kwd">of</span><span class="pln"> the navmesh </span><span class="kwd">for</span><span class="pln"> the room </span><span class="kwd">with</span><span class="pln"> the specified clearance around it</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Useful</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> placing markers etc</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Always</span><span class="pln"> check the returned array</span><span class="pun">.</span><span class="typ">Length</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> to check </span><span class="kwd">for</span><span class="pln"> failure</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> will always </span><span class="kwd">try</span><span class="pln"> to </span><span class="kwd">return</span><span class="pln"> the best point even </span><span class="kwd">if</span><span class="pln"> the clearance isn</span><span class="str">'</span><span class="pln">t fully met or a clearance </span><span class="kwd">of</span><span class="pln"> </span><span class="lit">0.0</span><span class="pln"> is requested</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Note</span><span class="pln"> that </span><span class="kwd">this</span><span class="pln"> is the navmesh center and not the room center really</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Float</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetCenter</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Float</span><span class="pln"> </span><span class="typ">Clearance</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">This</span><span class="pln"> would be a more </span><span class="str">'exact'</span><span class="pln"> center </span><span class="kwd">of</span><span class="pln"> the room geometrically</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Probably</span><span class="pln"> still not perfect because </span><span class="kwd">of</span><span class="pln"> the navmesh shape</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Though</span><span class="pln"> it might be floating in air a bit or inside some object like a pillar or fireplace etc</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Also</span><span class="pln"> check that length </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> failure</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Float</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetCentroid</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Get</span><span class="pln"> the area covered by the navmesh associated </span><span class="kwd">with</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Not</span><span class="pln"> the actual area </span><span class="kwd">of</span><span class="pln"> the room</span><span class="pun">.</span><span class="pln"> </span><span class="typ">But</span><span class="pln"> should be a decent indicator </span><span class="kwd">of</span><span class="pln"> room size</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Float</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetArea</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> total number </span><span class="kwd">of</span><span class="pln"> rooms detected in player</span><span class="str">'</span><span class="pln">s current cell
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetCount</span><span class="pun">()</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> the indices </span><span class="kwd">of</span><span class="pln"> all connecting rooms</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room to check</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Int</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetAdjacentRooms</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> actor</span><span class="str">'</span><span class="pln">s room within the cell</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetIndexForActor</span><span class="pun">(</span><span class="typ">Actor</span><span class="pln"> akActor</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> reference</span><span class="str">'</span><span class="pln">s room within the cell</span><span class="pun">.</span><span class="pln">
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetIndexForRef</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> akRef</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Gets</span><span class="pln"> the number </span><span class="kwd">of</span><span class="pln"> entrances</span><span class="pun">/</span><span class="pln">exits to a room</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Includes</span><span class="pln"> load doors</span><span class="pun">,</span><span class="pln"> interior doors</span><span class="pun">,</span><span class="pln"> door arches </span><span class="pun">(</span><span class="pln">without doors</span><span class="pun">)</span><span class="pln"> and stairs</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room to check</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pun">:</span><span class="pln"> </span><span class="typ">False</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Don</span><span class="str">'</span><span class="pln">t go past any </span><span class="kwd">of</span><span class="pln"> the rooms boundaries</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> 						  </span><span class="typ">True</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Expand</span><span class="pln"> over open boundaries like door arches and stairs</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">If</span><span class="pln"> </span><span class="typ">RoomGetExitCount</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="typ">RoomGetDoors</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> then it</span><span class="str">'</span><span class="pln">s probably </span><span class="pun">(</span><span class="pln">but not certainly</span><span class="pun">)</span><span class="pln"> a room </span><span class="kwd">with</span><span class="pln"> a single entrance </span><span class="kwd">with</span><span class="pln"> a door</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">If</span><span class="pln"> </span><span class="typ">RoomGetExitCount</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="typ">RoomGetDoors</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> then it</span><span class="str">'s probably (but not certainly) a room with a single '</span><span class="pln">open</span><span class="str">'</span><span class="pln"> entrance</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetExitCount</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> door references that are associated </span><span class="kwd">with</span><span class="pln"> a room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">DoorTypes</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> any</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> non</span><span class="pun">-</span><span class="pln">load doors only</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> load doors only
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pun">:</span><span class="pln"> </span><span class="typ">False</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Don</span><span class="str">'</span><span class="pln">t go past any </span><span class="kwd">of</span><span class="pln"> the rooms boundaries</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> 						  </span><span class="typ">True</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Expand</span><span class="pln"> over open boundaries like door arches and stairs</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">ObjectReference</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetDoors</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Int</span><span class="pln"> </span><span class="typ">DoorTypes</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> all furniture references in a room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room to check</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pun">:</span><span class="pln"> </span><span class="typ">False</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Don</span><span class="str">'</span><span class="pln">t go past any </span><span class="kwd">of</span><span class="pln"> the rooms boundaries</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> 						  </span><span class="typ">True</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Expand</span><span class="pln"> over open boundaries like door arches and stairs</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">ObjectReference</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetFurniture</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> a list </span><span class="kwd">of</span><span class="pln"> object references </span><span class="kwd">with</span><span class="pln"> any </span><span class="kwd">of</span><span class="pln"> the listed keywords</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room to check</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pun">:</span><span class="pln"> </span><span class="typ">False</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Don</span><span class="str">'</span><span class="pln">t go past any </span><span class="kwd">of</span><span class="pln"> the rooms boundaries</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> 						  </span><span class="typ">True</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Expand</span><span class="pln"> over open boundaries like door arches and stairs</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">ObjectReference</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetRefsWithKeywords</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Keyword</span><span class="pun">[]</span><span class="pln"> akKwds</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Same</span><span class="pln"> as </span><span class="typ">RoomGetRefsWithKeywords</span><span class="pln"> but only returns a count</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomCountRefsWithKeywords</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Keyword</span><span class="pun">[]</span><span class="pln"> akKwds</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> references in </span><span class="pun">&lt;</span><span class="typ">RoomIndex</span><span class="pun">&gt;</span><span class="pln"> </span><span class="kwd">of</span><span class="pln"> type </span><span class="pun">&lt;</span><span class="typ">FormType</span><span class="pun">&gt;.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">FormType</span><span class="pun">:</span><span class="pln"> https</span><span class="pun">:</span><span class="com">//ck.uesp.net/wiki/GetType_-_Form</span><span class="pln">
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pun">:</span><span class="pln"> </span><span class="typ">False</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Don</span><span class="str">'</span><span class="pln">t go past any </span><span class="kwd">of</span><span class="pln"> the rooms boundaries</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> 						  </span><span class="typ">True</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Expand</span><span class="pln"> over open boundaries like door arches and stairs</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">ObjectReference</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetRefsOfType</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Int</span><span class="pln"> </span><span class="typ">FormType</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> all actors in a room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> index </span><span class="kwd">of</span><span class="pln"> the room to check</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pun">:</span><span class="pln"> </span><span class="typ">False</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Don</span><span class="str">'</span><span class="pln">t go past any </span><span class="kwd">of</span><span class="pln"> the rooms boundaries</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> 						  </span><span class="typ">True</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Expand</span><span class="pln"> over open boundaries like door arches and stairs</span><span class="pun">.</span><span class="pln"> 
</span><span class="typ">Actor</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetActors</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Bool</span><span class="pln"> </span><span class="typ">ExpandOverOpenBoundary</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">False</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Approximate</span><span class="pln"> navmesh path distance in game units between the positions </span><span class="kwd">of</span><span class="pln"> the two references</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1.0</span><span class="pln"> </span><span class="kwd">if</span><span class="pun">:</span><span class="pln">	either ref is </span><span class="kwd">null</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> outside the navmesh</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln">					they are in different cells</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln">					the room data isn</span><span class="str">'</span><span class="pln">t ready yet
</span><span class="pun">;</span><span class="pln">					no path exists within the A</span><span class="pun">*</span><span class="pln"> node budget </span><span class="pun">(</span><span class="lit">8192</span><span class="pln"> triangles</span><span class="pun">)</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">GetDistance</span><span class="pln"> will always be </span><span class="pun">&lt;=</span><span class="pln"> than </span><span class="typ">RoomGetPathDistance</span><span class="pun">.</span><span class="pln"> </span><span class="typ">What</span><span class="str">'</span><span class="pln">s the point </span><span class="kwd">of</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">?</span><span class="pln">
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">RoomGetPathDistance</span><span class="pun">(</span><span class="typ">PlayerRef</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="typ">PlayerRef</span><span class="pun">.</span><span class="typ">GetDistance</span><span class="pun">(</span><span class="typ">ObjRef</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">~</span><span class="lit">1.4</span><span class="pln"> means that there is a significant difference between
</span><span class="pun">;</span><span class="pln"> direct distance to the object and the pathing distance to the object</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> IE</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Object</span><span class="pln"> could be through a wall or on another floor</span><span class="pun">.</span><span class="pln"> 

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Despite</span><span class="pln"> the name </span><span class="kwd">this</span><span class="pln"> works in exterior cells too though be aware that it has a distance limit due to the triangle budget above and
</span><span class="pun">;</span><span class="pln"> the object must be in the same cell</span><span class="pun">.</span><span class="pln"> 

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Same</span><span class="pln"> navmesh island</span><span class="pun">:</span><span class="pln">	A</span><span class="pun">*</span><span class="pln"> on triangle adjacency graph</span><span class="pun">.</span><span class="pln">
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Different</span><span class="pln"> islands</span><span class="pun">:</span><span class="pln">	</span><span class="typ">Dijkstra</span><span class="pln"> on the room boundary graph</span><span class="pun">,</span><span class="pln"> straight</span><span class="pun">-</span><span class="pln">line between boundary midpoints</span><span class="pun">.</span><span class="pln">
</span><span class="pun">;</span><span class="pln">                      	</span><span class="typ">Less</span><span class="pln"> precise but handles multi</span><span class="pun">-</span><span class="pln">level cells</span><span class="pun">.</span><span class="pln">
</span><span class="typ">Float</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetPathDistance</span><span class="pun">(</span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef1</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ObjectReference</span><span class="pln"> </span><span class="typ">ObjRef2</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Returns</span><span class="pln"> a flat array </span><span class="kwd">of</span><span class="pln"> the navmesh vertices that constitute </span><span class="kwd">this</span><span class="pln"> room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Array</span><span class="pln"> elements are in triplets</span><span class="pun">.</span><span class="pln"> </span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> x1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> y1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> z1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="lit">4</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> x2</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="lit">5</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> y2</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="lit">6</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> z2 etc
</span><span class="typ">Float</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomGetNavmeshVertices</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span><span class="pln">

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Places</span><span class="pln"> </span><span class="typ">MarkerForms</span><span class="pln"> at every vertex that constitute the room</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Easy</span><span class="pln"> visualization </span><span class="kwd">of</span><span class="pln"> the room limits</span><span class="pun">.</span><span class="pln"> </span><span class="typ">References</span><span class="pln"> are spawned </span><span class="kwd">with</span><span class="pln"> persist </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">.</span><span class="pln"> 
</span><span class="pun">;</span><span class="pln"> </span><span class="typ">But</span><span class="pln"> it</span><span class="str">'</span><span class="pln">s your responsibility to manage the returned object references </span><span class="pun">(</span><span class="pln">cleanup</span><span class="pun">).</span><span class="pln"> 
</span><span class="typ">ObjectReference</span><span class="pun">[]</span><span class="pln"> </span><span class="typ">Function</span><span class="pln"> </span><span class="typ">RoomMap</span><span class="pun">(</span><span class="typ">Int</span><span class="pln"> </span><span class="typ">RoomIndex</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Form</span><span class="pln"> </span><span class="typ">MarkerForm</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Global</span><span class="pln"> </span><span class="typ">Native</span></pre>

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

<p>
	 
</p>
]]></description><guid isPermaLink="false">25657</guid><pubDate>Wed, 27 May 2026 18:38:39 +0000</pubDate></item><item><title><![CDATA[Mortal Weapons & Armor]]></title><link>https://www.loverslab.com/blogs/entry/20180-mortal-weapons-armor/</link><description><![CDATA[<p>
	<span style="font-size:28px;"><a href="https://www.loverslab.com/topic/108964-mortal-weapons-armors/" rel="">Mortal Weapons &amp; Armor</a></span>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859409" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859409&amp;key=fec6afbb05fb0baebeebf9c3e889827d" rel="">Mortal Weapons &amp; Armor v0.45 (21-Nov-2019).7z</a>
</p>
]]></description><guid isPermaLink="false">20180</guid><pubDate>Fri, 10 Nov 2023 03:27:25 +0000</pubDate></item><item><title>Milk Addict</title><link>https://www.loverslab.com/blogs/entry/20179-milk-addict/</link><description><![CDATA[<p>
	<span style="font-size:28px;"><a href="https://www.loverslab.com/topic/97335-milk-addict/" rel="">Milk Addict</a></span>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859408" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859408&amp;key=9989270838a35667613a0464de29e06e" rel="">Milk Addict v0.53 (25-Mar-2019).7z</a>
</p>
]]></description><guid isPermaLink="false">20179</guid><pubDate>Fri, 10 Nov 2023 03:26:02 +0000</pubDate></item><item><title>Tweaks</title><link>https://www.loverslab.com/blogs/entry/20178-tweaks/</link><description><![CDATA[<p>
	<span style="font-size:28px;"><a href="https://www.loverslab.com/topic/107720-monomans-mod-tweaks/" rel="">Monoman's Mod Tweaks</a></span>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1905430" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1905430&amp;key=58642de47df508920d206f68146d3ac7" rel="">Amputator Framework Tweaked v1.6 (07-May-2021).7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="2330495" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=2330495&amp;key=c815ab9495d84652c8f326526b524197" rel="">Amputator Framework Tweaked v1.6 SE (07-May-2021).7z</a>
</p>

<p>
	 
</p>

<p>
	SLIF <span style="color:#e74c3c;"><u><strong>SE</strong></u></span> 1.2.2 beta patch: <a class="ipsAttachLink" data-fileext="7z" data-fileid="2330496" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=2330496&amp;key=9302e2eaf628646c19d21f587f3805ba" rel="">SLIF patch.7z</a> - SLIF_Scale - Something about check "NiOverride.HasNodeTransformScale()" in function "UpdateNodeTransformConditional()" is causing node to reset. Suspect RaceMenu issue (v0.4.19.16). 
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859400" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859400&amp;key=318142bba5b7eb6d7024328910fdd60f" rel="">Aroused Nips Tweaked v1.6 (29-Jun-2020).7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859401" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859401&amp;key=5b4d79508f04a052309a8c730f81a81a" rel="">Bathing In Skyrim Tweaked v3.3 (14-May-2021).7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859402" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859402&amp;key=93e41bd985a927a15c9070effbd7c363" rel="">Bathing In Skyrim Tweaked v3.4 (17-May-2023).7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859403" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859403&amp;key=a5d81f45789ffbcc5801b43f7e48586f" rel="">Convenient Horses Tweak V1.0 (01-Mar-2022).7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859404" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859404&amp;key=dcee5a7bba96e9c45ec768cdd0b196e0" rel="">Devious Bell And Chain Sounds Reduced v1.0 (03-Oct-2019).7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859405" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859405&amp;key=b63ffc4528962fe1f0a4c7a581b2a966" rel="">Hydra Slave Girls Tweak v1.0.7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859406" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859406&amp;key=c9348eb3b8cab268e598543bcce66b52" rel="">Rape Tattoos Tweaked.7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859407" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859407&amp;key=d03fa948eb2a3167b88b301853f2bc97" rel="">Rock Trap De-Lameifier v1.1 (26-May-2019).7z</a>
</p>
]]></description><guid isPermaLink="false">20178</guid><pubDate>Fri, 10 Nov 2023 03:21:00 +0000</pubDate></item><item><title>Wartimes Tweak</title><link>https://www.loverslab.com/blogs/entry/20177-wartimes-tweak/</link><description><![CDATA[<p>
	<span style="font-size:26px;"><span style="color:#3498db;">LE</span></span>
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859397" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859397&amp;key=0ce0d780d77938256e4a23fb60573cf7" rel="">Wartimes Tweak v10.3 (15-Mar-2022).7z</a>
</p>

<p>
	 
</p>

<p>
	<span style="color:#3498db;"><span style="font-size:26px;">SE</span></span>
</p>

<p>
	<a class="ipsAttachLink" data-fileid="1883657" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1883657&amp;key=19063f66556ad3c72b7ea4ef19449325" data-fileext="7z" rel="">Wartimes Tweak v10.3 SE (15-Mar-2022).7z</a>
</p>
]]></description><guid isPermaLink="false">20177</guid><pubDate>Fri, 10 Nov 2023 03:12:33 +0000</pubDate></item><item><title>Spank That Ass</title><link>https://www.loverslab.com/blogs/entry/20176-spank-that-ass/</link><description><![CDATA[<p>
	<span style="color:#3498db;"><span style="font-size:26px;">LE</span></span>
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859396" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859396&amp;key=97bc341a8063dcf18be5a25b62e2af4d" rel="">Spank That Ass v4.8 BETA (27-Apr-2021).7z</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:26px;"><span style="color:#3498db;">SE</span></span>
</p>

<p>
	<a class="ipsAttachLink" data-fileid="1883650" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1883650&amp;key=f2b984955c5dcd150aa6294f419ee26c" data-fileext="7z" rel="">Spank That Ass v4.8 BETA SE (27-Apr-2021).7z</a>
</p>
]]></description><guid isPermaLink="false">20176</guid><pubDate>Fri, 10 Nov 2023 03:01:06 +0000</pubDate></item><item><title>SL Survival</title><link>https://www.loverslab.com/blogs/entry/20175-sl-survival/</link><description><![CDATA[<p>
	<span style="font-size:28px;"><a href="https://www.loverslab.com/topic/99955-sexlab-survival/" rel="">SL Survival LE</a></span>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859394" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859394&amp;key=475c3c067555fa50560e2b4c158bc064" rel="">Sexlab Survival 0.685 BETA (14-Mar-2022).7z</a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1859395" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1859395&amp;key=dc6befc33b936974ac6f8fb15349c5e3" rel="">Open Mouth Mod v1.7 (19-Mar-2021) For SLSO v1.6.7.7z</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:28px;"><a href="https://www.loverslab.com/topic/99955-sexlab-survival/" rel="">SL Survival SE</a></span>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="7z" data-fileid="1883644" href="https://www.loverslab.com/applications/core/interface/file/attachment.php?id=1883644&amp;key=f3ca5632be879e21e11fb62b39346682" rel="">Sexlab Survival 0.685 BETA SE (14-Mar-2022).7z</a>
</p>
]]></description><guid isPermaLink="false">20175</guid><pubDate>Fri, 10 Nov 2023 02:59:04 +0000</pubDate></item></channel></rss>
