<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.frictionalgames.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TiMan</id>
	<title>Frictional Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.frictionalgames.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TiMan"/>
	<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page/Special:Contributions/TiMan"/>
	<updated>2026-10-07T03:55:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Working_with_Physics_Bodies&amp;diff=7348</id>
		<title>HPL3/SOMA/Entities/Working with Physics Bodies</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Working_with_Physics_Bodies&amp;diff=7348"/>
		<updated>2026-10-02T17:34:36Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Redirect SOMA entity documentation path to the shared HPL3 physics-body workflow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/Entities/Working with Physics Bodies]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Entity_Notes&amp;diff=7347</id>
		<title>HPL3/SOMA/Entities/Entity Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Entity_Notes&amp;diff=7347"/>
		<updated>2026-10-02T17:34:35Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Move preserved and expanded Entity Notes guidance to the shared HPL3 article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/Entities/Entity Notes]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Model_Editor_Preferences&amp;diff=7346</id>
		<title>HPL3/SOMA/Entities/Model Editor Preferences</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Model_Editor_Preferences&amp;diff=7346"/>
		<updated>2026-10-02T17:34:33Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Redirect SOMA entity documentation path to the shared HPL3 Model Editor preferences guide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/Entities/Model Editor Preferences]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Model_Editor_Controls&amp;diff=7345</id>
		<title>HPL3/SOMA/Entities/Model Editor Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Entities/Model_Editor_Controls&amp;diff=7345"/>
		<updated>2026-10-02T17:34:32Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Redirect SOMA entity documentation path to the shared HPL3 Model Editor controls guide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/Entities/Model Editor Controls]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Entities/Working_with_Physics_Bodies&amp;diff=7344</id>
		<title>HPL3/Entities/Working with Physics Bodies</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Entities/Working_with_Physics_Bodies&amp;diff=7344"/>
		<updated>2026-10-02T17:34:22Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Create shared HPL3 physics-body workflow from installed editor labels and shipped SOMA, Rebirth, and Bunker entity data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''physics body''' groups one or more collision shapes and gives them shared physical, collision, and surface settings. The Model Editors and shipped entities for SOMA, Amnesia: Rebirth, and Amnesia: The Bunker use the same core body structure.&lt;br /&gt;
&lt;br /&gt;
== Bodies, shapes, and children ==&lt;br /&gt;
&lt;br /&gt;
Collision geometry is stored as shapes. The common shape types are '''Box''', '''Cylinder''', '''Sphere''', and '''Capsule'''. A body references its member shapes by ID; it can also reference child objects such as submeshes.&lt;br /&gt;
&lt;br /&gt;
For example, this shortened structure contains one box shape, one attached child, and one body:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shapes&amp;gt;&lt;br /&gt;
    &amp;lt;Shape ID=&amp;quot;1&amp;quot; Name=&amp;quot;Shape_1&amp;quot; ShapeType=&amp;quot;Box&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/Shapes&amp;gt;&lt;br /&gt;
&amp;lt;Bodies&amp;gt;&lt;br /&gt;
    &amp;lt;Body ID=&amp;quot;2&amp;quot; Name=&amp;quot;Body_1&amp;quot; Mass=&amp;quot;0&amp;quot; Material=&amp;quot;Default&amp;quot; ...&amp;gt;&lt;br /&gt;
        &amp;lt;Children&amp;gt;&lt;br /&gt;
            &amp;lt;Child ID=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Children&amp;gt;&lt;br /&gt;
        &amp;lt;Shape ID=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Body&amp;gt;&lt;br /&gt;
&amp;lt;/Bodies&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The body and shape transforms are stored independently. Use the editor rather than manually changing IDs: joints, attachments, and other entity data can refer to those IDs.&lt;br /&gt;
&lt;br /&gt;
== Creating a body ==&lt;br /&gt;
&lt;br /&gt;
# Create and position one or more collision shapes around the model.&lt;br /&gt;
# Select the shape or shapes that should behave as one unit.&lt;br /&gt;
# Press '''Create Body'''. Multiple selected shapes produce one body containing multiple shape references.&lt;br /&gt;
# Select the new body and give it a clear, unique name.&lt;br /&gt;
# Set its material, mass, damping, speed limits, and collision flags.&lt;br /&gt;
# Attach only the meshes, bones, lights, sounds, particle systems, or other supported components that should follow that body.&lt;br /&gt;
# Save the entity and inspect the result in Entity Preview and in a small test map.&lt;br /&gt;
&lt;br /&gt;
'''Detach from Body''' removes a selected shape from its body. It does not delete the shape. If the shape should be part of a different body, detach it and then create or assign the intended grouping in the editor.&lt;br /&gt;
&lt;br /&gt;
== Core body properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are serialized by shipped entities in all three games:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Editor property !! Stored attribute !! Role&lt;br /&gt;
|-&lt;br /&gt;
| Body Material || &amp;lt;code&amp;gt;Material&amp;lt;/code&amp;gt; || Selects the physics/surface material name.&lt;br /&gt;
|-&lt;br /&gt;
| Mass || &amp;lt;code&amp;gt;Mass&amp;lt;/code&amp;gt; || Sets the body's mass value. Shipped entities use both zero and positive values; choose a value appropriate to the entity type and intended motion.&lt;br /&gt;
|-&lt;br /&gt;
| Angular Damping / Linear Damping || &amp;lt;code&amp;gt;AngularDamping&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;LinearDamping&amp;lt;/code&amp;gt; || Reduce rotational and translational motion over time.&lt;br /&gt;
|-&lt;br /&gt;
| Max Angular Speed / Max Linear Speed || &amp;lt;code&amp;gt;MaxAngularSpeed&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;MaxLinearSpeed&amp;lt;/code&amp;gt; || Limit rotational and translational speed.&lt;br /&gt;
|-&lt;br /&gt;
| Buoyancy density mul || &amp;lt;code&amp;gt;BuoyancyDensityMul&amp;lt;/code&amp;gt; || Multiplies the body's buoyancy-density value.&lt;br /&gt;
|-&lt;br /&gt;
| Blocks sound / Blocks light || &amp;lt;code&amp;gt;BlocksSound&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;BlocksLight&amp;lt;/code&amp;gt; || Control whether the body participates in sound or light blocking.&lt;br /&gt;
|-&lt;br /&gt;
| Continuous collision || &amp;lt;code&amp;gt;ContinuousCollision&amp;lt;/code&amp;gt; || Enables continuous-collision handling for the body.&lt;br /&gt;
|-&lt;br /&gt;
| Can attach character / Pushed by character gravity || &amp;lt;code&amp;gt;CanAttachCharacter&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;PushedByCharacterGravity&amp;lt;/code&amp;gt; || Control character interaction with the body.&lt;br /&gt;
|-&lt;br /&gt;
| Collide character / Collide non character || &amp;lt;code&amp;gt;CollideCharacter&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;CollideNonCharacter&amp;lt;/code&amp;gt; || Select the broad collision groups the body responds to.&lt;br /&gt;
|-&lt;br /&gt;
| Volatile || &amp;lt;code&amp;gt;Volatile&amp;lt;/code&amp;gt; || Marks the body with the engine's volatile-body flag.&lt;br /&gt;
|-&lt;br /&gt;
| Use surface effects || &amp;lt;code&amp;gt;UseSurfaceEffects&amp;lt;/code&amp;gt; || Enables effects associated with the selected surface material.&lt;br /&gt;
|-&lt;br /&gt;
| Has gravity || &amp;lt;code&amp;gt;HasGravity&amp;lt;/code&amp;gt; || Controls whether gravity is applied.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Amnesia: Rebirth entities may additionally serialize &amp;lt;code&amp;gt;Active&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Tag&amp;lt;/code&amp;gt; on bodies. Do not rely on those additions for an entity intended to remain portable across all three editors.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
The '''Attachments''' tab filters which object types can be selected. Press '''Attach''', then click eligible objects to add or remove them from the pending attachment set. Press '''Done''' or finish the tool to commit the set. '''Clear attachments''' removes the body's current child-object references.&lt;br /&gt;
&lt;br /&gt;
An attachment is not a collision shape. Shapes define the body's collision geometry; attached child objects follow the body. A common rigid prop therefore has one or more shapes and one or more attached submeshes, all referenced by the same body.&lt;br /&gt;
&lt;br /&gt;
== Verification and troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
Before considering a body finished:&lt;br /&gt;
&lt;br /&gt;
* inspect the entity from several orthographic views so the shapes actually enclose the intended collision volume;&lt;br /&gt;
* verify that every shape belongs to the intended body and that no unwanted shape was included in a multi-selection;&lt;br /&gt;
* check that visual parts which should move are attached to the correct body;&lt;br /&gt;
* use a physics material name available in the active game or mod configuration;&lt;br /&gt;
* check character and non-character collision independently;&lt;br /&gt;
* test gravity, surface effects, and continuous collision under the speeds the entity will encounter; and&lt;br /&gt;
* if joints are present, verify their parent and child body assignments after renaming or rebuilding bodies.&lt;br /&gt;
&lt;br /&gt;
The Model Editor and engine can fall back to a default physics material when a named material cannot be loaded, so an entity appearing to collide is not proof that its requested material resolved correctly. Check &amp;lt;code&amp;gt;ModelEditor.log&amp;lt;/code&amp;gt; and the game log for material-loading errors.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/Entities/Working with Shapes|Working with Shapes]]&lt;br /&gt;
* [[HPL3/Entities/Physics Body Properties|Physics Body Properties]]&lt;br /&gt;
* [[HPL3/SOMA/Entities/Working with Joints|Working with Joints]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Entities/Entity_Notes&amp;diff=7343</id>
		<title>HPL3/Entities/Entity Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Entities/Entity_Notes&amp;diff=7343"/>
		<updated>2026-10-02T17:34:21Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Create shared HPL3 Entity Notes guide, preserving the existing SOMA article purpose and image and adding verified serialization details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Entity Notes''' are free-form authoring notes attached to an entity file. They are intended for information that another level designer should see when using the entity, rather than for text shown to the player during gameplay.&lt;br /&gt;
&lt;br /&gt;
[[File:window_entitynotes.png]]&lt;br /&gt;
&lt;br /&gt;
== Adding a note ==&lt;br /&gt;
&lt;br /&gt;
# Open the entity in the Model Editor.&lt;br /&gt;
# Open the '''Notes''' window.&lt;br /&gt;
# Type the information in its text box.&lt;br /&gt;
# Close the window and save the entity.&lt;br /&gt;
&lt;br /&gt;
No separate confirmation step is required in the Notes window; saving the entity commits the current note along with the rest of the entity data.&lt;br /&gt;
&lt;br /&gt;
Useful notes include setup requirements, intended orientation, required companion objects, known limitations, and warnings about entity variables. Keep them short enough to read while placing the entity.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
When a note is present, the Model Editor stores it as a top-level element in the &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Notes Content=&amp;quot;Place against a wall and align the main body with the floor.&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Notes&amp;lt;/code&amp;gt; element is separate from &amp;lt;code&amp;gt;ModelData&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;UserDefinedVariables&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;EditorSession&amp;lt;/code&amp;gt;. Most shipped entities omit it because they have no authoring note. All three inspected HPL3 Model Editor and Level Editor builds contain support for the &amp;lt;code&amp;gt;Notes&amp;lt;/code&amp;gt; element and its &amp;lt;code&amp;gt;Content&amp;lt;/code&amp;gt; field.&lt;br /&gt;
&lt;br /&gt;
In the Level Editor, the note can be read through the entity-notes interface when working with an entity of that type. Entity Notes are therefore documentation for editors; they are not the same as a readable note, journal entry, localization key, or an entity type's gameplay variable named “Note.”&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/Entities/Entity Settings|Entity Settings]]&lt;br /&gt;
* [[HPL3/Entities/Model Editor View|Model Editor View]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Entities/Model_Editor_Preferences&amp;diff=7342</id>
		<title>HPL3/Entities/Model Editor Preferences</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Entities/Model_Editor_Preferences&amp;diff=7342"/>
		<updated>2026-10-02T17:34:19Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Create shared HPL3 Model Editor preferences guide from installed editor configuration and persistence files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Model Editor's '''Preferences''' window contains application-level settings shared by the Model Editors shipped with SOMA, Amnesia: Rebirth, and Amnesia: The Bunker.&lt;br /&gt;
&lt;br /&gt;
== Preferences window ==&lt;br /&gt;
&lt;br /&gt;
Open '''Preferences''' from the editor menu. The common controls are:&lt;br /&gt;
&lt;br /&gt;
* '''Resolution''': the editor window's width and height.&lt;br /&gt;
* '''Undo stack size''': the number of editor actions retained for undo.&lt;br /&gt;
&lt;br /&gt;
A larger undo stack retains more editing history but requires more memory. Resolution is stored as two values, corresponding to the horizontal and vertical window dimensions.&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
The editor uses several files with separate responsibilities. By default, their home directory is the &amp;lt;code&amp;gt;HPL3&amp;lt;/code&amp;gt; folder under the user's documents directory; the actual resolved home directory is printed in &amp;lt;code&amp;gt;ModelEditor.log&amp;lt;/code&amp;gt; when the editor starts.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! File !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MainEditorSettings.cfg&amp;lt;/code&amp;gt; || Defines the editor home, temporary, thumbnail, and session directory names. The three shipped games use &amp;lt;code&amp;gt;HPL3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Temp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Thumbnails&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;Sessions&amp;lt;/code&amp;gt; respectively.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ModelEditor.prf&amp;lt;/code&amp;gt; || Stores Model Editor preference data. A file containing only &amp;lt;code&amp;gt;&amp;amp;lt;Preferences /&amp;amp;gt;&amp;lt;/code&amp;gt; represents no explicitly saved non-default values.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ModelEditor.cfg&amp;lt;/code&amp;gt; || Stores other application state, including screen size, graphics/performance values, and recent entity files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ModelEditor.log&amp;lt;/code&amp;gt; || Records startup paths, initialized subsystems, loaded resources, warnings, and errors.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These files are not entity assets and should not be distributed as part of an entity. If preferences appear not to persist, close the editor normally and check the home directory reported in the log. A redirected Documents folder can place the files somewhere other than the conventional local Documents path.&lt;br /&gt;
&lt;br /&gt;
== Per-entity state is separate ==&lt;br /&gt;
&lt;br /&gt;
Viewport camera, render, grid, and enlargement state can be saved inside an entity's &amp;lt;code&amp;gt;EditorSession&amp;lt;/code&amp;gt;. Those settings belong to the &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file and are not controlled by the application-level Preferences window. See [[HPL3/Entities/Model Editor Controls|Model Editor Controls]] for the saved viewport fields.&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Entities/Model_Editor_Controls&amp;diff=7341</id>
		<title>HPL3/Entities/Model Editor Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Entities/Model_Editor_Controls&amp;diff=7341"/>
		<updated>2026-10-02T17:34:18Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Create shared HPL3 Model Editor controls guide verified against the SOMA, Rebirth, and Bunker editor executables and entity sessions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Model Editor controls''' combine object-editing modes with per-viewport camera and display controls. The core controls described here are present in the Model Editors shipped with SOMA, Amnesia: Rebirth, and Amnesia: The Bunker.&lt;br /&gt;
&lt;br /&gt;
== Object editing ==&lt;br /&gt;
&lt;br /&gt;
The editor provides four main object modes:&lt;br /&gt;
&lt;br /&gt;
* '''Select''' chooses objects in a viewport and exposes their editable properties.&lt;br /&gt;
* '''Translate''' moves the selection.&lt;br /&gt;
* '''Rotate''' rotates the selection.&lt;br /&gt;
* '''Scale''' changes its size.&lt;br /&gt;
&lt;br /&gt;
The editor also provides '''Clone''', '''Delete''', '''Undo''', and '''Redo''' commands. Keep an eye on the current selection and active mode before dragging: the same pointer movement has a different effect in selection, translation, rotation, and scaling modes.&lt;br /&gt;
&lt;br /&gt;
'''Focus''' frames the current selection in a viewport. This is useful after importing a model at an unexpected scale or moving the camera away from the entity.&lt;br /&gt;
&lt;br /&gt;
== Viewports ==&lt;br /&gt;
&lt;br /&gt;
A normal Model Editor layout contains orthographic '''Front''', '''Right''', and '''Top''' views and a '''Perspective''' view. Each viewport stores its own camera and display state.&lt;br /&gt;
&lt;br /&gt;
The viewport menu includes:&lt;br /&gt;
&lt;br /&gt;
* '''Camera Mode''': selects the view orientation.&lt;br /&gt;
* '''Render Mode''': selects the display style, including shaded and wireframe rendering.&lt;br /&gt;
* '''Controller''': selects camera navigation. Shipped entity sessions use '''Ortho''' for the three orthographic views and '''Maya''' for the perspective view; '''Fly''' is also available in all three editors.&lt;br /&gt;
* '''Show Grid''' and '''Show Axes''': toggle those viewport guides.&lt;br /&gt;
&lt;br /&gt;
The focused viewport can be enlarged and later returned to the four-view layout. Saved &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; files may retain the focused viewport, enlargement state, camera position and target, controller, view mode, renderer, axes, grid, and grid-plane state in &amp;lt;code&amp;gt;EditorSession/ViewportConfig&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Grid and snapping ==&lt;br /&gt;
&lt;br /&gt;
The lower controls select a grid plane and maintain grid height and snapping state. The active plane matters in orthographic work: shipped sessions normally associate Front, Right, and Top with different grid planes.&lt;br /&gt;
&lt;br /&gt;
Use snapping when collision shapes, sockets, or other components must share an exact position. Turn it off for fine visual alignment. Because the saved viewport session records &amp;lt;code&amp;gt;GridPlane&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;GridHeights&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LockToGrid&amp;lt;/code&amp;gt;, reopening two entities can restore different grid states.&lt;br /&gt;
&lt;br /&gt;
== Shortcut differences ==&lt;br /&gt;
&lt;br /&gt;
Do not assume that every HPL3 Model Editor build displays the same keyboard hints. For example, the later Amnesia editors expose help strings for focusing the selection and toggling grid snapping that are not exposed in the same form by the SOMA executable. Use the command labels and tooltips shown by the editor build you are running.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/Entities/Model Editor View|Model Editor View]]&lt;br /&gt;
* [[HPL3/Entities/Model Editor Preferences|Model Editor Preferences]]&lt;br /&gt;
* [[HPL3/Entities/Working with Shapes|Working with Shapes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Third_Party_Tools&amp;diff=7340</id>
		<title>HPL3/Amnesia: The Bunker/Third Party Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Third_Party_Tools&amp;diff=7340"/>
		<updated>2026-10-02T17:25:21Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Created page with &amp;quot;'''These tools have been created by third parties, some which are members of the community, and are not affiliated with Frictional Games.'''  {{CategoryHeader}} {{CategoryNewc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''These tools have been created by third parties, some which are members of the community, and are not affiliated with Frictional Games.'''&lt;br /&gt;
&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Community-Made Tools ==&lt;br /&gt;
* [[HPL3/Third_Party_Tools/HPL3_Mod_Manager|HPL3 Mod Manager]]&lt;br /&gt;
* [[HPL3/Blender_HPL3_export_plugin|Blender HPL3 export plugin]]&lt;br /&gt;
&lt;br /&gt;
== Programming Tools ==&lt;br /&gt;
* [[CodeLite|CodeLite]]&lt;br /&gt;
* [[Visual Studio Code|Visual Studio Code]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== 3D Design Tools ==&lt;br /&gt;
* [[Autodesk Maya|Autodesk Maya]]&lt;br /&gt;
* [[Modo|Modo]]&lt;br /&gt;
* [[Blender|Blender]]&lt;br /&gt;
&lt;br /&gt;
== 2D Design Tools ==&lt;br /&gt;
* [[GIMP|GIMP]]&lt;br /&gt;
* [[Adobe Photoshop|Adobe Photoshop]]&lt;br /&gt;
&lt;br /&gt;
== Audio Tools ==&lt;br /&gt;
* [[Audacity|Audacity]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Glossary&amp;diff=7339</id>
		<title>HPL3/Amnesia: The Bunker/Glossary</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Glossary&amp;diff=7339"/>
		<updated>2026-10-02T17:24:54Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Created page with &amp;quot;{{stub}} '''Find explanations of various HPL3 terms here.'''  {{CategoryHeader}} {{CategoryNewcolumn}}  == General == *'''Static Object''' - An in-game object which is used on...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
'''Find explanations of various HPL3 terms here.'''&lt;br /&gt;
&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
*'''Static Object''' - An in-game object which is used only for physics collisions. They can't be influenced by scripts.&lt;br /&gt;
*'''Entity''' - An in-game object which allows interaction.&lt;br /&gt;
*'''Prop''' - A type of entity which can be collected and added to the player's inventory.&lt;br /&gt;
*'''Area''' - Invisible in-game cuboid which marks 3D space. Used as an input-output systems for the levels.&lt;br /&gt;
&lt;br /&gt;
== Modding ==&lt;br /&gt;
*'''Mod''' - Additional game content created by community members and fans.&lt;br /&gt;
*'''Custom Story''' - User-made content available from the game's main menu or from a designated launcher. They use all settings from the config files the game was started with, which limits what the creator can change (for example being forced to use the default lantern). This is the type of creation recommended for beginners.&lt;br /&gt;
*'''Mod Dependency''' - A mod which is being used by other mods as a source for content.&lt;br /&gt;
&lt;br /&gt;
== Level Design ==&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
*'''Script''' - Written code which determines what happens in a map. This includes events, puzzles, music, and more.&lt;br /&gt;
*'''User Module''' - Script files which always run in the background and usually define the behavior or core mechanics in the game.&lt;br /&gt;
*'''Handler''' - A synonym for a User Module.&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation&amp;diff=7338</id>
		<title>HPL3/SOMA/Animation</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation&amp;diff=7338"/>
		<updated>2026-10-02T17:21:10Z</updated>

		<summary type="html">&lt;p&gt;TiMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''This category deals with 3D animation in SOMA.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/SOMA/Animation/Animation Overview|Animation Overview]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Animation Principles|Animation Principles]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Animations|Importing Animations]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Animations|Exporting Animations]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Animation Principles|Animation Lipsync]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [[Autodesk Maya]]&lt;br /&gt;
* [[Blender]]&lt;br /&gt;
* [[HPL3/Blender_HPL3_export_plugin|HPL3 Blender Exporting Tool]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation/Exporting_Animations&amp;diff=7337</id>
		<title>HPL3/SOMA/Animation/Exporting Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation/Exporting_Animations&amp;diff=7337"/>
		<updated>2026-10-02T17:17:40Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a compatibility Animation-namespace title for the SOMA Exporting Animations guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Modeling/Exporting Animations]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation/Importing_Animations&amp;diff=7336</id>
		<title>HPL3/SOMA/Animation/Importing Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation/Importing_Animations&amp;diff=7336"/>
		<updated>2026-10-02T17:17:39Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a compatibility Animation-namespace title for the SOMA Importing Animations guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Modeling/Importing Animations]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Exporting_Animations&amp;diff=7335</id>
		<title>HPL3/SOMA/Modeling/Exporting Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Exporting_Animations&amp;diff=7335"/>
		<updated>2026-10-02T17:16:50Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a SOMA-file-verified animation export guide covering hierarchy compatibility, source formats, cache generation, first-success testing, and troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Exporting an animation''' creates a source clip that SOMA can register on an entity. SOMA's shipped entities use &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; animation sources; the engine generates &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; cache files from supported sources.&lt;br /&gt;
&lt;br /&gt;
This guide describes requirements visible in SOMA's shipped files and executables. Exact menu names and exporter options depend on the 3D application and exporter version.&lt;br /&gt;
&lt;br /&gt;
== Start from the entity mesh ==&lt;br /&gt;
&lt;br /&gt;
Use the same production rig or animated node hierarchy used to export the entity mesh.&lt;br /&gt;
&lt;br /&gt;
* Keep node and bone names stable. Exported animation channels target names such as &amp;lt;code&amp;gt;joint1/matrix&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ball/translate.Y&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Keep hierarchy changes deliberate. SOMA reports a mismatch when the skeleton in the mesh differs from the skeleton saved in the entity.&lt;br /&gt;
* Keep the mesh and clips on a consistent scale convention. The installed &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; files carry unit metadata with several labels and factors, so the label alone is not a reliable project rule; verify the resulting movement against the imported mesh.&lt;br /&gt;
* Use an axis configuration known to work for that asset pipeline. Of 876 installed &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; files, 869 declare &amp;lt;code&amp;gt;Y_UP&amp;lt;/code&amp;gt; and seven declare &amp;lt;code&amp;gt;Z_UP&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ensure every skinned vertex has a valid bone assignment and no more than four bone influences. SOMA contains explicit diagnostics for both failures.&lt;br /&gt;
&lt;br /&gt;
== Prepare one clip per action ==&lt;br /&gt;
&lt;br /&gt;
Export separate source files for independently selectable actions such as &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;close&amp;lt;/code&amp;gt;, or a transition between two poses.&lt;br /&gt;
&lt;br /&gt;
Before export:&lt;br /&gt;
&lt;br /&gt;
# Set the intended start and end of the clip.&lt;br /&gt;
# Remove unrelated animation takes or actions from the export selection.&lt;br /&gt;
# Include the bones or animated nodes needed by the entity.&lt;br /&gt;
# Preserve the bind/rest relationship expected by the mesh.&lt;br /&gt;
# Decide whether the clip should loop. For a loop, compare the first and last poses and remove an unintended visible jump.&lt;br /&gt;
# Export to the final mod-relative animation directory.&lt;br /&gt;
&lt;br /&gt;
Do not bake sounds, particles, or gameplay callbacks into assumptions about the source format. SOMA stores those as events in the entity's animation registration.&lt;br /&gt;
&lt;br /&gt;
== Choose a source format ==&lt;br /&gt;
&lt;br /&gt;
=== Collada animation source ===&lt;br /&gt;
&lt;br /&gt;
SOMA ships 876 &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; files. Each is a Collada XML document and every inspected file contains at least one animation channel. The sources contain between 1 and 487 channels, targeting matrices, visibility, rotation, translation, and scale.&lt;br /&gt;
&lt;br /&gt;
The extension distinguishes an animation source from a normal &amp;lt;code&amp;gt;.dae&amp;lt;/code&amp;gt; mesh file, but shipped &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; files can still contain geometry, materials, controllers, and scene data in addition to animation channels.&lt;br /&gt;
&lt;br /&gt;
Seventy-one shipped &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; files retain explicit OpenCOLLADA export-option comments. All 71 record animation and joint/skin export as enabled. They do not use one universal sampling setting: 15 record sampling enabled and 56 disabled. Likewise, static-curve removal varies. These values show that one copied exporter preset is not valid for every shipped clip.&lt;br /&gt;
&lt;br /&gt;
=== FBX animation source ===&lt;br /&gt;
&lt;br /&gt;
SOMA entities contain 110 registrations referencing &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; animation files. This proves that the shipped pipeline uses FBX clips, but not that every modern FBX version or exporter setting is compatible with SOMA's older importer. Test a minimal clip before committing to a production pipeline.&lt;br /&gt;
&lt;br /&gt;
== Generate and inspect the cache ==&lt;br /&gt;
&lt;br /&gt;
Place the source file in its final resource directory, then load it through the Model Editor or an entity that references it. SOMA uses same-stem &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; files as compiled animation data.&lt;br /&gt;
&lt;br /&gt;
Examples from the installed game include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shower_curtain_open.fbx  → shower_curtain_open.anm&lt;br /&gt;
ventilation_cluster_spin.dae_anim → ventilation_cluster_spin.anm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not hand-edit the binary &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt;. Re-export the source and let the engine/tool pipeline refresh generated data. SOMA reports when an animation source cannot be found or compiled.&lt;br /&gt;
&lt;br /&gt;
== First-success export test ==&lt;br /&gt;
&lt;br /&gt;
# Export a short clip that moves one clearly identifiable bone or node.&lt;br /&gt;
# Put it beside the target entity or in that entity's animation subdirectory.&lt;br /&gt;
# Add it to the entity with a unique name, &amp;lt;code&amp;gt;Speed=1&amp;lt;/code&amp;gt;, and no events or transitions.&lt;br /&gt;
# Preview the clip and enable skeleton display.&lt;br /&gt;
# Confirm the expected node moves, the mesh keeps its scale, and the start/end frames are correct.&lt;br /&gt;
# Save and reopen the entity, then play the registered name in a test map.&lt;br /&gt;
# Only after this succeeds, export the remaining clips and add events or transitions.&lt;br /&gt;
&lt;br /&gt;
The shipped &amp;lt;code&amp;gt;ventilation_cluster_spin.dae_anim&amp;lt;/code&amp;gt; is a useful structural example: it declares ten channels targeting &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; and eight joint matrices plus root visibility, and its entity registers the clip on the &amp;lt;code&amp;gt;Default&amp;lt;/code&amp;gt; layer with a speed of &amp;lt;code&amp;gt;1.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* '''The clip cannot be found:''' verify the exported file path, extension, filename case, and &amp;lt;code&amp;gt;resources.cfg&amp;lt;/code&amp;gt; coverage.&lt;br /&gt;
* '''Nothing moves:''' confirm the source contains animation channels and that their target names exist in the entity mesh hierarchy.&lt;br /&gt;
* '''The mesh scales or offsets unexpectedly:''' compare mesh and animation unit metadata, axis settings, root transforms, and bind/rest setup.&lt;br /&gt;
* '''Only part of a skinned mesh follows:''' check for unweighted vertices and excessive bone influences; SOMA explicitly diagnoses both.&lt;br /&gt;
* '''The entity reports a skeleton mismatch:''' reimport the mesh into the entity and export the animation from the matching hierarchy.&lt;br /&gt;
* '''A loop jumps:''' inspect the first and last poses and the intended playback range in the source application.&lt;br /&gt;
* '''Old motion persists after export:''' reload the entity and refresh the generated &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; cache.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Animation/Animation Overview|Animation Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Animations|Importing Animations]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Models|Exporting Models]]&lt;br /&gt;
* [[HPL3/Blender HPL3 export plugin|Blender HPL3 export plugin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Importing_Animations&amp;diff=7334</id>
		<title>HPL3/SOMA/Modeling/Importing Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Importing_Animations&amp;diff=7334"/>
		<updated>2026-10-02T17:16:49Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a SOMA-file-verified animation import guide covering entity registration, caches, preview, events, transitions, script testing, and troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Importing an animation''' registers an exported animation source on a SOMA entity so the clip can be previewed and played by name.&lt;br /&gt;
&lt;br /&gt;
== Before importing ==&lt;br /&gt;
&lt;br /&gt;
Confirm that:&lt;br /&gt;
&lt;br /&gt;
* the entity already loads its intended animated mesh;&lt;br /&gt;
* the exported animation uses the mesh's node or bone names;&lt;br /&gt;
* the animation and mesh were exported with compatible scale and axis settings;&lt;br /&gt;
* the animation file is in a directory included by the mod's &amp;lt;code&amp;gt;resources.cfg&amp;lt;/code&amp;gt;; and&lt;br /&gt;
* the source file has a unique, stable path inside the mod.&lt;br /&gt;
&lt;br /&gt;
SOMA ships entity registrations that reference both &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; sources. This establishes support for those installed assets, not compatibility with every exporter version. Verify the chosen exporter with a minimal clip before producing a full animation set.&lt;br /&gt;
&lt;br /&gt;
== Add a clip to an entity ==&lt;br /&gt;
&lt;br /&gt;
# Open the target &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file in &amp;lt;code&amp;gt;ModelEditor.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Enable '''Entity Preview''' from the lower toolbar.&lt;br /&gt;
# Open '''Edit Animations''' in the preview window.&lt;br /&gt;
# Choose '''Add new animation'''.&lt;br /&gt;
# Set a unique '''Name''' used by scripts and entity logic.&lt;br /&gt;
# Set '''File''' to the exported &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; source.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;Default&amp;lt;/code&amp;gt; for '''Layer''' unless the entity has a known layered setup.&lt;br /&gt;
# Begin with '''Speed''' set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Save the entity and select the new animation in the preview controls.&lt;br /&gt;
&lt;br /&gt;
The saved entity entry has this basic form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Animations&amp;gt;&lt;br /&gt;
    &amp;lt;Animation&lt;br /&gt;
        Name=&amp;quot;open&amp;quot;&lt;br /&gt;
        File=&amp;quot;entities/urban/toilet/shower_curtain/shower_curtain_open.fbx&amp;quot;&lt;br /&gt;
        Layer=&amp;quot;Default&amp;quot;&lt;br /&gt;
        Speed=&amp;quot;1&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&amp;lt;/Animations&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example is taken from SOMA's shipped &amp;lt;code&amp;gt;shower_curtain.ent&amp;lt;/code&amp;gt;. The animation's registered name is &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;; scripts play that name, not the filename.&lt;br /&gt;
&lt;br /&gt;
== Understand source and cache files ==&lt;br /&gt;
&lt;br /&gt;
SOMA stores compiled animation data in &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; files. After deduplicating the paths referenced by shipped entity animation registrations:&lt;br /&gt;
&lt;br /&gt;
* 939 non-empty source paths are registered;&lt;br /&gt;
* 879 corresponding source files are present in the installation;&lt;br /&gt;
* 866 of those present sources have a same-stem &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; file;&lt;br /&gt;
* 785 of those pairs use &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; sources; and&lt;br /&gt;
* 81 use &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; sources.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ventilation_cluster_spin.dae_anim&lt;br /&gt;
ventilation_cluster_spin.anm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source is the file registered on the entity. Treat &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; as generated engine data. When replacing a source animation, reload the entity and verify that the cache was refreshed rather than editing the cache manually.&lt;br /&gt;
&lt;br /&gt;
== Preview and validate ==&lt;br /&gt;
&lt;br /&gt;
Use Entity Preview to check:&lt;br /&gt;
&lt;br /&gt;
* whether the animation appears in the selector;&lt;br /&gt;
* whether it plays at the expected speed;&lt;br /&gt;
* whether looping behaves correctly;&lt;br /&gt;
* whether the skeleton moves without unexpected scaling or offsets;&lt;br /&gt;
* whether the first and last poses meet correctly for a loop; and&lt;br /&gt;
* whether physical bodies, sockets, and attached effects remain aligned.&lt;br /&gt;
&lt;br /&gt;
The preview window can display the skeleton and physical objects and provides play, loop, step, time, and timeline controls.&lt;br /&gt;
&lt;br /&gt;
SOMA's executable reports useful failures, including missing animation files, skeleton differences between the mesh and saved entity, vertices without a bone, vertices influenced by more than four bones, and missing transition animations.&lt;br /&gt;
&lt;br /&gt;
== Add events ==&lt;br /&gt;
&lt;br /&gt;
Events are added to the registered animation in the Model Editor, not baked into the exported source file. Each shipped event record stores a name, time, type, destination socket, and value.&lt;br /&gt;
&lt;br /&gt;
Available event types declared by SOMA include:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;PlaySound&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CreateParticle&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Step&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Message&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;PlayLoopSound&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;StopLoopSound&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add an event at the intended timeline position, choose its type, and provide the resource or socket required by that type. Test it in preview and in-game. A valid animation can still have a failing event if its sound, particle system, or destination socket is missing.&lt;br /&gt;
&lt;br /&gt;
SOMA's &amp;lt;code&amp;gt;robot_arm_welding.ent&amp;lt;/code&amp;gt; demonstrates timed loop sounds, ordinary sounds, particles attached to sockets, and a stop-loop event on one animation.&lt;br /&gt;
&lt;br /&gt;
== Add transitions ==&lt;br /&gt;
&lt;br /&gt;
A transition registers a separate bridge clip to use when entering the selected animation from a previous animation.&lt;br /&gt;
&lt;br /&gt;
# Register the base, target, and bridge clips as ordinary animations first.&lt;br /&gt;
# Confirm that each clip plays independently.&lt;br /&gt;
# Add a transition to the target animation.&lt;br /&gt;
# Set the previous animation and the bridge-animation name.&lt;br /&gt;
# Adjust the minimum and maximum previous-animation time only when the transition should be limited to a time window.&lt;br /&gt;
# Enable transition preview and test every route that can select the target animation.&lt;br /&gt;
&lt;br /&gt;
SOMA's shipped entities contain 204 transition entries. The engine emits separate errors for a missing previous animation, missing transition animation, and missing transition base animation.&lt;br /&gt;
&lt;br /&gt;
== Test from script ==&lt;br /&gt;
&lt;br /&gt;
After preview succeeds, place the entity in a test map and play the registered name:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Entity_PlayAnimation(&amp;quot;Machine&amp;quot;, &amp;quot;open&amp;quot;, 0.1f, false, true, &amp;quot;OnAnimationFinished&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SOMA API records the completion callback as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void OnAnimationFinished(const tString &amp;amp;in asEntityName,&lt;br /&gt;
                         const tString &amp;amp;in asAnimName)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use a loop only for a clip intended to repeat. Leave transition playback enabled only when the entity has a matching transition setup.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* '''The file does not appear or load:''' verify the mod-relative path, extension, and resource configuration.&lt;br /&gt;
* '''The animation name cannot be played:''' check the entity's registered &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;; it can differ from the source filename.&lt;br /&gt;
* '''The mesh deforms incorrectly:''' compare the mesh and animation hierarchy, node names, unit metadata, and export axes.&lt;br /&gt;
* '''The entity reports a skeleton mismatch:''' reimport the mesh into the entity and confirm that the exported animation targets that same skeleton.&lt;br /&gt;
* '''Events do not fire correctly:''' inspect event time, type, value, and socket separately from animation playback.&lt;br /&gt;
* '''A transition fails:''' verify that the previous, target, and bridge names all match registered entity animations.&lt;br /&gt;
* '''An update still plays old data:''' reload the entity after replacing the source and ensure the generated &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; cache is refreshed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Animation/Animation Overview|Animation Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Animations|Exporting Animations]]&lt;br /&gt;
* [[HPL3/Entities/Adding Animations to Entities|Animation Editor fields]]&lt;br /&gt;
* [[HPL3/Entities/Model Preview Settings|Entity Preview]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation/Animation_Overview&amp;diff=7333</id>
		<title>HPL3/SOMA/Animation/Animation Overview</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation/Animation_Overview&amp;diff=7333"/>
		<updated>2026-10-02T17:16:47Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a SOMA-file-verified animation overview covering source/cache formats, entity registration, skeleton compatibility, events, transitions, scripting, and workflow.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An '''animation''' changes an entity's mesh over time. In SOMA, an exported animation source is registered on an entity under a playable name. Scripts and entity logic play that registered name rather than referring to the source filename directly.&lt;br /&gt;
&lt;br /&gt;
== Animation pipeline ==&lt;br /&gt;
&lt;br /&gt;
A typical SOMA animation passes through four stages:&lt;br /&gt;
&lt;br /&gt;
# A mesh and its skeleton or animated nodes are prepared in a 3D application.&lt;br /&gt;
# Each animation clip is exported to a source file, usually &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; in the shipped game.&lt;br /&gt;
# The clip is added to an entity's &amp;lt;code&amp;gt;Animations&amp;lt;/code&amp;gt; section in &amp;lt;code&amp;gt;ModelEditor.exe&amp;lt;/code&amp;gt;, where it receives a name and playback settings.&lt;br /&gt;
# Loading the source produces an &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; cache used by the engine.&lt;br /&gt;
&lt;br /&gt;
The installed SOMA entities contain 1,490 animation registrations. Of these, 1,379 reference &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; files and 110 reference &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; files. After deduplicating those registrations, 879 referenced source files are present in the installation; 866 have a same-stem &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; cache.&lt;br /&gt;
&lt;br /&gt;
The source file remains the editable input. The &amp;lt;code&amp;gt;.anm&amp;lt;/code&amp;gt; is generated engine data, not a replacement for the source animation.&lt;br /&gt;
&lt;br /&gt;
== Entity animation registration ==&lt;br /&gt;
&lt;br /&gt;
Animations are stored inside the entity's &amp;lt;code&amp;gt;Animations&amp;lt;/code&amp;gt; element. A simple shipped registration is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Animation&lt;br /&gt;
    Name=&amp;quot;open&amp;quot;&lt;br /&gt;
    File=&amp;quot;entities/urban/toilet/shower_curtain/shower_curtain_open.fbx&amp;quot;&lt;br /&gt;
    Layer=&amp;quot;Default&amp;quot;&lt;br /&gt;
    Speed=&amp;quot;1&amp;quot;&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This entry belongs to &amp;lt;code&amp;gt;entities/urban/toilet/shower_curtain/shower_curtain.ent&amp;lt;/code&amp;gt;. The same entity's mesh is &amp;lt;code&amp;gt;shower_curtain.fbx&amp;lt;/code&amp;gt;; the entity records seven bones and uses a separate &amp;lt;code&amp;gt;shower_curtain_open.anm&amp;lt;/code&amp;gt; cache for the animation source.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Purpose established by SOMA data&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; || Name used by scripts and entity behavior to select the animation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; || Mod-relative path to the exported animation source.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Layer&amp;lt;/code&amp;gt; || Animation layer. &amp;lt;code&amp;gt;Default&amp;lt;/code&amp;gt; is present on 1,387 of the 1,490 inspected registrations; 103 registrations omit this attribute.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Speed&amp;lt;/code&amp;gt; || Playback-speed multiplier. &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is the most common shipped value, but SOMA also uses values below and above 1.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SpecialEventTime&amp;lt;/code&amp;gt; || Optional stored time value present on 103 inspected registrations. Its exact runtime purpose is not documented by the inspected scripts, so it should not be assigned a meaning without testing.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Skeleton and channel compatibility ==&lt;br /&gt;
&lt;br /&gt;
An animation source contains channels targeting named nodes or bones. All 876 installed &amp;lt;code&amp;gt;.dae_anim&amp;lt;/code&amp;gt; files parsed successfully and contain at least one channel. Targets include transformation matrices, translation, rotation, scale, and visibility.&lt;br /&gt;
&lt;br /&gt;
The animation must match the entity mesh's expected hierarchy closely enough for those targets to resolve. SOMA's executable reports specific errors when:&lt;br /&gt;
&lt;br /&gt;
* the skeleton stored in the mesh differs from the skeleton saved in the &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file;&lt;br /&gt;
* vertices in a skinned submesh are not connected to a bone;&lt;br /&gt;
* a vertex is influenced by more than four bones; or&lt;br /&gt;
* an animation, transition animation, previous animation, or socket cannot be found.&lt;br /&gt;
&lt;br /&gt;
Treat bone and node names as stable identifiers. Re-exporting the mesh with renamed or reorganized bones can invalidate both saved entity data and existing animation clips.&lt;br /&gt;
&lt;br /&gt;
== Events and transitions ==&lt;br /&gt;
&lt;br /&gt;
Animation behavior can be extended in the Model Editor without changing the source clip.&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
&lt;br /&gt;
An event is attached to a time in a registered animation. The 580 inspected shipped event entries all store &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Time&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Type&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DestSocket&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;Value&amp;lt;/code&amp;gt;. Event types used by shipped SOMA entities are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;PlaySound&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;PlayLoopSound&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;StopLoopSound&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CreateParticle&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Message&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The engine also declares a &amp;lt;code&amp;gt;Step&amp;lt;/code&amp;gt; event type, although no shipped event of that type was found in the inspected entity registrations.&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;code&amp;gt;robot_arm_welding.ent&amp;lt;/code&amp;gt; attaches looped movement sound, weld sounds, particle creation at named sockets, and a stop-loop event to its &amp;lt;code&amp;gt;welding&amp;lt;/code&amp;gt; animation.&lt;br /&gt;
&lt;br /&gt;
=== Transitions ===&lt;br /&gt;
&lt;br /&gt;
A transition selects a bridging animation when changing from a specified previous animation to the target animation. SOMA's shipped entities contain 204 transition entries. Their stored fields include the transition name, bridging animation name, optional previous-animation name, and minimum/maximum timing values.&lt;br /&gt;
&lt;br /&gt;
Transitions are entity registration data. The source clips for the base and bridge animations must each be exported and registered before the transition can resolve them.&lt;br /&gt;
&lt;br /&gt;
== Playing a registered animation ==&lt;br /&gt;
&lt;br /&gt;
SOMA's script API exposes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void Entity_PlayAnimation(&lt;br /&gt;
    const tString &amp;amp;in asEntityName,&lt;br /&gt;
    const tString &amp;amp;in asAnimation,&lt;br /&gt;
    float afFadeTime = 0.1f,&lt;br /&gt;
    bool abLoop = false,&lt;br /&gt;
    bool abPlayTransition = true,&lt;br /&gt;
    const tString &amp;amp;in asCallback = &amp;quot;&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The callback signature recorded by the SOMA API is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void Callback(const tString &amp;amp;in asEntityName, const tString &amp;amp;in asAnimName)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For entities with a character-mover component, &amp;lt;code&amp;gt;CharMover_PlayAnimation&amp;lt;/code&amp;gt; provides the same animation name, fade, loop, transition, and callback concepts through that component.&lt;br /&gt;
&lt;br /&gt;
SOMA also exposes functions to stop an entity animation, pause or resume a named animation, set its relative time position, and receive message-event callbacks.&lt;br /&gt;
&lt;br /&gt;
== Practical workflow ==&lt;br /&gt;
&lt;br /&gt;
# Export one short clip using the same mesh hierarchy, node names, scale convention, and axis setup as the entity mesh.&lt;br /&gt;
# Add the clip to the entity in the Model Editor and give it a unique, stable &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Leave &amp;lt;code&amp;gt;Speed&amp;lt;/code&amp;gt; at &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; for the first test and use the default layer unless the entity has a verified layered setup.&lt;br /&gt;
# Open Entity Preview, select the registered animation, and test playback, looping, the skeleton display, and the timeline.&lt;br /&gt;
# Add events only after basic playback works. Verify referenced sockets, sounds, and particle systems separately.&lt;br /&gt;
# Add transitions only after every base and bridge animation plays by itself.&lt;br /&gt;
# Save the entity, place it in a test map, and play the registered name from the relevant entity logic or script.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Animations|Exporting Animations]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Animations|Importing Animations]]&lt;br /&gt;
* [[HPL3/Entities/Adding Animations to Entities|Animation registration controls]]&lt;br /&gt;
* [[HPL3/Entities/Model Preview Settings|Entity Preview controls]]&lt;br /&gt;
* [[HPL3/SOMA/Audition/Lip Sync|Lip Sync]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_Rebirth/Tutorials&amp;diff=7332</id>
		<title>HPL3/Amnesia: Rebirth/Tutorials</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_Rebirth/Tutorials&amp;diff=7332"/>
		<updated>2026-10-02T17:14:52Z</updated>

		<summary type="html">&lt;p&gt;TiMan: /* Modding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
'''Find tutorials of various HPL3 topics here.'''&lt;br /&gt;
&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Modding ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/FAQ|FAQ]]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Custom Menu| Custom Menu]]&lt;br /&gt;
&lt;br /&gt;
== Level Design ==&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Systems ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Notes| Creating and Managing Notes]]&lt;br /&gt;
* [https://www.youtube.com/watch?v=L_6mU5oC9Lk  Custom sounds using FMOD 2010 (Video)]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
== Agents ==&lt;br /&gt;
* [[HPL3/Amnesia:_The_Bunker/Tutorials/Stalker| Stalker Setup]]&lt;br /&gt;
&lt;br /&gt;
== 3D ==&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_Rebirth/Tutorials&amp;diff=7331</id>
		<title>HPL3/Amnesia: Rebirth/Tutorials</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_Rebirth/Tutorials&amp;diff=7331"/>
		<updated>2026-10-02T17:14:40Z</updated>

		<summary type="html">&lt;p&gt;TiMan: /* Gameplay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
'''Find tutorials of various HPL3 topics here.'''&lt;br /&gt;
&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Modding ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/FAQ|FAQ]]&lt;br /&gt;
* [https://www.youtube.com/watch?v=-jFnEk7peTE&amp;amp;list=PL4KkjlmOwLwwMVqedCNpi6caUxhgyf8Qr| Custom Story Creation Tutorial Series - By TechOFreak128]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Custom Menu| Custom Menu]]&lt;br /&gt;
&lt;br /&gt;
== Level Design ==&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Systems ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Notes| Creating and Managing Notes]]&lt;br /&gt;
* [https://www.youtube.com/watch?v=L_6mU5oC9Lk  Custom sounds using FMOD 2010 (Video)]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
== Agents ==&lt;br /&gt;
* [[HPL3/Amnesia:_The_Bunker/Tutorials/Stalker| Stalker Setup]]&lt;br /&gt;
&lt;br /&gt;
== 3D ==&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_Rebirth/Tutorials&amp;diff=7330</id>
		<title>HPL3/Amnesia: Rebirth/Tutorials</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_Rebirth/Tutorials&amp;diff=7330"/>
		<updated>2026-10-02T17:14:34Z</updated>

		<summary type="html">&lt;p&gt;TiMan: /* Agents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
'''Find tutorials of various HPL3 topics here.'''&lt;br /&gt;
&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Modding ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/FAQ|FAQ]]&lt;br /&gt;
* [https://www.youtube.com/watch?v=-jFnEk7peTE&amp;amp;list=PL4KkjlmOwLwwMVqedCNpi6caUxhgyf8Qr| Custom Story Creation Tutorial Series - By TechOFreak128]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Custom Menu| Custom Menu]]&lt;br /&gt;
&lt;br /&gt;
== Level Design ==&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Rifts| Rifts]]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Tablets | Dark World Tablets]]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Inventory items| Custom inventory items]]&lt;br /&gt;
&lt;br /&gt;
== Systems ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Tutorials/Notes| Creating and Managing Notes]]&lt;br /&gt;
* [https://www.youtube.com/watch?v=L_6mU5oC9Lk  Custom sounds using FMOD 2010 (Video)]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
== Agents ==&lt;br /&gt;
* [[HPL3/Amnesia:_The_Bunker/Tutorials/Stalker| Stalker Setup]]&lt;br /&gt;
&lt;br /&gt;
== 3D ==&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7329</id>
		<title>HPL3/Amnesia: The Bunker/Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7329"/>
		<updated>2026-10-02T17:11:33Z</updated>

		<summary type="html">&lt;p&gt;TiMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This category deals with creating, managing and releasing Amnesia: The Bunker mods, including managing and organizing a team.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== General Advice ==&lt;br /&gt;
* [[Making a Mod - Best Practices]]&lt;br /&gt;
* [[Online Presence]]&lt;br /&gt;
* [[Efficient Teamwork]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Creating a Mod|Creating a Mod]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Setup Modding Environment|Setup Modding Environment]]&lt;br /&gt;
* [[Setting up an Online Repository|Setting up an Online Repository]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Developer Commands|Developer Commands]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Developer Debug Menu|Developer Debug Menu]]&lt;br /&gt;
* [[Mod Content Usage|Mod Content Usage]]&lt;br /&gt;
&lt;br /&gt;
== Releasing ==&lt;br /&gt;
* [[Pre-Publication Evaluation]]&lt;br /&gt;
* [[Mod Distribution]]&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
* [https://discord.com/invite/frictionalgames Discord Server]&lt;br /&gt;
* [https://www.moddb.com/games/soma/mods ModDB Homepage]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Mod Configuration ==&lt;br /&gt;
* [[HPL3/Resources Configuration|Resources Configuration (Custom Assets)]]&lt;br /&gt;
* [[HPL3/Launch Configuration|Launch Configuration]]&lt;br /&gt;
* [[HPL3/Language Configuration|Language Configuration]]&lt;br /&gt;
* [[HPL3/Modding/Mod Dependencies|Mod Dependencies]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[[HPL3/Amnesia: The Bunker/Modding/MinimalCustomMapMod|Minimal Custom Map Mod]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
*[[HPL3/Amnesia: Rebirth/Third_Party_Tools/Amnesia: Rebirth Mod Manager|Amnesia: The Bunker Mod Manager]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7328</id>
		<title>HPL3/Amnesia: The Bunker/Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7328"/>
		<updated>2026-10-02T17:10:45Z</updated>

		<summary type="html">&lt;p&gt;TiMan: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This category deals with creating, managing and releasing Amnesia: Rebirth mods, including managing and organizing a team.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== General Advice ==&lt;br /&gt;
* [[Making a Mod - Best Practices]]&lt;br /&gt;
* [[Online Presence]]&lt;br /&gt;
* [[Efficient Teamwork]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Creating a Mod|Creating a Mod]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Setup Modding Environment|Setup Modding Environment]]&lt;br /&gt;
* [[Setting up an Online Repository|Setting up an Online Repository]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Developer Commands|Developer Commands]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Developer Debug Menu|Developer Debug Menu]]&lt;br /&gt;
* [[Mod Content Usage|Mod Content Usage]]&lt;br /&gt;
&lt;br /&gt;
== Releasing ==&lt;br /&gt;
* [[Pre-Publication Evaluation]]&lt;br /&gt;
* [[Mod Distribution]]&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
* [https://discord.com/invite/frictionalgames Discord Server]&lt;br /&gt;
* [https://www.moddb.com/games/soma/mods ModDB Homepage]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Mod Configuration ==&lt;br /&gt;
* [[HPL3/Resources Configuration|Resources Configuration (Custom Assets)]]&lt;br /&gt;
* [[HPL3/Launch Configuration|Launch Configuration]]&lt;br /&gt;
* [[HPL3/Language Configuration|Language Configuration]]&lt;br /&gt;
* [[HPL3/Modding/Mod Dependencies|Mod Dependencies]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[[HPL3/Amnesia: The Bunker/Modding/MinimalCustomMapMod|Minimal Custom Map Mod]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
*[[HPL3/Amnesia: Rebirth/Third_Party_Tools/Amnesia: Rebirth Mod Manager|Amnesia: The Bunker Mod Manager]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7327</id>
		<title>HPL3/Amnesia: The Bunker/Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7327"/>
		<updated>2026-10-02T17:10:30Z</updated>

		<summary type="html">&lt;p&gt;TiMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This category deals with creating, managing and releasing Amnesia: Rebirth mods, including managing and organizing a team.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== General Advice ==&lt;br /&gt;
* [[Making a Mod - Best Practices]]&lt;br /&gt;
* [[Online Presence]]&lt;br /&gt;
* [[Efficient Teamwork]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Creating a Mod|Creating a Mod]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Setup Modding Environment|Setup Modding Environment]]&lt;br /&gt;
* [[Setting up an Online Repository|Setting up an Online Repository]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Developer Commands|Developer Commands]]&lt;br /&gt;
* [[HPL3/Amnesia: The Bunker/Modding/Developer Debug Menu|Developer Debug Menu]]&lt;br /&gt;
* [[Mod Content Usage|Mod Content Usage]]&lt;br /&gt;
&lt;br /&gt;
== Releasing ==&lt;br /&gt;
* [[Pre-Publication Evaluation]]&lt;br /&gt;
* [[Mod Distribution]]&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
* [https://discord.com/invite/frictionalgames Discord Server]&lt;br /&gt;
* [https://www.moddb.com/games/soma/mods ModDB Homepage]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Mod Configuration ==&lt;br /&gt;
* [[HPL3/Resources Configuration|Resources Configuration (Custom Assets)]]&lt;br /&gt;
* [[HPL3/Launch Configuration|Launch Configuration]]&lt;br /&gt;
* [[HPL3/Language Configuration|Language Configuration]]&lt;br /&gt;
* [[HPL3/Modding/Mod Dependencies|Mod Dependencies]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[[HPL3/Amnesia: The Bunker/Modding/MinimalCustomMapMod|Minimal Custom Map Mod]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
*[[HPL3/Amnesia: Rebirth/Third_Party_Tools/Amnesia: Rebirth Mod Manager|Amnesia: Rebirth Mod Manager]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7326</id>
		<title>HPL3/Amnesia: The Bunker/Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Amnesia:_The_Bunker/Modding&amp;diff=7326"/>
		<updated>2026-10-02T17:09:28Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Created page with &amp;quot;'''This category deals with creating, managing and releasing Amnesia: Rebirth mods, including managing and organizing a team.''' {{CategoryHeader}} {{CategoryNewcolumn}}  == G...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This category deals with creating, managing and releasing Amnesia: Rebirth mods, including managing and organizing a team.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== General Advice ==&lt;br /&gt;
* [[Making a Mod - Best Practices]]&lt;br /&gt;
* [[Online Presence]]&lt;br /&gt;
* [[Efficient Teamwork]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Modding/Creating a Mod|Creating a Mod]]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Modding/Setup Modding Environment|Setup Modding Environment]]&lt;br /&gt;
* [[Setting up an Online Repository|Setting up an Online Repository]]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Developer Commands|Developer Commands]]&lt;br /&gt;
* [[HPL3/Amnesia: Rebirth/Modding/Developer Debug Menu|Developer Debug Menu]]&lt;br /&gt;
* [[Mod Content Usage|Mod Content Usage]]&lt;br /&gt;
&lt;br /&gt;
== Releasing ==&lt;br /&gt;
* [[Pre-Publication Evaluation]]&lt;br /&gt;
* [[Mod Distribution]]&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
* [https://discord.com/invite/frictionalgames Discord Server]&lt;br /&gt;
* [https://www.moddb.com/games/soma/mods ModDB Homepage]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Mod Configuration ==&lt;br /&gt;
* [[HPL3/Resources Configuration|Resources Configuration (Custom Assets)]]&lt;br /&gt;
* [[HPL3/Launch Configuration|Launch Configuration]]&lt;br /&gt;
* [[HPL3/Language Configuration|Language Configuration]]&lt;br /&gt;
* [[HPL3/Modding/Mod Dependencies|Mod Dependencies]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[[HPL3/Amnesia: Rebirth/Modding/MinimalCustomMapMod|Minimal Custom Map Mod]]&lt;br /&gt;
*[[HPL3/Amnesia: Rebirth/Modding/Amnesia: Rebirth Language Editor|Language Editor]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
*[[HPL3/Amnesia: Rebirth/Third_Party_Tools/Amnesia: Rebirth Mod Manager|Amnesia: Rebirth Mod Manager]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation&amp;diff=7325</id>
		<title>HPL3/SOMA/Animation</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Animation&amp;diff=7325"/>
		<updated>2026-10-02T17:08:10Z</updated>

		<summary type="html">&lt;p&gt;TiMan: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{constructionNotice|This category and its sub-pages are undergoing major editing, as some information in this category and all the sub pages is currently in the process of being formatted or re-written from scratch to achieve a higher standard of formatting, or not everything is yet available. More pages and information will gradually be added.}}&lt;br /&gt;
&lt;br /&gt;
'''This category deals with 3D animation in SOMA.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/SOMA/Animation/Animation Overview|Animation Overview]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Animation Principles|Animation Principles]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Animations|Importing Animations]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Animations|Exporting Animations]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Animation Principles|Animation Lipsync]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [[Autodesk Maya]]&lt;br /&gt;
* [[Blender]]&lt;br /&gt;
* [[HPL3/Blender_HPL3_export_plugin|HPL3 Blender Exporting Tool]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas&amp;diff=7324</id>
		<title>HPL3/SOMA/Areas</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas&amp;diff=7324"/>
		<updated>2026-10-02T15:31:57Z</updated>

		<summary type="html">&lt;p&gt;TiMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''This category covers everything about the Area in the HPL3 Engine and SOMA.'''&lt;br /&gt;
&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/Areas|Areas Overview]]&lt;br /&gt;
&lt;br /&gt;
== Engine Areas ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
* [[HPL3/Areas/PlayerStart Area|PlayerStart Area]]&lt;br /&gt;
* [[HPL3/Areas/Trigger Area|Trigger Area]]&lt;br /&gt;
* [[HPL3/Areas/DoorwayTrigger Area|DoorwayTrigger Area]]&lt;br /&gt;
* [[HPL3/Areas/PathNode Area|PathNode Area]]&lt;br /&gt;
* [[HPL3/Areas/Sticky Area|Sticky Area]]&lt;br /&gt;
* [[HPL3/Areas/InteractAux Area|InteractAux Area]]&lt;br /&gt;
&lt;br /&gt;
=== Effects ===&lt;br /&gt;
* [[HPL3/Areas/Fog Area|Fog Area]]&lt;br /&gt;
* [[HPL3/Areas/SoundScape Area|Soundscape Area]]&lt;br /&gt;
* [[HPL3/Areas/Camera Animation Area|Camera Animation Area]]&lt;br /&gt;
* [[HPL3/Areas/Liquid Area|Liquid Area]]&lt;br /&gt;
* [[HPL3/Areas/Ambient Light Area|Ambient Light Area]]&lt;br /&gt;
* [[HPL3/Areas/Exposure Area|Exposure Area]]&lt;br /&gt;
&lt;br /&gt;
=== Gameplay ===&lt;br /&gt;
* [[HPL3/Areas/Climb Area|Climb Area]]&lt;br /&gt;
* [[HPL3/Areas/Crawl Area|Crawl Area]]&lt;br /&gt;
* [[HPL3/Areas/Hide Area|Hide Area]]&lt;br /&gt;
* [[HPL3/Areas/Ladder Area|Ladder Area]]&lt;br /&gt;
* [[HPL3/Areas/Zoom Area|Zoom Area]]&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/Areas/Visibility Area|Visibility Area]]&lt;br /&gt;
* [[HPL3/Areas/VisibilityPortal Area|VisibilityPortal Area]]&lt;br /&gt;
* [[HPL3/Areas/MapTransfer Area|MapTransfer Area]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Game-Specific Areas ==&lt;br /&gt;
* [[HPL3/SOMA/Areas/Tool Area|Tool Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/Sit Area|Sit Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/Distortion Area|Distortion Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/Datamine Area|Datamine Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/AgentRepel Area|AgentRepel Area]]&lt;br /&gt;
&lt;br /&gt;
== Unused Areas ==&lt;br /&gt;
* [[HPL3/Areas/Description Area|Description Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/DatamineAudioSource Area|DatamineAudioSource Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/DatamineAnimNode Area|DatamineAnimNode Area]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling&amp;diff=7323</id>
		<title>HPL3/SOMA/Modeling</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling&amp;diff=7323"/>
		<updated>2026-10-02T15:31:48Z</updated>

		<summary type="html">&lt;p&gt;TiMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''This category deals with 3D modeling in SOMA.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Modeling Overview|Modeling Overview]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Modeling Guidelines|Modeling Principles]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Models|Importing Models]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Models|Exporting Models]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [[Autodesk Maya]]&lt;br /&gt;
* [[Blender]]&lt;br /&gt;
* [[HPL3/Blender_HPL3_export_plugin| HPL3 Blender Exporting Tool]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7322</id>
		<title>HPL3/SOMA/Modeling/Modeling Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7322"/>
		<updated>2026-10-02T15:31:04Z</updated>

		<summary type="html">&lt;p&gt;TiMan: /* Scale, axes, and origin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Modeling principles''' are the preparation rules that make a 3D asset predictable when it is exported, loaded, textured, and given collision in SOMA. They apply before the asset is configured as a static object or an entity.&lt;br /&gt;
&lt;br /&gt;
== Plan the asset's role ==&lt;br /&gt;
&lt;br /&gt;
Decide how the model will be used before splitting the mesh or building collision:&lt;br /&gt;
&lt;br /&gt;
* A '''static object''' is map geometry intended to remain fixed. Nearby static objects with matching material and render settings can be combined by the engine, so reusable architectural pieces benefit from shared materials.&lt;br /&gt;
* An '''entity''' is saved as an &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file and can contain a mesh, physics shapes and bodies, joints, sub-entities, effects, and animations. Its behavior is selected through an entity type.&lt;br /&gt;
* A detailed visible mesh and a practical collision shape need not be identical. Complex or rounded visible geometry often benefits from simpler physics shapes configured in the Model Editor.&lt;br /&gt;
&lt;br /&gt;
Use a static object for fixed scenery unless the object needs entity features such as scripted behavior, articulated physics, animation, or per-instance gameplay variables.&lt;br /&gt;
&lt;br /&gt;
== Scale, axes, and origin ==&lt;br /&gt;
&lt;br /&gt;
* Work at a consistent real-world scale. The SOMA export guide recommends treating one unit as one metre, or using centimetres consistently so a one-metre object is 100 units high. Exported unit metadata may be used by the importer.&lt;br /&gt;
* Keep the same unit scale for a rigged mesh and all of its animations. The documented result of a mismatch is an animated mesh that expands or shrinks.&lt;br /&gt;
* Declare &amp;lt;code&amp;gt;Y_UP&amp;lt;/code&amp;gt; as the up axis.&lt;br /&gt;
* Place the origin deliberately. The existing SOMA modeling guide recommends positioning an ordinary prop so its bottom is at the origin. This gives a useful placement point on floors; doors, wheels, and other pivoting objects instead need an origin suited to their intended movement.&lt;br /&gt;
* Apply or otherwise account for object transforms before export according to the exporter being used. Validate the result in an HPL3 tool rather than assuming the modeling application's displayed scale is authoritative.&lt;br /&gt;
&lt;br /&gt;
== Geometry and submeshes ==&lt;br /&gt;
&lt;br /&gt;
* Give exported objects and mesh datablocks stable, descriptive names. Submesh names matter when an existing entity is reimported and its saved submesh data must be reassigned.&lt;br /&gt;
* Export polygon meshes in a form the selected exporter can reliably convert. The shipped Collada example inspected for this guide records triangle export, and the existing Modo and Blender guidance requires triangulation before export.&lt;br /&gt;
* Remove accidental duplicate geometry and unused objects from the export selection.&lt;br /&gt;
* Split geometry by material where necessary. HPL3 assigns one material to each submesh; a model needing multiple materials therefore needs multiple submeshes.&lt;br /&gt;
* Avoid unnecessary submesh and material splits. For static geometry, nearby objects that share a material and compatible settings can be combined at load time, reducing draw calls.&lt;br /&gt;
* Keep collision requirements in mind while modeling. Render geometry that is too detailed for collision can use simpler shapes or a separate collision setup in an &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
== UVs and materials ==&lt;br /&gt;
&lt;br /&gt;
* UV-unwrap every textured submesh and keep the UV layout valid for the texture workflow being used.&lt;br /&gt;
* Assign the intended diffuse texture to every exported submesh. The importer uses that texture reference to locate the corresponding HPL3 &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; file.&lt;br /&gt;
* Match the diffuse texture and material base names. For example, a submesh using &amp;lt;code&amp;gt;panel.dds&amp;lt;/code&amp;gt; should have a material named &amp;lt;code&amp;gt;panel.mat&amp;lt;/code&amp;gt; available through the resource paths.&lt;br /&gt;
* Use distinct texture/material base names for distinct submesh materials, such as &amp;lt;code&amp;gt;door_frame.dds&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;door_frame.mat&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;door_leaf.dds&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;door_leaf.mat&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Set each material's physics material deliberately when its surface will provide collision. One &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; file has one physics-material setting.&lt;br /&gt;
&lt;br /&gt;
The older SOMA project guide gives historical recommendations for texture formats, suffixes, and relative sizes. Treat those as project conventions, not as proof that every modern mod asset must use the same compression or dimensions. The material file and the current tool output are the authoritative test.&lt;br /&gt;
&lt;br /&gt;
== Organize files predictably ==&lt;br /&gt;
&lt;br /&gt;
Keep an asset's source model, generated cache, materials, textures, and optional entity file in a stable resource directory. A typical entity asset may look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
entities/my_mod/machine/&lt;br /&gt;
├── machine.dae&lt;br /&gt;
├── machine.msh&lt;br /&gt;
├── machine.ent&lt;br /&gt;
├── machine.dds&lt;br /&gt;
├── machine_nrm.dds&lt;br /&gt;
└── machine.mat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The exact texture set depends on the material. Same-basename organization is not an engine requirement for every auxiliary texture, but it makes dependencies easier to identify and matches many shipped SOMA assets. In the installed game, 2,944 entity assets have same-basename &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.dae&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;.msh&amp;lt;/code&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
Make sure the containing directory is included by the mod's &amp;lt;code&amp;gt;resources.cfg&amp;lt;/code&amp;gt;. Do not rely on absolute paths embedded by the modeling application; test the asset from its final mod-relative location.&lt;br /&gt;
&lt;br /&gt;
== Validate in small steps ==&lt;br /&gt;
&lt;br /&gt;
# Export the source mesh into its final resource directory.&lt;br /&gt;
# Load it in &amp;lt;code&amp;gt;ModelViewer.exe&amp;lt;/code&amp;gt; or import it into &amp;lt;code&amp;gt;ModelEditor.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Check orientation, dimensions, origin, normals, UVs, and material assignment before adding gameplay setup.&lt;br /&gt;
# If it will be an entity, save a minimal &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt;, then add shapes, bodies, joints, and type variables incrementally.&lt;br /&gt;
# Place the static object or entity in a test map and check it in-game under representative lighting.&lt;br /&gt;
# Re-export once and verify that the update workflow preserves the intended submesh assignments.&lt;br /&gt;
&lt;br /&gt;
This staged process separates mesh/export problems from material, physics, entity-type, and map-placement problems.&lt;br /&gt;
&lt;br /&gt;
== Common problems ==&lt;br /&gt;
&lt;br /&gt;
* '''Wrong size:''' verify the source scene units and exported unit metadata. For animated assets, verify the mesh and animation use the same scale.&lt;br /&gt;
* '''Wrong orientation or pivot:''' fix the source axes/origin and re-export rather than compensating separately in every map instance.&lt;br /&gt;
* '''Missing material:''' confirm that the submesh has a diffuse texture reference and that the matching &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; is reachable through the mod resources.&lt;br /&gt;
* '''Only one material appears:''' separate faces that need different materials into different exported submeshes.&lt;br /&gt;
* '''Collision is expensive or catches on details:''' use simpler Model Editor shapes or a deliberately simplified collider instead of the full visible mesh.&lt;br /&gt;
* '''Reimport loses setup:''' keep stable submesh names and review every mapping in the SubMesh Reassign dialog.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Models|Importing Models]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Models|Exporting Models]]&lt;br /&gt;
* [[HPL3/Materials/Working with Materials|Working with Materials]]&lt;br /&gt;
* [[HPL3/Entities/Entities Overview|Entities Overview]]&lt;br /&gt;
* [[HPL3/Blender HPL3 export plugin|Blender HPL3 export plugin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Principles&amp;diff=7321</id>
		<title>HPL3/SOMA/Modeling/Modeling Principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Principles&amp;diff=7321"/>
		<updated>2026-10-02T15:29:26Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a compatibility title for the Modeling Principles guide linked as Modeling Guidelines by the SOMA Modeling index.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Modeling/Modeling Guidelines]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Importing_Models&amp;diff=7320</id>
		<title>HPL3/SOMA/Modeling/Importing Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Importing_Models&amp;diff=7320"/>
		<updated>2026-10-02T15:28:59Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a practical, source-verified SOMA model-import workflow covering resources, mesh caches, Model Editor import, submesh reassignment, entity setup, testing, and troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Importing a model''' brings exported mesh data into SOMA's resource pipeline. The route depends on the intended result:&lt;br /&gt;
&lt;br /&gt;
* A fixed scene piece can be loaded as a '''static object''' from its model file.&lt;br /&gt;
* An interactive, animated, or physically configured object should be imported into &amp;lt;code&amp;gt;ModelEditor.exe&amp;lt;/code&amp;gt; and saved as an '''entity''' (&amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
SOMA ships primarily with Collada &amp;lt;code&amp;gt;.dae&amp;lt;/code&amp;gt; source models and generated &amp;lt;code&amp;gt;.msh&amp;lt;/code&amp;gt; mesh caches. The installed game also contains some &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; files, especially under &amp;lt;code&amp;gt;entities&amp;lt;/code&amp;gt;, but exporter-specific compatibility varies. Use the format supported by the documented exporter and verify the result in SOMA's tools.&lt;br /&gt;
&lt;br /&gt;
== Prepare the files ==&lt;br /&gt;
&lt;br /&gt;
# Export the model according to [[HPL3/SOMA/Modeling/Modeling Guidelines|Modeling Principles]] and the instructions for the chosen exporter.&lt;br /&gt;
# Put the model in its final mod resource directory, normally under &amp;lt;code&amp;gt;static_objects/&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;entities/&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Put its textures and &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; files in resource paths available to the mod.&lt;br /&gt;
# Confirm the directory is included by &amp;lt;code&amp;gt;resources.cfg&amp;lt;/code&amp;gt; before opening the asset in an editor.&lt;br /&gt;
&lt;br /&gt;
For automatic material resolution, assign the diffuse texture in the source model and provide an HPL3 material with the same base name. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
panel.dae&lt;br /&gt;
panel.dds&lt;br /&gt;
panel.mat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the model references &amp;lt;code&amp;gt;panel.dds&amp;lt;/code&amp;gt;, HPL3 looks for &amp;lt;code&amp;gt;panel.mat&amp;lt;/code&amp;gt;. A model with multiple materials must use separate submeshes, each with its own texture/material reference.&lt;br /&gt;
&lt;br /&gt;
== Validate the exported mesh ==&lt;br /&gt;
&lt;br /&gt;
# Start &amp;lt;code&amp;gt;ModelViewer.exe&amp;lt;/code&amp;gt; and load the exported model from its final resource location.&lt;br /&gt;
# Check that the object has the expected orientation, scale, pivot, submeshes, and materials.&lt;br /&gt;
# Inspect the tool output or HPL log for missing mesh, texture, or material messages.&lt;br /&gt;
# Close and reopen the asset after correcting the source export so stale state is not mistaken for a successful fix.&lt;br /&gt;
&lt;br /&gt;
Loading a source mesh generates or refreshes its &amp;lt;code&amp;gt;.msh&amp;lt;/code&amp;gt; cache. The executable contains an explicit “cache out of date” path that reloads the Collada source. Keep the source model in the mod; do not treat the generated cache as the editable master.&lt;br /&gt;
&lt;br /&gt;
SOMA's shipped files demonstrate this pairing extensively: 5,444 inspected &amp;lt;code&amp;gt;.dae&amp;lt;/code&amp;gt; files under &amp;lt;code&amp;gt;static_objects&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;entities&amp;lt;/code&amp;gt; have a same-path &amp;lt;code&amp;gt;.msh&amp;lt;/code&amp;gt; cache.&lt;br /&gt;
&lt;br /&gt;
== Import the mesh into an entity ==&lt;br /&gt;
&lt;br /&gt;
# Open &amp;lt;code&amp;gt;ModelEditor.exe&amp;lt;/code&amp;gt; and choose '''File → New''' for a new entity.&lt;br /&gt;
# Choose '''File → Import Mesh''' and select the exported model.&lt;br /&gt;
# Confirm that the expected submeshes appear. Each imported mesh produces one or more submesh objects in the editor.&lt;br /&gt;
# Configure materials if a submesh did not resolve the intended &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; automatically.&lt;br /&gt;
# Add physics shapes and create bodies where the entity requires collision. Add joints, sub-entities, effects, or animations only as needed.&lt;br /&gt;
# Open '''Entity Settings''', choose the appropriate entity type, and configure its type variables.&lt;br /&gt;
# Save the entity as an &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file in the same asset directory.&lt;br /&gt;
# Enable '''Entity Preview''' to inspect physics and animations before placing the entity in a map.&lt;br /&gt;
&lt;br /&gt;
A representative shipped entity, &amp;lt;code&amp;gt;entities/urban/utility/air_vent/air_vent.ent&amp;lt;/code&amp;gt;, stores this separation directly:&lt;br /&gt;
&lt;br /&gt;
* its &amp;lt;code&amp;gt;Mesh&amp;lt;/code&amp;gt; element references &amp;lt;code&amp;gt;air_vent.dae&amp;lt;/code&amp;gt;;&lt;br /&gt;
* its imported &amp;lt;code&amp;gt;SubMesh&amp;lt;/code&amp;gt; is stored under that mesh;&lt;br /&gt;
* its collision shape and body are separate sections; and&lt;br /&gt;
* its &amp;lt;code&amp;gt;UserDefinedVariables&amp;lt;/code&amp;gt; select the &amp;lt;code&amp;gt;StaticProp&amp;lt;/code&amp;gt; entity type.&lt;br /&gt;
&lt;br /&gt;
The same directory also contains &amp;lt;code&amp;gt;air_vent.msh&amp;lt;/code&amp;gt;. This illustrates the roles of the three files: &amp;lt;code&amp;gt;.dae&amp;lt;/code&amp;gt; is the source mesh, &amp;lt;code&amp;gt;.msh&amp;lt;/code&amp;gt; is the generated cache, and &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; is the entity setup.&lt;br /&gt;
&lt;br /&gt;
== Reimport an updated mesh ==&lt;br /&gt;
&lt;br /&gt;
When '''Import Mesh''' is used in an entity that already has a mesh, the Model Editor opens the '''SubMesh Reassign''' dialog. This allows saved submesh data to be associated with the new export.&lt;br /&gt;
&lt;br /&gt;
* The left side lists new submeshes and lets each one be paired with an old submesh.&lt;br /&gt;
* '''Use new data''' discards the previous submesh parameters for that new submesh.&lt;br /&gt;
* The right side lists old submeshes that remain unassigned.&lt;br /&gt;
* '''Best Match''' attempts pairing based on triangle count according to the existing editor documentation.&lt;br /&gt;
&lt;br /&gt;
Review every proposed match before accepting it. Stable submesh names and a stable object split make reimport safer; renamed, merged, or divided submeshes require deliberate reassignment. Save the &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; after accepting the mappings and test its bodies, attachments, and animations again.&lt;br /&gt;
&lt;br /&gt;
== Use the result in a map ==&lt;br /&gt;
&lt;br /&gt;
For a static object, select it through the Level Editor's '''Static Object''' mode. For an entity, select the saved &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; through '''Entity EditMode'''. Place one test instance, save and reopen the map, then launch the mod and verify:&lt;br /&gt;
&lt;br /&gt;
* scale and orientation;&lt;br /&gt;
* material and texture loading;&lt;br /&gt;
* collision and player movement around the object;&lt;br /&gt;
* shadows and lighting;&lt;br /&gt;
* entity interaction or animation, where applicable.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* '''The model cannot be found:''' confirm its folder is included by &amp;lt;code&amp;gt;resources.cfg&amp;lt;/code&amp;gt; and that the editor is working on the intended mod.&lt;br /&gt;
* '''The model is invisible or malformed:''' verify export scale, up axis, transforms, normals, and triangulation in the source application, then regenerate the cache.&lt;br /&gt;
* '''The material is missing:''' confirm that each submesh has a diffuse texture reference and that the corresponding same-base-name &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; can be resolved.&lt;br /&gt;
* '''The wrong material appears:''' check for duplicate asset names elsewhere in the resource paths and inspect the submesh's assigned material in Model Editor.&lt;br /&gt;
* '''An entity breaks after reimport:''' revisit SubMesh Reassign. A changed skeleton can also make the saved &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; incompatible with the new mesh; SOMA reports this condition as an out-of-date entity/mesh skeleton.&lt;br /&gt;
* '''The editor still shows the old model:''' close and reopen the entity or editor after replacing the source and cache; do not assume an in-place resource refresh succeeded.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Modeling Guidelines|Modeling Principles]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Models|Exporting Models]]&lt;br /&gt;
* [[HPL3/Entities/Model Editor View|Model Editor reference]]&lt;br /&gt;
* [[HPL3/Entities/Entity Mesh|Submeshes and reassignment]]&lt;br /&gt;
* [[HPL3/Entities/Entities Overview|Entity workflow]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7319</id>
		<title>HPL3/SOMA/Modeling/Modeling Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Modeling/Modeling_Guidelines&amp;diff=7319"/>
		<updated>2026-10-02T15:28:58Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add practical, source-verified SOMA modeling principles covering asset roles, scale, axes, origin, submeshes, materials, organization, validation, and troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Modeling principles''' are the preparation rules that make a 3D asset predictable when it is exported, loaded, textured, and given collision in SOMA. They apply before the asset is configured as a static object or an entity.&lt;br /&gt;
&lt;br /&gt;
== Plan the asset's role ==&lt;br /&gt;
&lt;br /&gt;
Decide how the model will be used before splitting the mesh or building collision:&lt;br /&gt;
&lt;br /&gt;
* A '''static object''' is map geometry intended to remain fixed. Nearby static objects with matching material and render settings can be combined by the engine, so reusable architectural pieces benefit from shared materials.&lt;br /&gt;
* An '''entity''' is saved as an &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file and can contain a mesh, physics shapes and bodies, joints, sub-entities, effects, and animations. Its behavior is selected through an entity type.&lt;br /&gt;
* A detailed visible mesh and a practical collision shape need not be identical. Complex or rounded visible geometry often benefits from simpler physics shapes configured in the Model Editor.&lt;br /&gt;
&lt;br /&gt;
Use a static object for fixed scenery unless the object needs entity features such as scripted behavior, articulated physics, animation, or per-instance gameplay variables.&lt;br /&gt;
&lt;br /&gt;
== Scale, axes, and origin ==&lt;br /&gt;
&lt;br /&gt;
* Work at a consistent real-world scale. The SOMA export guide recommends treating one unit as one metre, or using centimetres consistently so a one-metre object is 100 units high. Exported unit metadata may be used by the importer.&lt;br /&gt;
* Keep the same unit scale for a rigged mesh and all of its animations. The documented result of a mismatch is an animated mesh that expands or shrinks.&lt;br /&gt;
* Configure the source application's up axis deliberately and validate the export in SOMA. Of 5,490 inspected shipped Collada files, 5,207 declare &amp;lt;code&amp;gt;Y_UP&amp;lt;/code&amp;gt; and 283 declare &amp;lt;code&amp;gt;Z_UP&amp;lt;/code&amp;gt;; the installed assets therefore do not justify treating one declaration as universal.&lt;br /&gt;
* Place the origin deliberately. The existing SOMA modeling guide recommends positioning an ordinary prop so its bottom is at the origin. This gives a useful placement point on floors; doors, wheels, and other pivoting objects instead need an origin suited to their intended movement.&lt;br /&gt;
* Apply or otherwise account for object transforms before export according to the exporter being used. Validate the result in an HPL3 tool rather than assuming the modeling application's displayed scale is authoritative.&lt;br /&gt;
&lt;br /&gt;
== Geometry and submeshes ==&lt;br /&gt;
&lt;br /&gt;
* Give exported objects and mesh datablocks stable, descriptive names. Submesh names matter when an existing entity is reimported and its saved submesh data must be reassigned.&lt;br /&gt;
* Export polygon meshes in a form the selected exporter can reliably convert. The shipped Collada example inspected for this guide records triangle export, and the existing Modo and Blender guidance requires triangulation before export.&lt;br /&gt;
* Remove accidental duplicate geometry and unused objects from the export selection.&lt;br /&gt;
* Split geometry by material where necessary. HPL3 assigns one material to each submesh; a model needing multiple materials therefore needs multiple submeshes.&lt;br /&gt;
* Avoid unnecessary submesh and material splits. For static geometry, nearby objects that share a material and compatible settings can be combined at load time, reducing draw calls.&lt;br /&gt;
* Keep collision requirements in mind while modeling. Render geometry that is too detailed for collision can use simpler shapes or a separate collision setup in an &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
== UVs and materials ==&lt;br /&gt;
&lt;br /&gt;
* UV-unwrap every textured submesh and keep the UV layout valid for the texture workflow being used.&lt;br /&gt;
* Assign the intended diffuse texture to every exported submesh. The importer uses that texture reference to locate the corresponding HPL3 &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; file.&lt;br /&gt;
* Match the diffuse texture and material base names. For example, a submesh using &amp;lt;code&amp;gt;panel.dds&amp;lt;/code&amp;gt; should have a material named &amp;lt;code&amp;gt;panel.mat&amp;lt;/code&amp;gt; available through the resource paths.&lt;br /&gt;
* Use distinct texture/material base names for distinct submesh materials, such as &amp;lt;code&amp;gt;door_frame.dds&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;door_frame.mat&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;door_leaf.dds&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;door_leaf.mat&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Set each material's physics material deliberately when its surface will provide collision. One &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; file has one physics-material setting.&lt;br /&gt;
&lt;br /&gt;
The older SOMA project guide gives historical recommendations for texture formats, suffixes, and relative sizes. Treat those as project conventions, not as proof that every modern mod asset must use the same compression or dimensions. The material file and the current tool output are the authoritative test.&lt;br /&gt;
&lt;br /&gt;
== Organize files predictably ==&lt;br /&gt;
&lt;br /&gt;
Keep an asset's source model, generated cache, materials, textures, and optional entity file in a stable resource directory. A typical entity asset may look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
entities/my_mod/machine/&lt;br /&gt;
├── machine.dae&lt;br /&gt;
├── machine.msh&lt;br /&gt;
├── machine.ent&lt;br /&gt;
├── machine.dds&lt;br /&gt;
├── machine_nrm.dds&lt;br /&gt;
└── machine.mat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The exact texture set depends on the material. Same-basename organization is not an engine requirement for every auxiliary texture, but it makes dependencies easier to identify and matches many shipped SOMA assets. In the installed game, 2,944 entity assets have same-basename &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.dae&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;.msh&amp;lt;/code&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
Make sure the containing directory is included by the mod's &amp;lt;code&amp;gt;resources.cfg&amp;lt;/code&amp;gt;. Do not rely on absolute paths embedded by the modeling application; test the asset from its final mod-relative location.&lt;br /&gt;
&lt;br /&gt;
== Validate in small steps ==&lt;br /&gt;
&lt;br /&gt;
# Export the source mesh into its final resource directory.&lt;br /&gt;
# Load it in &amp;lt;code&amp;gt;ModelViewer.exe&amp;lt;/code&amp;gt; or import it into &amp;lt;code&amp;gt;ModelEditor.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Check orientation, dimensions, origin, normals, UVs, and material assignment before adding gameplay setup.&lt;br /&gt;
# If it will be an entity, save a minimal &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt;, then add shapes, bodies, joints, and type variables incrementally.&lt;br /&gt;
# Place the static object or entity in a test map and check it in-game under representative lighting.&lt;br /&gt;
# Re-export once and verify that the update workflow preserves the intended submesh assignments.&lt;br /&gt;
&lt;br /&gt;
This staged process separates mesh/export problems from material, physics, entity-type, and map-placement problems.&lt;br /&gt;
&lt;br /&gt;
== Common problems ==&lt;br /&gt;
&lt;br /&gt;
* '''Wrong size:''' verify the source scene units and exported unit metadata. For animated assets, verify the mesh and animation use the same scale.&lt;br /&gt;
* '''Wrong orientation or pivot:''' fix the source axes/origin and re-export rather than compensating separately in every map instance.&lt;br /&gt;
* '''Missing material:''' confirm that the submesh has a diffuse texture reference and that the matching &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; is reachable through the mod resources.&lt;br /&gt;
* '''Only one material appears:''' separate faces that need different materials into different exported submeshes.&lt;br /&gt;
* '''Collision is expensive or catches on details:''' use simpler Model Editor shapes or a deliberately simplified collider instead of the full visible mesh.&lt;br /&gt;
* '''Reimport loses setup:''' keep stable submesh names and review every mapping in the SubMesh Reassign dialog.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Importing Models|Importing Models]]&lt;br /&gt;
* [[HPL3/SOMA/Modeling/Exporting Models|Exporting Models]]&lt;br /&gt;
* [[HPL3/Materials/Working with Materials|Working with Materials]]&lt;br /&gt;
* [[HPL3/Entities/Entities Overview|Entities Overview]]&lt;br /&gt;
* [[HPL3/Blender HPL3 export plugin|Blender HPL3 export plugin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Areas/MapTransfer_Area&amp;diff=7318</id>
		<title>HPL3/Areas/MapTransfer Area</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Areas/MapTransfer_Area&amp;diff=7318"/>
		<updated>2026-10-02T15:18:12Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Resolve the shared MapTransfer redlink to the detailed SOMA-specific streaming guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Areas/MapTransfer Area]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Areas/Sit_Area&amp;diff=7317</id>
		<title>HPL3/Areas/Sit Area</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Areas/Sit_Area&amp;diff=7317"/>
		<updated>2026-10-02T15:18:10Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Redirect the generic Sit Area reference to the detailed SOMA-specific runtime guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Areas/Sit Area]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas/MapTransfer_Area&amp;diff=7316</id>
		<title>HPL3/SOMA/Areas/MapTransfer Area</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas/MapTransfer_Area&amp;diff=7316"/>
		<updated>2026-10-02T15:17:40Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Expand the SOMA MapTransfer Area guide with verified streaming behavior, campaign examples, setup, testing, and troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''MapTransfer Area''' is a named volume used by SOMA's map-streaming functions to identify the player and objects that should be preserved while the current map is unloaded and the next map is activated.&lt;br /&gt;
&lt;br /&gt;
'''Important:''' A MapTransfer Area does not initiate a map change when the player enters it. SOMA's area script has no interaction or automatic collision behavior. A map script must pass the area's name to the map-deload and map-change functions.&lt;br /&gt;
&lt;br /&gt;
== Create the transfer volume ==&lt;br /&gt;
&lt;br /&gt;
# In the Level Editor, select '''Area EditMode''' and choose &amp;lt;code&amp;gt;MapTransfer&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Place and scale the volume so it contains the player and every object that must survive the transition at the moment the script runs.&lt;br /&gt;
# Give it a clear name. SOMA's campaign commonly names a pair after the adjoining maps, such as &amp;lt;code&amp;gt;Transfer2122&amp;lt;/code&amp;gt; for the transition from &amp;lt;code&amp;gt;02_01&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;02_02&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Create a matching transfer volume in the adjoining map when following the campaign's paired-area pattern.&lt;br /&gt;
# Use that exact name in the transition script.&lt;br /&gt;
&lt;br /&gt;
The SOMA class inherits the common &amp;lt;code&amp;gt;BasicArea&amp;lt;/code&amp;gt; properties but adds no MapTransfer-specific editor variables. Its placement, size, orientation, active state, and name therefore define its role.&lt;br /&gt;
&lt;br /&gt;
== Use it from a map script ==&lt;br /&gt;
&lt;br /&gt;
Include the map helper:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;helpers/helper_map.hps&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a streamed transition, pass the same area name to &amp;lt;code&amp;gt;Map_Deload&amp;lt;/code&amp;gt; and the five-argument &amp;lt;code&amp;gt;Map_ChangeMap&amp;lt;/code&amp;gt; overload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Map_Deload(&amp;quot;Transfer2122&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Call after the destination has finished preloading.&lt;br /&gt;
Map_ChangeMap(&amp;quot;02_02_ms_curie_inside.hpm&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;Transfer2122&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These calls are shortened from SOMA's Curie Outside transition. The shipped script begins preloading first and waits until &amp;lt;code&amp;gt;Map_IsPreloadCompleted()&amp;lt;/code&amp;gt; before changing maps. See [[HPL3/SOMA/Scripting/Level Streaming|Level Streaming]] for that complete sequence.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Argument !! Role&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Map_Deload(asTransferArea)&amp;lt;/code&amp;gt; || Deloads the current map while preserving objects inside the named transfer area.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Map_ChangeMap(..., asTransferArea, ...)&amp;lt;/code&amp;gt; || Passes the named transfer area to the native map-change operation. The helper's source describes this as the area used to transfer objects and the player from one map to another.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Using the four-argument &amp;lt;code&amp;gt;Map_ChangeMap&amp;lt;/code&amp;gt; overload supplies an empty transfer-area name, so it performs a normal change rather than this named transfer workflow.&lt;br /&gt;
&lt;br /&gt;
== Shipped SOMA pattern ==&lt;br /&gt;
&lt;br /&gt;
The inspected campaign contains 36 MapTransfer instances with 17 distinct names. Most transition names occur in both adjoining maps. For example, &amp;lt;code&amp;gt;Transfer2122&amp;lt;/code&amp;gt; exists in:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;maps/chapter02/02_01_ms_curie_outside/02_01_ms_curie_outside.hpm_Area&amp;lt;/code&amp;gt;; and&lt;br /&gt;
* &amp;lt;code&amp;gt;maps/chapter02/02_02_ms_curie_inside/02_02_ms_curie_inside.hpm_Area&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The source map calls both &amp;lt;code&amp;gt;Map_Deload(&amp;quot;Transfer2122&amp;quot;)&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Map_ChangeMap(..., &amp;quot;Transfer2122&amp;quot;, ...)&amp;lt;/code&amp;gt;. Other paired campaign names include &amp;lt;code&amp;gt;Transfer0102&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Transfer0203&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Transfer2324&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;transfer4142&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SOMA also uses a larger &amp;lt;code&amp;gt;PreTransfer0102&amp;lt;/code&amp;gt; volume for an earlier partial deload, followed later by &amp;lt;code&amp;gt;Transfer0102&amp;lt;/code&amp;gt; for the final transition. This demonstrates that a transfer volume can support staged unloading as well as the final map change.&lt;br /&gt;
&lt;br /&gt;
== Test the transition ==&lt;br /&gt;
&lt;br /&gt;
# Verify that the named volume exists and is active in the source map. SOMA reports an error and does not deload the level if the requested transfer area cannot be found.&lt;br /&gt;
# Enter the volume with every object that should survive the transition.&lt;br /&gt;
# Trigger the preload/deload/change sequence and wait for the destination map.&lt;br /&gt;
# Confirm that the player and intended objects transfer, while unrelated parts of the old map are unloaded.&lt;br /&gt;
# Test from a fresh launch and from a save made before the transition.&lt;br /&gt;
&lt;br /&gt;
Some props can explicitly disallow map transfer through &amp;lt;code&amp;gt;SetAllowMapTransfer(false)&amp;lt;/code&amp;gt;. If a prop inside the volume does not survive, check its script or interaction state before assuming the area bounds are wrong.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* '''Nothing happens on entry:''' this is expected. Add or connect the script that starts preloading and eventually calls &amp;lt;code&amp;gt;Map_ChangeMap&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''“Map Transfer Area not found” appears:''' verify the area name in the map and every script call. Use the exact spelling used by the placed object.&lt;br /&gt;
* '''Objects disappear during deload:''' confirm they are inside the transfer volume when &amp;lt;code&amp;gt;Map_Deload&amp;lt;/code&amp;gt; runs and that they allow map transfer.&lt;br /&gt;
* '''The destination loads without the transferred state:''' use the five-argument overload and pass the transfer-area name; the four-argument overload passes an empty name internally.&lt;br /&gt;
* '''The transition runs before streaming is ready:''' wait for &amp;lt;code&amp;gt;Map_IsPreloadCompleted()&amp;lt;/code&amp;gt;, as in the stock Level Streaming example.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Scripting/Level Streaming|Level Streaming]]&lt;br /&gt;
* [[HPL3/SOMA/Scripting/Map Helper|Map Helper]]&lt;br /&gt;
* [[HPL3/SOMA/Areas|SOMA areas]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Areas/Exposure_Area&amp;diff=7315</id>
		<title>HPL3/Areas/Exposure Area</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Areas/Exposure_Area&amp;diff=7315"/>
		<updated>2026-10-02T15:17:39Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a source-verified HPL3 Exposure Area guide with editor workflow, properties, shipped examples, scope notes, and troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An '''Exposure Area''' is a box volume that changes camera tone-mapping values while the camera is inside it. It can be used to make the view adapt when moving between regions with substantially different brightness.&lt;br /&gt;
&lt;br /&gt;
Exposure Areas are dedicated Level Editor objects. They are created through '''ExposureArea EditMode''' and are stored in the map's &amp;lt;code&amp;gt;&amp;amp;lt;map name&amp;amp;gt;.hpm_ExposureArea&amp;lt;/code&amp;gt; track, not as an &amp;lt;code&amp;gt;AreaType&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;.hpm_Area&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create an Exposure Area ==&lt;br /&gt;
&lt;br /&gt;
# In the Level Editor, select '''ExposureArea EditMode'''.&lt;br /&gt;
# Set the exposure, white-cut, and transition-time values for the new object.&lt;br /&gt;
# Create a box covering the region in which those tone-mapping values should apply.&lt;br /&gt;
# Select the object to adjust its position, rotation, size, or effect values.&lt;br /&gt;
# Save and test the map while moving the camera across every boundary of the volume.&lt;br /&gt;
&lt;br /&gt;
The edit-mode values apply to newly created Exposure Areas. After placing one, select that object before changing its individual settings.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Serialized attribute !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| '''Name''' || &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; || Unique object name within the map.&lt;br /&gt;
|-&lt;br /&gt;
| '''Position''' || &amp;lt;code&amp;gt;WorldPos&amp;lt;/code&amp;gt; || Center of the box in world space.&lt;br /&gt;
|-&lt;br /&gt;
| '''Rotation''' || &amp;lt;code&amp;gt;Rotation&amp;lt;/code&amp;gt; || Rotation of the box volume.&lt;br /&gt;
|-&lt;br /&gt;
| '''Size''' || &amp;lt;code&amp;gt;Scale&amp;lt;/code&amp;gt; || Dimensions of the affected box.&lt;br /&gt;
|-&lt;br /&gt;
| '''Exposure''' || &amp;lt;code&amp;gt;Exposure&amp;lt;/code&amp;gt; || Target tone-mapping exposure. The existing editor reference documents that increasing it makes the image brighter and gives an editor range of &amp;lt;code&amp;gt;-10&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| '''White Cut''' || &amp;lt;code&amp;gt;WhiteCut&amp;lt;/code&amp;gt; || Target tone-mapping white-cut value. Older documentation calls this setting '''WhitePoint'''; shipped map files and the current editor binary use &amp;lt;code&amp;gt;WhiteCut&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| '''Transition Time''' || &amp;lt;code&amp;gt;TransitionTime&amp;lt;/code&amp;gt; || Time used to transition to the area's exposure settings.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Placement guidance ==&lt;br /&gt;
&lt;br /&gt;
* Cover the entire region that needs the alternate exposure, including the camera's likely path rather than only the player's feet.&lt;br /&gt;
* Use a nonzero transition time when an immediate tone-mapping change would be distracting.&lt;br /&gt;
* Test both directions across the boundary. A value suitable when entering a dark room may expose an abrupt change when leaving it.&lt;br /&gt;
* Avoid unexplained overlap until the intended precedence has been tested. The shipped attributes do not record an editable priority value.&lt;br /&gt;
* Judge the result in-game with the final lights, fog, bloom, and color grading active; the numeric value alone does not establish the visual result.&lt;br /&gt;
&lt;br /&gt;
== Shipped examples ==&lt;br /&gt;
&lt;br /&gt;
Six Exposure Areas occur in four inspected SOMA map tracks. Their values demonstrate that settings are scene-specific rather than universal defaults.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Map !! Exposure !! WhiteCut !! TransitionTime&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;chapter00/00_01_apartment&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;-1.2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;2.2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;chapter00/00_03_laboratory&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1.9&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;chapter01/01_01_upsilon_awake&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;2.7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The laboratory map uses three separate volumes along part of the level, with the same exposure and white-cut targets and closely matched transition times. This is a useful example of applying consistent settings across multiple volumes, not a preset for other lighting conditions.&lt;br /&gt;
&lt;br /&gt;
== Shared HPL3 scope ==&lt;br /&gt;
&lt;br /&gt;
The SOMA, Amnesia: Rebirth, and Amnesia: The Bunker Level Editor executables all contain the &amp;lt;code&amp;gt;ExposureArea&amp;lt;/code&amp;gt; object and the &amp;lt;code&amp;gt;Exposure&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WhiteCut&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;Transition Time&amp;lt;/code&amp;gt; controls. SOMA and Rebirth ship map tracks with the same three serialized effect attributes. No shipped Bunker Exposure Area was found, so the Bunker comparison establishes editor support rather than a campaign example.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* '''Nothing changes:''' confirm that the camera actually enters the box and that the saved &amp;lt;code&amp;gt;.hpm_ExposureArea&amp;lt;/code&amp;gt; track contains the object.&lt;br /&gt;
* '''The change is too abrupt:''' increase '''Transition Time''' and retest both entry and exit.&lt;br /&gt;
* '''The scene becomes too bright or dark:''' move '''Exposure''' toward the map's surrounding value and evaluate it with the final lighting setup.&lt;br /&gt;
* '''The result clips bright parts of the image:''' adjust '''White Cut''' separately from exposure; they are distinct stored values.&lt;br /&gt;
* '''The effect disappears after copying a map:''' keep the &amp;lt;code&amp;gt;.hpm_ExposureArea&amp;lt;/code&amp;gt; sidecar beside the main &amp;lt;code&amp;gt;.hpm&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/Level Design/Exposure Areas|ExposureArea EditMode reference]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Settings|Level-wide tone mapping settings]]&lt;br /&gt;
* [[HPL3/SOMA/Areas|SOMA areas]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas/Sit_Area&amp;diff=7314</id>
		<title>HPL3/SOMA/Areas/Sit Area</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas/Sit_Area&amp;diff=7314"/>
		<updated>2026-10-02T15:17:38Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Add a source-verified SOMA Sit Area guide covering placement, properties, runtime behavior, testing, and documented limitations.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Sit Area''' is an interactable SOMA area that moves the player's camera to the area's position and orientation, then limits how far the player can look while seated. It uses SOMA's dedicated &amp;lt;code&amp;gt;State_Sit&amp;lt;/code&amp;gt; player state.&lt;br /&gt;
&lt;br /&gt;
== Create and place a Sit Area ==&lt;br /&gt;
&lt;br /&gt;
# In the Level Editor, select '''Area EditMode''' and choose the &amp;lt;code&amp;gt;Sit&amp;lt;/code&amp;gt; area type.&lt;br /&gt;
# Place the area where the player's camera should end up while seated.&lt;br /&gt;
# Rotate its orientation indicator toward the desired forward direction. The Sit state reads the area's complete transform as the target camera transform.&lt;br /&gt;
# Set '''MaxYaw''' and '''MaxPitch''' to limit the seated view.&lt;br /&gt;
# Give the area a clear unique name, save the map, and test it in development mode.&lt;br /&gt;
&lt;br /&gt;
The class definition enables the orientation indicator and disables ordinary scaling in the editor. Placement and rotation are therefore the important setup operations. Keep the target camera position clear of nearby geometry.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Type !! Default !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MaxYaw&amp;lt;/code&amp;gt; || Float || &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; || Maximum horizontal view offset from the area's forward direction. The area script converts this editor value from degrees to radians before entering the Sit state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MaxPitch&amp;lt;/code&amp;gt; || Float || &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; || Maximum vertical view offset from the area's forward direction. The area script also converts this value from degrees to radians.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Runtime behavior ==&lt;br /&gt;
&lt;br /&gt;
When the player focuses the area, SOMA displays the sit-down interaction icon. Interacting performs the following sequence:&lt;br /&gt;
&lt;br /&gt;
# The area disables itself so it cannot be selected again during the transition.&lt;br /&gt;
# Its yaw limit, pitch limit, and name are passed to &amp;lt;code&amp;gt;State_Sit&amp;lt;/code&amp;gt;.&lt;br /&gt;
# The player changes to the Sit state.&lt;br /&gt;
# Over &amp;lt;code&amp;gt;1.5&amp;lt;/code&amp;gt; seconds, the camera interpolates from its original transform to the Sit Area's transform.&lt;br /&gt;
# Once seated, normal movement input is suppressed and look input is clamped to the configured yaw and pitch limits.&lt;br /&gt;
&lt;br /&gt;
The player can leave the state with interaction cancel, forward movement, or jump. On a normal exit, the camera returns to ordinary control and the Sit Area is reactivated. While seated, the player can still interact with a focused prop; SOMA preserves the special read crosshair for readable props and otherwise shows the default crosshair.&lt;br /&gt;
&lt;br /&gt;
== Shipped SOMA reference ==&lt;br /&gt;
&lt;br /&gt;
SOMA contains one serialized Sit Area, &amp;lt;code&amp;gt;SitArea_5&amp;lt;/code&amp;gt;, in &amp;lt;code&amp;gt;maps/chapter00/00_03_laboratory/00_03_laboratory.hpm_Area&amp;lt;/code&amp;gt;. It uses the default values &amp;lt;code&amp;gt;MaxYaw=80&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MaxPitch=50&amp;lt;/code&amp;gt;, and its rotation faces in the opposite horizontal direction from the default orientation.&lt;br /&gt;
&lt;br /&gt;
That shipped instance is saved with &amp;lt;code&amp;gt;Active=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt;. It confirms the serialized type, transform, and properties, but it is not an active campaign demonstration of the complete interaction.&lt;br /&gt;
&lt;br /&gt;
== Test the area ==&lt;br /&gt;
&lt;br /&gt;
# Approach the area and confirm that the sit-down icon appears.&lt;br /&gt;
# Interact and confirm that the camera moves to the intended position without clipping into the seat or nearby geometry.&lt;br /&gt;
# Look in every direction and verify that the limits fit the scene.&lt;br /&gt;
# Press interaction cancel, forward, or jump and confirm that ordinary camera and movement control return.&lt;br /&gt;
# Interact again to confirm that the area was reactivated.&lt;br /&gt;
&lt;br /&gt;
== Still to verify ==&lt;br /&gt;
&lt;br /&gt;
SOMA has no active shipped Sit Area to use as a visual reference. Exact placement relative to different chair meshes, collision-clearance requirements, and behavior after save/load should be verified in a test map.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/SOMA/Areas|SOMA areas]]&lt;br /&gt;
* [[HPL3/SOMA/Getting Started/Test Debug and Continue|Test, debug and continue]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas&amp;diff=7313</id>
		<title>HPL3/SOMA/Areas</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Areas&amp;diff=7313"/>
		<updated>2026-10-02T15:09:52Z</updated>

		<summary type="html">&lt;p&gt;TiMan: /* Unused Areas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{constructionNotice|This category and its sub-pages are undergoing major editing, as some information in this category and all the sub pages is currently in the process of being formatted or re-written from scratch to achieve a higher standard of formatting, or not everything is yet available. More pages and information will gradually be added.}}&lt;br /&gt;
&lt;br /&gt;
'''This category covers everything about the Area in the HPL3 Engine and SOMA.'''&lt;br /&gt;
&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/Areas|Areas Overview]]&lt;br /&gt;
&lt;br /&gt;
== Engine Areas ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
* [[HPL3/Areas/PlayerStart Area|PlayerStart Area]]&lt;br /&gt;
* [[HPL3/Areas/Trigger Area|Trigger Area]]&lt;br /&gt;
* [[HPL3/Areas/DoorwayTrigger Area|DoorwayTrigger Area]]&lt;br /&gt;
* [[HPL3/Areas/PathNode Area|PathNode Area]]&lt;br /&gt;
* [[HPL3/Areas/Sticky Area|Sticky Area]]&lt;br /&gt;
* [[HPL3/Areas/InteractAux Area|InteractAux Area]]&lt;br /&gt;
&lt;br /&gt;
=== Effects ===&lt;br /&gt;
* [[HPL3/Areas/Fog Area|Fog Area]]&lt;br /&gt;
* [[HPL3/Areas/SoundScape Area|Soundscape Area]]&lt;br /&gt;
* [[HPL3/Areas/Camera Animation Area|Camera Animation Area]]&lt;br /&gt;
* [[HPL3/Areas/Liquid Area|Liquid Area]]&lt;br /&gt;
* [[HPL3/Areas/Ambient Light Area|Ambient Light Area]]&lt;br /&gt;
* [[HPL3/Areas/Exposure Area|Exposure Area]]&lt;br /&gt;
&lt;br /&gt;
=== Gameplay ===&lt;br /&gt;
* [[HPL3/Areas/Climb Area|Climb Area]]&lt;br /&gt;
* [[HPL3/Areas/Crawl Area|Crawl Area]]&lt;br /&gt;
* [[HPL3/Areas/Hide Area|Hide Area]]&lt;br /&gt;
* [[HPL3/Areas/Ladder Area|Ladder Area]]&lt;br /&gt;
* [[HPL3/Areas/Zoom Area|Zoom Area]]&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/Areas/Visibility Area|Visibility Area]]&lt;br /&gt;
* [[HPL3/Areas/VisibilityPortal Area|VisibilityPortal Area]]&lt;br /&gt;
* [[HPL3/Areas/MapTransfer Area|MapTransfer Area]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Game-Specific Areas ==&lt;br /&gt;
* [[HPL3/SOMA/Areas/Tool Area|Tool Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/Sit Area|Sit Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/Distortion Area|Distortion Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/Datamine Area|Datamine Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/AgentRepel Area|AgentRepel Area]]&lt;br /&gt;
&lt;br /&gt;
== Unused Areas ==&lt;br /&gt;
* [[HPL3/Areas/Description Area|Description Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/DatamineAudioSource Area|DatamineAudioSource Area]]&lt;br /&gt;
* [[HPL3/SOMA/Areas/DatamineAnimNode Area|DatamineAnimNode Area]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7312</id>
		<title>HPL3/SOMA/Level Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7312"/>
		<updated>2026-10-02T15:08:08Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Repair the Level Design category layout using the equivalent explicit two-column table markup.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This category deals with the SOMA Level Editor, Level Design and related topics.'''&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;8px&amp;quot; style=&amp;quot;background:#404040; border:none 1px solid;&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;99&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#262626; vertical-align: top; padding:0 1em 1em; border:none;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Your First Map|Your First Map]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Advice for Level Designers|Advice for Level Designers]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Controls|Level Editor Controls]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor View|Level Editor View]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Toolbar|Level Editor Toolbar]]&lt;br /&gt;
* [[HPL3/Level Design/Level Editor Color Dialog|Level Editor Color Dialog]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Preferences|Level Editor Preferences]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Settings|Level Settings]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Information|Level Information]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Pose Editor|Pose Editor]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Finding Objects|Finding Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Importing and Exporting Objects|Importing and Exporting Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Compounds|Compounds]]&lt;br /&gt;
&lt;br /&gt;
== Primitives ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Primitives|Working with Primitives]]&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Static Objects|Working with Static Objects]]&lt;br /&gt;
&lt;br /&gt;
== Entities ==&lt;br /&gt;
* [[HPL3/Level Design/Working with Entities|Working with Entities]]&lt;br /&gt;
* [[HPL3/Level Design/Entity Poser|Entity Poser]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Mesh Entity|Detail Mesh Entity]]&lt;br /&gt;
&lt;br /&gt;
== Lighting ==&lt;br /&gt;
* [[HPL3/Level Design/Lights Overview|Lights Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Point Lights|Point Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Spot Lights|Spot Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Light Masks|Light Masks]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Global Spot Light|Global Spot Light]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/SH Probes|SH Probes]]&lt;br /&gt;
&lt;br /&gt;
| rowspan=&amp;quot;99&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#262626; vertical-align: top; padding:0 1em 1em; border:none;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Terrain Editor ==&lt;br /&gt;
* [[HPL3/Level Design/Terrain Editor Overview|Terrain Editor Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Creating Terrain|Creating Terrain]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Height Map|Terrain Height Map]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Painting|Terrain Painting]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Texturing|Terrain Texturing]]&lt;br /&gt;
* [[HPL3/Level Design/Undergrowth|Undergrowth]]&lt;br /&gt;
&lt;br /&gt;
== Effects ==&lt;br /&gt;
* [[HPL3/Level Design/HDR|HDR]]&lt;br /&gt;
* [[HPL3/Color_Grading|Color Grading]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Environment Particles|Environment Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Billboards|Billboards]]&lt;br /&gt;
* [[HPL3/Level Design/Lens Flares|Lens Flares]]&lt;br /&gt;
* [[HPL3/Level Design/Particles|Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Sounds|Sounds]]&lt;br /&gt;
* [[HPL3/Level Design/Decals|Decals]]&lt;br /&gt;
* [[HPL3/Level Design/Fog Areas|Fog Areas]]&lt;br /&gt;
* [[HPL3/Level Design/Exposure Areas|Exposure Areas]]&lt;br /&gt;
&lt;br /&gt;
== Detailing ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Combos|Combos]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Meshes|Detail Meshes]]&lt;br /&gt;
&lt;br /&gt;
== Design Theory ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Indoor Level Performance|Indoor Level Performance]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Outdoor Level Performance|Outdoor Level Performance]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[https://docs.google.com/document/d/1fAlf2MwEFTwePwzbP3try1H0aYa9kpVBHPBkyIq-caY/edit In Pursuit of Better Levels] - Free educational book on Level Design &lt;br /&gt;
*[[HPL3/Resources/TDD Asset Pack|&amp;quot;Amnesia: The Dark Descent&amp;quot; Asset Pack]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7311</id>
		<title>HPL3/SOMA/Level Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7311"/>
		<updated>2026-10-02T15:04:26Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Point Creating Terrain directly to the expanded SOMA-specific terrain guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This category deals with the SOMA Level Editor, Level Design and related topics.'''&lt;br /&gt;
{​{CategoryHeader}}&lt;br /&gt;
{​{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Your First Map|Your First Map]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Advice for Level Designers|Advice for Level Designers]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Controls|Level Editor Controls]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor View|Level Editor View]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Toolbar|Level Editor Toolbar]]&lt;br /&gt;
* [[HPL3/Level Design/Level Editor Color Dialog|Level Editor Color Dialog]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Preferences|Level Editor Preferences]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Settings|Level Settings]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Information|Level Information]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Pose Editor|Pose Editor]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Finding Objects|Finding Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Importing and Exporting Objects|Importing and Exporting Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Compounds|Compounds]]&lt;br /&gt;
&lt;br /&gt;
== Primitives ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Primitives|Working with Primitives]]&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Static Objects|Working with Static Objects]]&lt;br /&gt;
&lt;br /&gt;
== Entities ==&lt;br /&gt;
* [[HPL3/Level Design/Working with Entities|Working with Entities]]&lt;br /&gt;
* [[HPL3/Level Design/Entity Poser|Entity Poser]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Mesh Entity|Detail Mesh Entity]]&lt;br /&gt;
&lt;br /&gt;
== Lighting ==&lt;br /&gt;
* [[HPL3/Level Design/Lights Overview|Lights Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Point Lights|Point Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Spot Lights|Spot Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Light Masks|Light Masks]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Global Spot Light|Global Spot Light]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/SH Probes|SH Probes]]&lt;br /&gt;
&lt;br /&gt;
{​{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Terrain Editor ==&lt;br /&gt;
* [[HPL3/Level Design/Terrain Editor Overview|Terrain Editor Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Creating Terrain|Creating Terrain]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Height Map|Terrain Height Map]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Painting|Terrain Painting]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Texturing|Terrain Texturing]]&lt;br /&gt;
* [[HPL3/Level Design/Undergrowth|Undergrowth]]&lt;br /&gt;
&lt;br /&gt;
== Effects ==&lt;br /&gt;
* [[HPL3/Level Design/HDR|HDR]]&lt;br /&gt;
* [[HPL3/Color_Grading|Color Grading]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Environment Particles|Environment Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Billboards|Billboards]]&lt;br /&gt;
* [[HPL3/Level Design/Lens Flares|Lens Flares]]&lt;br /&gt;
* [[HPL3/Level Design/Particles|Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Sounds|Sounds]]&lt;br /&gt;
* [[HPL3/Level Design/Decals|Decals]]&lt;br /&gt;
* [[HPL3/Level Design/Fog Areas|Fog Areas]]&lt;br /&gt;
* [[HPL3/Level Design/Exposure Areas|Exposure Areas]]&lt;br /&gt;
&lt;br /&gt;
== Detailing ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Combos|Combos]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Meshes|Detail Meshes]]&lt;br /&gt;
&lt;br /&gt;
== Design Theory ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Indoor Level Performance|Indoor Level Performance]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Outdoor Level Performance|Outdoor Level Performance]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[https://docs.google.com/document/d/1fAlf2MwEFTwePwzbP3try1H0aYa9kpVBHPBkyIq-caY/edit In Pursuit of Better Levels] - Free educational book on Level Design &lt;br /&gt;
*[[HPL3/Resources/TDD Asset Pack|&amp;quot;Amnesia: The Dark Descent&amp;quot; Asset Pack]]&lt;br /&gt;
{​{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Level_Design/Creating_Terrain&amp;diff=7310</id>
		<title>HPL3/Level Design/Creating Terrain</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Level_Design/Creating_Terrain&amp;diff=7310"/>
		<updated>2026-10-02T15:04:24Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Resolve the terrain-guide redlink to the expanded source-verified SOMA article.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Level Design/Creating Terrain]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Creating_Terrain&amp;diff=7309</id>
		<title>HPL3/SOMA/Level Design/Creating Terrain</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Creating_Terrain&amp;diff=7309"/>
		<updated>2026-10-02T15:03:58Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Expand the SOMA terrain guide with verified setup fields, creation workflow, shipped-map examples, sidecar files, validation constraints, and troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{​{shortPageTitle}}&lt;br /&gt;
&lt;br /&gt;
A '''terrain''' is an editable height-mapped surface created inside the SOMA Level Editor. It is useful for large continuous ground such as a seabed or an outdoor landscape. Terrain has separate tools for shaping its height map, painting materials, adding terrain decals, and placing undergrowth.&lt;br /&gt;
&lt;br /&gt;
{​{note|Create terrain in a map inside your mod, not in one of SOMA's original maps. Creating a new terrain cannot be undone and clears the editor's undo history. Save the map before opening the creation dialog.}}&lt;br /&gt;
&lt;br /&gt;
== Before you start ==&lt;br /&gt;
&lt;br /&gt;
# Open your mod's map in &amp;lt;code&amp;gt;LevelEditor.exe&amp;lt;/code&amp;gt;. See [[HPL3/SOMA/Getting Started/Edit Your First Map|Edit Your First Map]] if the mod-aware editor and save/reopen workflow have not already been tested.&lt;br /&gt;
# Save a backup of the map and all of its adjacent &amp;lt;code&amp;gt;.hpm_*&amp;lt;/code&amp;gt; files.&lt;br /&gt;
# Select '''Terrain EditMode''' on the Level Editor toolbar.&lt;br /&gt;
&lt;br /&gt;
Every inspected shipped SOMA map has a terrain track named &amp;lt;code&amp;gt;&amp;amp;lt;map name&amp;amp;gt;.hpm_Terrain&amp;lt;/code&amp;gt;. A shipped map without terrain keeps this track with &amp;lt;code&amp;gt;Active=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt;; an active terrain definition records &amp;lt;code&amp;gt;Active=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; and its setup data.&lt;br /&gt;
&lt;br /&gt;
== Create the terrain ==&lt;br /&gt;
&lt;br /&gt;
# In Terrain EditMode, open '''Terrain Setup''' and choose '''Create Terrain'''.&lt;br /&gt;
# Set '''HeightMap Size''', '''Unit Size''', '''Max Height''', '''Geometry Patch Size''', and '''Texture Patch Size'''. The dialog also displays the resulting terrain size and texel density.&lt;br /&gt;
# Review the warning, then click '''Create'''. Creation cannot be undone and clears the undo stack.&lt;br /&gt;
# Save the map before doing detailed sculpting or painting.&lt;br /&gt;
&lt;br /&gt;
The setup values determine the terrain's resolution, scale, vertical range, and patch layout. Choose them before investing time in editing: creating another terrain is a destructive replacement rather than an ordinary undoable edit.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting !! Purpose and verified constraints&lt;br /&gt;
|-&lt;br /&gt;
| '''HeightMap Size''' || Sets the stored height-map resolution. SOMA's active shipped terrains use either &amp;lt;code&amp;gt;512&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1024&amp;lt;/code&amp;gt;. The engine rejects a height map that is smaller than either patch size and rejects a height map whose width and height differ.&lt;br /&gt;
|-&lt;br /&gt;
| '''Unit Size''' || Controls the terrain's world scale and therefore affects the size and texel-density values shown by the dialog. Nine of the ten inspected active SOMA terrains use &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;; one uses &amp;lt;code&amp;gt;0.5&amp;lt;/code&amp;gt;. The SOMA outdoor-performance guide recommends &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; or higher for outdoor terrain.&lt;br /&gt;
|-&lt;br /&gt;
| '''Max Height''' || Sets the terrain's available vertical range. This is project-dependent: shipped values range from &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;512&amp;lt;/code&amp;gt;, so there is no single campaign-wide value to copy.&lt;br /&gt;
|-&lt;br /&gt;
| '''Geometry Patch Size''' || Sets the geometry patch size. It must be a power of two and cannot be larger than the height map. Active shipped SOMA terrains use &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;32&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| '''Texture Patch Size''' || Sets the texture patch size. It must be a power of two, cannot be smaller than the geometry patch size, and cannot be larger than the height map. Every inspected active SOMA terrain uses the same value for its geometry and texture patch sizes, matching the outdoor-performance guide.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The values above describe shipped SOMA data and executable validation messages; they are not universal presets. A small test terrain can follow the compact &amp;lt;code&amp;gt;05_01_phi_inside&amp;lt;/code&amp;gt; example below, but its dimensions and height range still need to fit the intended map.&lt;br /&gt;
&lt;br /&gt;
== Shape the height map ==&lt;br /&gt;
&lt;br /&gt;
Open the '''HeightMap''' terrain submode. It provides three brush types:&lt;br /&gt;
&lt;br /&gt;
* '''Raise/Lower''' adds or subtracts height where the brush is applied.&lt;br /&gt;
* '''Flatten''' moves the affected area toward a chosen height.&lt;br /&gt;
* '''Smooth''' reduces sharp height changes.&lt;br /&gt;
&lt;br /&gt;
The brush controls exposed by the SOMA editor include '''Inner Radius''', '''Outer Radius''', '''Falloff Exp''', optional brush noise, octave count, and noise frequency. Work from broad forms to small corrections: establish the main silhouette with a large brush, flatten areas that need deliberate level ground, and smooth unwanted spikes last.&lt;br /&gt;
&lt;br /&gt;
The HeightMap tools also provide '''Import''', '''Export''', and '''Generate'''. When importing, use a square, uncompressed source of an appropriate resolution; the engine reports errors for compressed bitmaps and non-square height maps. Keep a copy of an external source image because the map's working terrain height map is saved as a DDS sidecar.&lt;br /&gt;
&lt;br /&gt;
== Give the terrain a material ==&lt;br /&gt;
&lt;br /&gt;
Switch to the terrain's '''Texture''' submode after the surface exists.&lt;br /&gt;
&lt;br /&gt;
# Assign a '''Base material file'''. This covers terrain that has not been painted by a blend-layer material.&lt;br /&gt;
# Adjust its '''Tile amount''', '''HM scale''', '''Fade start''', and three-component '''Detail texture amount''' only as required by the material and scene.&lt;br /&gt;
# Set '''Specular Power''' for the terrain.&lt;br /&gt;
# Add a blend layer if more surface materials are needed. A blend layer contains four material slots; select the target layer and sublayer before painting.&lt;br /&gt;
# Assign terrain &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; files to the required slots, then use the '''Add''' and '''Erase''' brushes to edit their coverage.&lt;br /&gt;
# Optionally configure up to three detail textures and their fade range. Cliff diffuse/normal textures and undergrowth can be added later when the basic terrain has been verified.&lt;br /&gt;
&lt;br /&gt;
Use materials whose type is suitable for terrain. Material paths and painted masks are separate data: the paths are recorded in &amp;lt;code&amp;gt;.hpm_Terrain&amp;lt;/code&amp;gt;, while each saved blend layer has a corresponding DDS mask.&lt;br /&gt;
&lt;br /&gt;
== Save and verify ==&lt;br /&gt;
&lt;br /&gt;
# Save the map, close it, and reopen it in the Level Editor.&lt;br /&gt;
# Confirm that the terrain is still active, has the expected dimensions, and retains a visible base material.&lt;br /&gt;
# Make one obvious Raise/Lower edit, save and reopen again, and confirm that the shape persists.&lt;br /&gt;
# If a blend layer was added, paint a clearly visible test patch and verify that it also persists.&lt;br /&gt;
# Launch the mod and inspect the terrain from the player's reachable area. Check collision, slopes, material scale, and the transition between terrain and surrounding meshes.&lt;br /&gt;
&lt;br /&gt;
A saved terrain uses files beside the main &amp;lt;code&amp;gt;.hpm&amp;lt;/code&amp;gt; map:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! File !! Stored content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;map&amp;amp;gt;.hpm_Terrain&amp;lt;/code&amp;gt; || Terrain setup, material paths, detail-texture settings, blend-layer definitions, terrain decals, and undergrowth records.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;map&amp;amp;gt;.hpm_Terrain_heightmap.dds&amp;lt;/code&amp;gt; || The active terrain's height-map data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;map&amp;amp;gt;.hpm_Terrain_blendlayer_N.dds&amp;lt;/code&amp;gt; || Painted data for blend layer &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. There is one such sidecar for each saved blend layer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Keep these files together when copying, renaming, packaging, or restoring the map. Editing only the main &amp;lt;code&amp;gt;.hpm&amp;lt;/code&amp;gt; file does not preserve the terrain.&lt;br /&gt;
&lt;br /&gt;
== Shipped SOMA example ==&lt;br /&gt;
&lt;br /&gt;
The comparatively small terrain in &amp;lt;code&amp;gt;maps/chapter05/05_01_phi_inside/05_01_phi_inside.hpm_Terrain&amp;lt;/code&amp;gt; demonstrates a complete active terrain without cliff textures or undergrowth:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting !! Stock value&lt;br /&gt;
|-&lt;br /&gt;
| HeightMap Size || &amp;lt;code&amp;gt;512&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Unit Size || &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Max Height || &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Geometry / Texture Patch Size || &amp;lt;code&amp;gt;16 / 16&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Base material || &amp;lt;code&amp;gt;textures/terrain/sand/sand_flat.mat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Blend layers / material slots || &amp;lt;code&amp;gt;1 / 4&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Larger outdoor campaign terrains commonly use a height-map size of &amp;lt;code&amp;gt;1024&amp;lt;/code&amp;gt; and matching patch sizes of &amp;lt;code&amp;gt;32&amp;lt;/code&amp;gt;, but their maximum heights and materials vary substantially. Treat shipped maps as structural examples rather than templates whose numbers should be copied unchanged.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
* '''The terrain is absent after reopening:''' confirm that &amp;lt;code&amp;gt;&amp;amp;lt;map&amp;amp;gt;.hpm_Terrain&amp;lt;/code&amp;gt; is writable, remains beside the main map, and contains &amp;lt;code&amp;gt;Active=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''The terrain is untextured or uses a fallback:''' check the base terrain material path and ensure the material and all referenced textures are included by the mod's resources configuration.&lt;br /&gt;
* '''The editor rejects the patch settings:''' both patch sizes must be powers of two, the texture patch cannot be smaller than the geometry patch, and neither can exceed the height-map size.&lt;br /&gt;
* '''An imported height map fails:''' use a square, uncompressed image. Check that its resolution is not below either patch size.&lt;br /&gt;
* '''Paint disappears when the map is moved or packaged:''' include every &amp;lt;code&amp;gt;_blendlayer_N.dds&amp;lt;/code&amp;gt; file with the map.&lt;br /&gt;
* '''The terrain is too expensive:''' begin with [[HPL3/SOMA/Level Design/Outdoor Level Performance#Terrain|the terrain optimization checklist]]. In particular, use matching geometry and texture patch sizes and avoid unnecessarily small unit sizes.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[HPL3/Level Design/Terrain Height Map|Terrain Height Map]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Texturing|Terrain Texturing]]&lt;br /&gt;
* [[HPL3/Level Design/Undergrowth|Undergrowth]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Outdoor Level Performance|Outdoor Level Performance]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=Template:Hpl3DocIndex&amp;diff=7308</id>
		<title>Template:Hpl3DocIndex</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=Template:Hpl3DocIndex&amp;diff=7308"/>
		<updated>2026-10-02T15:00:03Z</updated>

		<summary type="html">&lt;p&gt;TiMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{#if:{{{gettingStartedPage|}}}|&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0 auto 1em; padding:1em; max-width:600px; text-align:center; border:1px solid #555; background:#202122; color:#eaecf0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:125%; font-weight:bold;&amp;quot;&amp;gt;New to {{{gameName}}} modding?&amp;lt;/div&amp;gt;&lt;br /&gt;
Follow the Getting Started guide to create, launch, map, and script your first mod.&lt;br /&gt;
&lt;br /&gt;
[[{{{gettingStartedPage}}}|&amp;lt;span style=&amp;quot;color:#6ea8fe;&amp;quot;&amp;gt;'''Start the {{{gameName}}} Getting Started guide →'''&amp;lt;/span&amp;gt;]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto;&amp;quot;&lt;br /&gt;
|+&amp;lt;p style=&amp;quot;margin:1em auto 0; text-align:center; width:400px;&amp;quot;&amp;gt;[[File:{{{bannerImage|}}}|250px|link=|{{{gameName}}}]]&amp;lt;/p&amp;gt;&amp;lt;p style=&amp;quot;margin:1em auto 0; text-align:center; width:400px;&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Modding|&amp;lt;center&amp;gt;Modding&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Create, organize and release your {{{gameName}}} mods&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Tutorials|&amp;lt;center&amp;gt;Tutorials&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Step-by-step guides on a variety of topics, created by the community&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Level Design|&amp;lt;center&amp;gt;Level Design&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Work with the Level Editor and create immersive worlds&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Areas|&amp;lt;center&amp;gt;Areas&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Areas are the main Input and Output systems of HPL3, and are the backbone of every level in the game&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Scripting|&amp;lt;center&amp;gt;Scripting&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Script levels, program gameplay mechanics and modify the inner workings of the game, using AngelScript&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Modeling|&amp;lt;center&amp;gt;Modeling&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Import, export, add and modify 3D models for the game&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Animation|&amp;lt;center&amp;gt;Animation&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Export and add animations for your in-game 3D models&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Entities|&amp;lt;center&amp;gt;Entities&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Use the Model Editor to create interactive and dynamic objects&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Materials|&amp;lt;center&amp;gt;Materials&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Use the Material Editor to combine Textures and Shaders to create materials&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Particles|&amp;lt;center&amp;gt;Particles&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Use the Particle Editor to create 3D or 2D Effects like smoke, sparks, blood and fire&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Sound|&amp;lt;center&amp;gt;Sound&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Create and configure sound to add a depth and atmosphere to the game&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Audition|&amp;lt;center&amp;gt;Audition&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Create and manage voice lines, dialogues, voice effects and lip-sync&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Shaders|&amp;lt;center&amp;gt;Shaders&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Learn and modify the graphical building blocks of the game&lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Third Party Tools|&amp;lt;center&amp;gt;Third-Party Tools&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Useful developer tools, some of which are created by the community &lt;br /&gt;
|-&lt;br /&gt;
|'''[[HPL3/{{{gameName}}}/Glossary|&amp;lt;center&amp;gt;Glossary&amp;lt;/center&amp;gt;]]'''&lt;br /&gt;
|Explanations for terms you may encounter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
__NOTOC____NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7307</id>
		<title>HPL3/SOMA/Level Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7307"/>
		<updated>2026-10-02T12:52:55Z</updated>

		<summary type="html">&lt;p&gt;TiMan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This category deals with the SOMA Level Editor, Level Design and related topics.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Your First Map|Your First Map]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Advice for Level Designers|Advice for Level Designers]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Controls|Level Editor Controls]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor View|Level Editor View]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Toolbar|Level Editor Toolbar]]&lt;br /&gt;
* [[HPL3/Level Design/Level Editor Color Dialog|Level Editor Color Dialog]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Preferences|Level Editor Preferences]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Settings|Level Settings]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Information|Level Information]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Pose Editor|Pose Editor]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Finding Objects|Finding Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Importing and Exporting Objects|Importing and Exporting Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Compounds|Compounds]]&lt;br /&gt;
&lt;br /&gt;
== Primitives ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Primitives|Working with Primitives]]&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Static Objects|Working with Static Objects]]&lt;br /&gt;
&lt;br /&gt;
== Entities ==&lt;br /&gt;
* [[HPL3/Level Design/Working with Entities|Working with Entities]]&lt;br /&gt;
* [[HPL3/Level Design/Entity Poser|Entity Poser]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Mesh Entity|Detail Mesh Entity]]&lt;br /&gt;
&lt;br /&gt;
== Lighting ==&lt;br /&gt;
* [[HPL3/Level Design/Lights Overview|Lights Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Point Lights|Point Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Spot Lights|Spot Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Light Masks|Light Masks]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Global Spot Light|Global Spot Light]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/SH Probes|SH Probes]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Terrain Editor ==&lt;br /&gt;
* [[HPL3/Level Design/Terrain Editor Overview|Terrain Editor Overview]]&lt;br /&gt;
* [[HPL3/Level Design/Creating Terrain|Creating Terrain]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Height Map|Terrain Height Map]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Painting|Terrain Painting]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Texturing|Terrain Texturing]]&lt;br /&gt;
* [[HPL3/Level Design/Undergrowth|Undergrowth]]&lt;br /&gt;
&lt;br /&gt;
== Effects ==&lt;br /&gt;
* [[HPL3/Level Design/HDR|HDR]]&lt;br /&gt;
* [[HPL3/Color_Grading|Color Grading]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Environment Particles|Environment Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Billboards|Billboards]]&lt;br /&gt;
* [[HPL3/Level Design/Lens Flares|Lens Flares]]&lt;br /&gt;
* [[HPL3/Level Design/Particles|Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Sounds|Sounds]]&lt;br /&gt;
* [[HPL3/Level Design/Decals|Decals]]&lt;br /&gt;
* [[HPL3/Level Design/Fog Areas|Fog Areas]]&lt;br /&gt;
* [[HPL3/Level Design/Exposure Areas|Exposure Areas]]&lt;br /&gt;
&lt;br /&gt;
== Detailing ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Combos|Combos]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Meshes|Detail Meshes]]&lt;br /&gt;
&lt;br /&gt;
== Design Theory ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Indoor Level Performance|Indoor Level Performance]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Outdoor Level Performance|Outdoor Level Performance]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[https://docs.google.com/document/d/1fAlf2MwEFTwePwzbP3try1H0aYa9kpVBHPBkyIq-caY/edit In Pursuit of Better Levels] - Free educational book on Level Design &lt;br /&gt;
*[[HPL3/Resources/TDD Asset Pack|&amp;quot;Amnesia: The Dark Descent&amp;quot; Asset Pack]]&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7306</id>
		<title>HPL3/SOMA/Level Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design&amp;diff=7306"/>
		<updated>2026-10-02T12:49:57Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Point the three completed Level Design topics directly to their SOMA-specific guides.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{constructionNotice|This category and its sub-pages are undergoing major editing, as some information in this category and all the sub pages is currently in the process of being formatted or re-written from scratch to achieve a higher standard of formatting, or not everything is yet available. More pages and information will gradually be added.}}&lt;br /&gt;
&lt;br /&gt;
'''This category deals with the SOMA Level Editor, Level Design and related topics.'''&lt;br /&gt;
{{CategoryHeader}}&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Your First Map|Your First Map]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Advice for Level Designers|Advice for Level Designers]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Controls|Level Editor Controls]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor View|Level Editor View]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Toolbar|Level Editor Toolbar]]&lt;br /&gt;
* [[HPL3/Level Design/Level Editor Color Dialog|Level Editor Color Dialog]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Preferences|Level Editor Preferences]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Settings|Level Settings]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Information|Level Information]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Pose Editor|Pose Editor]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Finding Objects|Finding Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Importing and Exporting Objects|Importing and Exporting Objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Compounds|Compounds]]&lt;br /&gt;
&lt;br /&gt;
== Primitives ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Primitives|Working with Primitives]]&lt;br /&gt;
&lt;br /&gt;
== Static Objects ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Working with Static Objects|Working with Static Objects]]&lt;br /&gt;
&lt;br /&gt;
== Entities ==&lt;br /&gt;
* [[HPL3/Level Design/Working with Entities|Working with Entities]]&lt;br /&gt;
* [[HPL3/Level Design/Entity Poser|Entity Poser]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Mesh Entity|Detail Mesh Entity]]&lt;br /&gt;
&lt;br /&gt;
== Lighting ==&lt;br /&gt;
* [[HPL3/Level Design/Lights Overview|Lights Overview]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Point Lights|Point Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Spot Lights|Spot Lights]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Light Masks|Light Masks]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Global Spot Light|Global Spot Light]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/SH Probes|SH Probes]]&lt;br /&gt;
&lt;br /&gt;
{{CategoryNewcolumn}}&lt;br /&gt;
&lt;br /&gt;
== Terrain Editor ==&lt;br /&gt;
* [[HPL3/Level Design/Terrain Editor Overview|Terrain Editor Overview]]&lt;br /&gt;
* [[HPL3/Level Design/Creating Terrain|Creating Terrain]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Height Map|Terrain Height Map]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Painting|Terrain Painting]]&lt;br /&gt;
* [[HPL3/Level Design/Terrain Texturing|Terrain Texturing]]&lt;br /&gt;
* [[HPL3/Level Design/Undergrowth|Undergrowth]]&lt;br /&gt;
&lt;br /&gt;
== Effects ==&lt;br /&gt;
* [[HPL3/Level Design/HDR|HDR]]&lt;br /&gt;
* [[HPL3/Color_Grading|Color Grading]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Environment Particles|Environment Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Billboards|Billboards]]&lt;br /&gt;
* [[HPL3/Level Design/Lens Flares|Lens Flares]]&lt;br /&gt;
* [[HPL3/Level Design/Particles|Particles]]&lt;br /&gt;
* [[HPL3/Level Design/Sounds|Sounds]]&lt;br /&gt;
* [[HPL3/Level Design/Decals|Decals]]&lt;br /&gt;
* [[HPL3/Level Design/Fog Areas|Fog Areas]]&lt;br /&gt;
* [[HPL3/Level Design/Exposure Areas|Exposure Areas]]&lt;br /&gt;
&lt;br /&gt;
== Detailing ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Combos|Combos]]&lt;br /&gt;
* [[HPL3/Level Design/Detail Meshes|Detail Meshes]]&lt;br /&gt;
&lt;br /&gt;
== Design Theory ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Indoor Level Performance|Indoor Level Performance]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Outdoor Level Performance|Outdoor Level Performance]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[https://docs.google.com/document/d/1fAlf2MwEFTwePwzbP3try1H0aYa9kpVBHPBkyIq-caY/edit In Pursuit of Better Levels] - Free educational book on Level Design &lt;br /&gt;
*[[HPL3/Resources/TDD Asset Pack|&amp;quot;Amnesia: The Dark Descent&amp;quot; Asset Pack]]&lt;br /&gt;
{{CategoryEnd}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Entry pages]]&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=Advice_for_Level_Designers&amp;diff=7305</id>
		<title>Advice for Level Designers</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=Advice_for_Level_Designers&amp;diff=7305"/>
		<updated>2026-10-02T12:49:25Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Resolve the Level Design redlink to the expanded source-verified SOMA guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Level Design/Advice for Level Designers]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Level_Design/Environment_Particles&amp;diff=7304</id>
		<title>HPL3/Level Design/Environment Particles</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Level_Design/Environment_Particles&amp;diff=7304"/>
		<updated>2026-10-02T12:49:22Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Resolve the Level Design redlink to the expanded source-verified SOMA guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Level Design/Environment Particles]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/Level_Design/Combos&amp;diff=7303</id>
		<title>HPL3/Level Design/Combos</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/Level_Design/Combos&amp;diff=7303"/>
		<updated>2026-10-02T12:49:17Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Resolve the Level Design redlink to the expanded source-verified SOMA guide.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HPL3/SOMA/Level Design/Combos]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Advice_for_Level_Designers&amp;diff=7302</id>
		<title>HPL3/SOMA/Level Design/Advice for Level Designers</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Advice_for_Level_Designers&amp;diff=7302"/>
		<updated>2026-10-02T12:48:26Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Expand the SOMA guide with verified stock examples, practical steps and precise remaining documentation gaps.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{shortPageTitle}}&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
Start with a working map-editing loop, then check how your layout, lights and effects affect rendering. This guide brings together SOMA’s existing editing and performance guidance so you can apply it while building a level.&lt;br /&gt;
&lt;br /&gt;
== Prove that your edits load ==&lt;br /&gt;
# Work on the map inside your mod and check the editor title bar for &amp;lt;code&amp;gt;(Working on mod)&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Move one existing object an obvious distance, save the map, then close and reopen it.&lt;br /&gt;
# Launch the mod and confirm the same change appears in-game.&lt;br /&gt;
# Continue with one small map or script change at a time. In development mode, use &amp;lt;code&amp;gt;F5&amp;lt;/code&amp;gt; to restart the map and &amp;lt;code&amp;gt;F1&amp;lt;/code&amp;gt; to inspect '''Show Error List''' or '''Show HPL Log''' when a change fails.&lt;br /&gt;
&lt;br /&gt;
Keep the map’s &amp;lt;code&amp;gt;.hpm&amp;lt;/code&amp;gt; file and its &amp;lt;code&amp;gt;.hpm_*&amp;lt;/code&amp;gt; tracks together. If an old version appears, the Getting Started guide recommends closing the game and relaunching the mod to rule out cached state.&lt;br /&gt;
&lt;br /&gt;
== Plan indoor rooms around what can be seen ==&lt;br /&gt;
Occlusion culling determines which objects are visible from a position in the level. The [[HPL3/SOMA/Level Design/Indoor Level Performance|indoor performance guide]] recommends separating rooms and their object bounds, using doors or other occluders, and avoiding uninterrupted sightlines between rooms. A diagonal or zigzag corridor is one of its examples.&lt;br /&gt;
&lt;br /&gt;
For a troublesome doorway, check these items:&lt;br /&gt;
# Inspect whether the door or blockade is an occluder. SOMA’s entity definition exposes &amp;lt;code&amp;gt;IsOccluder&amp;lt;/code&amp;gt;, and the performance guide identifies doors and blockades as useful dynamic occluders.&lt;br /&gt;
# In the debug menu, select '''Render Only Occluders''' under '''In Depth''' to inspect the geometry used for culling.&lt;br /&gt;
# Look for small gaps around the door, walls and floor. The guide’s doorway example shows how geometry leaks can undermine culling.&lt;br /&gt;
&lt;br /&gt;
The same guide cautions that adding many dynamic occluders increases draw calls and queries; the advice is to identify useful blockers rather than enable every entity indiscriminately.&lt;br /&gt;
&lt;br /&gt;
== Check the bounds of shadow-casting lights ==&lt;br /&gt;
The indoor performance guide recommends adjusting a spotlight’s radius and field of view so it does not unnecessarily cover objects or neighboring rooms. It also recommends light masks where a light must be kept within a room.&lt;br /&gt;
&lt;br /&gt;
If a light does not need dynamic shadows for gameplay, the guide recommends disabling '''Shadow affects dynamic'''. It also suggests reducing unnecessary shadow-casting lights and using a gobo where that can replace the required shadow pattern. Test flashlight-dependent rooms with the flashlight on, as the guide explicitly requires that when evaluating performance.&lt;br /&gt;
&lt;br /&gt;
== Check the cost of the effect you add ==&lt;br /&gt;
* For reflective water, the indoor guide recommends reducing the objects visible in the reflection. It also describes disabling reflections or lowering the material’s &amp;lt;code&amp;gt;ReflectionFadeEnd&amp;lt;/code&amp;gt; when the scene needs both water and detail.&lt;br /&gt;
* For outdoor terrain, the outdoor guide recommends using terrain for most of the silhouette and meshes for important landmarks and details.&lt;br /&gt;
* For distant objects, that guide recommends distance culling for suitable details while keeping gameplay objects, landmarks and important objects such as lamps from being culled.&lt;br /&gt;
* For fog culling, the outdoor guide says fully fogged objects beyond Fog End can be culled when silhouettes are not needed. The map helper’s &amp;lt;code&amp;gt;abCulling&amp;lt;/code&amp;gt; argument likewise specifies whether fog-hidden objects are rendered.&lt;br /&gt;
&lt;br /&gt;
== Reuse groups deliberately ==&lt;br /&gt;
For repeated arrangements, [[HPL3/SOMA/Level Design/Combos|combos]] store a compound for placement in the editor. For static geometry, the [[HPL3/Level Design/Working with Static Objects|static-object guide]] describes automatic combining of nearby objects with matching materials and settings. It advises sharing materials among pieces often used together, while avoiding textures that group unrelated surfaces and raise memory requirements. These are different uses of grouping.&lt;br /&gt;
&lt;br /&gt;
== Still to expand ==&lt;br /&gt;
The verified advice here covers map iteration and rendering. A broader guide to gameplay pacing, player guidance, puzzle layout and evaluating playtests still needs topic-specific source material.&lt;br /&gt;
&lt;br /&gt;
== Continue by task ==&lt;br /&gt;
* [[HPL3/SOMA/Getting Started/Edit Your First Map|Make and verify a visible map edit]]&lt;br /&gt;
* [[HPL3/SOMA/Getting Started/Test Debug and Continue|Use the development loop]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Indoor Level Performance|Investigate indoor performance]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Outdoor Level Performance|Investigate outdoor performance]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Environment_Particles&amp;diff=7301</id>
		<title>HPL3/SOMA/Level Design/Environment Particles</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Environment_Particles&amp;diff=7301"/>
		<updated>2026-10-02T12:48:21Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Expand the SOMA guide with verified stock examples, practical steps and precise remaining documentation gaps.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{shortPageTitle}}&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
Environment particles add a field of textured particles to a level. SOMA’s underwater maps use them with the shipped &amp;lt;code&amp;gt;waterdust_tiny_3x3.dds&amp;lt;/code&amp;gt; texture. The renderer turns the particle faces toward the camera and wraps their positions inside a box, so this is a repeating particle field.&lt;br /&gt;
&lt;br /&gt;
== Find the controls ==&lt;br /&gt;
Open '''Level Settings''' and select its '''Env Particles''' tab. '''Active''' toggles the particles, '''Color''' tints them, and '''Brightness''' controls how bright that tint appears.&lt;br /&gt;
&lt;br /&gt;
The SOMA editor also contains controls labelled '''Texture''', '''Box Size''', '''Box Distance''', '''Num Particles''', '''Particle Size''', '''SubDivs''', '''Affected by light''', '''Num of iterations''', '''Gravity Velocity''', '''Wind Velocity''', '''Rotate Velocity''', '''Fade In''' and '''Fade Out'''. The following example gives the authored map values rather than treating them as editor defaults.&lt;br /&gt;
&lt;br /&gt;
== Reproduce the Delta particle settings ==&lt;br /&gt;
Use a map inside your own mod, with the working editor/save/launch setup from [[HPL3/SOMA/Getting Started/Edit Your First Map|Edit Your First Map]]. The example below copies only Delta’s environment-particle settings; Delta’s fog, lighting and other map settings are separate.&lt;br /&gt;
&lt;br /&gt;
# Close the mod map in the editor before editing its &amp;lt;code&amp;gt;.hpm&amp;lt;/code&amp;gt; file.&lt;br /&gt;
# Open your mod’s &amp;lt;code&amp;gt;maps/sample_map/sample_map.hpm&amp;lt;/code&amp;gt; in a text editor. Inside &amp;lt;code&amp;gt;GlobalSettings&amp;lt;/code&amp;gt;, replace its &amp;lt;code&amp;gt;EnvParticles&amp;lt;/code&amp;gt; element with the following element from &amp;lt;code&amp;gt;maps/chapter02/02_03_delta/02_03_delta.hpm&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Reopen the mod map in &amp;lt;code&amp;gt;LevelEditor.exe&amp;lt;/code&amp;gt; and inspect the '''Env Particles''' tab. The texture is populated and the particles are active, whereas the bundled sample map stores an empty texture and &amp;lt;code&amp;gt;Active=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;EnvParticles&lt;br /&gt;
    Color=&amp;quot;0.898438 0.959534 1 1&amp;quot;&lt;br /&gt;
    Brightness=&amp;quot;0.3&amp;quot;&lt;br /&gt;
    BoxDistance=&amp;quot;0.1&amp;quot;&lt;br /&gt;
    GravityVelocity=&amp;quot;0 0.01 0&amp;quot;&lt;br /&gt;
    GravitySpeedRandomAmount=&amp;quot;0&amp;quot;&lt;br /&gt;
    WindVelocity=&amp;quot;0 0 0&amp;quot;&lt;br /&gt;
    WindSpeedRandomAmount=&amp;quot;0&amp;quot;&lt;br /&gt;
    WindDirRandomAmount=&amp;quot;0&amp;quot;&lt;br /&gt;
    RotateVelocity=&amp;quot;0.005 0.005 0.005&amp;quot;&lt;br /&gt;
    RotateSpeedRandomAmount=&amp;quot;1&amp;quot;&lt;br /&gt;
    RotateBothDirs=&amp;quot;true&amp;quot;&lt;br /&gt;
    NumIterations=&amp;quot;2&amp;quot;&lt;br /&gt;
    FadeInStart=&amp;quot;0.1&amp;quot;&lt;br /&gt;
    FadeInEnd=&amp;quot;1&amp;quot;&lt;br /&gt;
    FadeOutStart=&amp;quot;10&amp;quot;&lt;br /&gt;
    FadeOutEnd=&amp;quot;16&amp;quot;&lt;br /&gt;
    BoxSize=&amp;quot;10&amp;quot;&lt;br /&gt;
    NumParticles=&amp;quot;3000&amp;quot;&lt;br /&gt;
    ParticleSize=&amp;quot;0.08 0.08&amp;quot;&lt;br /&gt;
    SubDivUV=&amp;quot;3 3&amp;quot;&lt;br /&gt;
    AffectedByLight=&amp;quot;false&amp;quot;&lt;br /&gt;
    Texture=&amp;quot;particles/underwater/materials/waterdust_tiny_3x3.dds&amp;quot;&lt;br /&gt;
    Active=&amp;quot;true&amp;quot;&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Save the mod map and launch it. The particle field uses the small underwater-dust texture and the pale blue tint from the copied settings.&lt;br /&gt;
# Make one visible comparison in the '''Env Particles''' tab: turn '''Active''' off, save, and restart the map; then turn it on again and repeat. This checks the particle layer separately from fog and other effects. Use [[HPL3/SOMA/Getting Started/Test Debug and Continue|the development loop]] for restarting and reading errors.&lt;br /&gt;
&lt;br /&gt;
== Read the example ==&lt;br /&gt;
* &amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt; references a shipped texture under &amp;lt;code&amp;gt;particles/underwater/materials/&amp;lt;/code&amp;gt;; it is a texture filename, not a &amp;lt;code&amp;gt;.ps&amp;lt;/code&amp;gt; particle-system file.&lt;br /&gt;
* &amp;lt;code&amp;gt;NumParticles=&amp;quot;3000&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ParticleSize=&amp;quot;0.08 0.08&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SubDivUV=&amp;quot;3 3&amp;quot;&amp;lt;/code&amp;gt; are Delta’s authored values. They are not a recommended count or a universal preset.&lt;br /&gt;
* &amp;lt;code&amp;gt;GravityVelocity=&amp;quot;0 0.01 0&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WindVelocity=&amp;quot;0 0 0&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RotateVelocity=&amp;quot;0.005 0.005 0.005&amp;quot;&amp;lt;/code&amp;gt; are distinct motion parameters. The script API has separate setters for all three.&lt;br /&gt;
* The fade-in begins at distance &amp;lt;code&amp;gt;0.1&amp;lt;/code&amp;gt; and finishes at &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;; fade-out begins at &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; and finishes at &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt;. These are distance thresholds, not durations. The map helpers document their meaning, and the rendering shader computes their effect from particle depth.&lt;br /&gt;
&lt;br /&gt;
== Let a script change the field ==&lt;br /&gt;
Map scripts can change the particle field after the map loads. Include &amp;lt;code&amp;gt;helpers/helper_map.hps&amp;lt;/code&amp;gt; alongside your existing map-script includes. The Delta map enables the field with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Map_SetEnvironmentParticlesActive(true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During its transition towards Theta Outside, the same stock script fades all matching particle layers to a new color and brightness:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Map_FadeEnvironmentParticleColor(&amp;quot;*&amp;quot;, cColor(0.295,0.556,0.59,1.0), 7);&lt;br /&gt;
Map_FadeEnvironmentParticleBrightness(&amp;quot;*&amp;quot;, 1, 7);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; selects all particle layers. The last argument is the fade duration; the Map Effects Handler accumulates elapsed update time for these fades. These calls alter existing layers rather than define their texture, particle count or box size.&lt;br /&gt;
&lt;br /&gt;
== If the particles disappear ==&lt;br /&gt;
* Check both the saved &amp;lt;code&amp;gt;Active&amp;lt;/code&amp;gt; value and map-script calls: stock SOMA scripts can enable or disable the field at runtime.&lt;br /&gt;
* Check that the texture exists; the worked example uses &amp;lt;code&amp;gt;particles/underwater/materials/waterdust_tiny_3x3.dds&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Check the fade distances. A particle at the fully faded-out distance contributes no visible alpha.&lt;br /&gt;
* Check clipping when using water areas. The Liquid area definition exposes &amp;lt;code&amp;gt;EnvParticlesToClip&amp;lt;/code&amp;gt; for naming the layers constrained to that area, and accepts wildcards and space-separated names.&lt;br /&gt;
&lt;br /&gt;
== Still to expand ==&lt;br /&gt;
The exact units and ranges for the motion and randomization controls, the meaning of Box Distance and iteration count, and a visually verified editor demonstration still need documentation. The stock values above establish an authored setup, not those undocumented semantics.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[HPL3/Level Design/Level Settings|Level Settings]]&lt;br /&gt;
* [[HPL3/SOMA/Scripting/Map Helper|Map scripting helpers]]&lt;br /&gt;
* [[HPL3/SOMA/Scripting/Map Effects Handler|Fading level effects]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Combos&amp;diff=7300</id>
		<title>HPL3/SOMA/Level Design/Combos</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Level_Design/Combos&amp;diff=7300"/>
		<updated>2026-10-02T12:48:15Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Expand the SOMA guide with verified stock examples, practical steps and precise remaining documentation gaps.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{shortPageTitle}}&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
A combo is a saved compound: an arrangement of objects that can be placed again through the SOMA Level Editor’s Combo EditMode. Use it when you want to reuse a group of pieces rather than assemble each member separately.&lt;br /&gt;
&lt;br /&gt;
== Understand the three kinds of grouping ==&lt;br /&gt;
* A '''compound''' groups objects so they can be transformed together in the editor.&lt;br /&gt;
* A '''combo''' stores a compound in a &amp;lt;code&amp;gt;.cmb&amp;lt;/code&amp;gt; file for placement through Combo EditMode.&lt;br /&gt;
* '''Combine EditMode''' groups static geometry for loading as a whole; the toolbar documentation describes this as an optimization feature. This is a separate toolbar mode from placing saved combos.&lt;br /&gt;
&lt;br /&gt;
== Start with a shipped example ==&lt;br /&gt;
# Open your mod’s map in &amp;lt;code&amp;gt;LevelEditor.exe&amp;lt;/code&amp;gt;; see [[HPL3/SOMA/Getting Started/Edit Your First Map|Edit Your First Map]] for the working-mod setup and save/reopen check.&lt;br /&gt;
# Select '''Combo EditMode''' on the toolbar. It is the mode documented for placing saved compounds.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;combos/urban/tech/alarm_clock.cmb&amp;lt;/code&amp;gt; as the small reference combo. It contains &amp;lt;code&amp;gt;alarm_clock_1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;alarm_clock_button_1&amp;lt;/code&amp;gt;, each referencing its own &amp;lt;code&amp;gt;.ent&amp;lt;/code&amp;gt; file.&lt;br /&gt;
# After placing the combo, compare its members with that file’s &amp;lt;code&amp;gt;Components&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Compound&amp;lt;/code&amp;gt; sections. The compound records both member IDs; it is a group containing two entities.&lt;br /&gt;
# Move the compound with its '''Position''' property, then save and reopen the mod map. Compound position, rotation and scale transform the group together.&lt;br /&gt;
&lt;br /&gt;
The alarm-clock combo uses &amp;lt;code&amp;gt;entities/urban/tech/alarm_clock/alarm_clock.ent&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;entities/urban/tech/alarm_clock/alarm_clock_button.ent&amp;lt;/code&amp;gt;. A larger example, &amp;lt;code&amp;gt;combos/urban/furniture/desk_work.cmb&amp;lt;/code&amp;gt;, contains one desk and three drawer entities. The vegetation example &amp;lt;code&amp;gt;combos/organic/vegetation_clusters/vegetation_cluster01.cmb&amp;lt;/code&amp;gt; contains both static objects and an entity. These are examples of the contents a shipped combo can store.&lt;br /&gt;
&lt;br /&gt;
== Compound transforms ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! What it changes&lt;br /&gt;
|-&lt;br /&gt;
| '''Name''' || The name of the compound.&lt;br /&gt;
|-&lt;br /&gt;
| '''Position''' || The compound’s center position.&lt;br /&gt;
|-&lt;br /&gt;
| '''Rotation''' || The rotation of the group; a member that cannot rotate can restrict this.&lt;br /&gt;
|-&lt;br /&gt;
| '''Scale''' || The scale of the group; a member that cannot scale can restrict this.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Saving your own combo ==&lt;br /&gt;
The shipped editor includes controls labelled '''Create Compound''', '''Save as Combo''' and '''Destroy Compound'''. The saved examples use the &amp;lt;code&amp;gt;.cmb&amp;lt;/code&amp;gt; extension and contain &amp;lt;code&amp;gt;FileIndices&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Components&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Compound&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Thumbnail&amp;lt;/code&amp;gt; sections.&lt;br /&gt;
&lt;br /&gt;
The exact save dialog, destination selection, browser refresh procedure and behavior when an existing combo file changes still need direct editor verification. This page therefore does not prescribe an unverified save-and-refresh sequence.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Compounds|Compound objects]]&lt;br /&gt;
* [[HPL3/SOMA/Level Design/Level Editor Toolbar|Editor modes]]&lt;br /&gt;
* [[HPL3/Level Design/Working with Static Objects|Static geometry and automatic combining]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Scripting/Highlight_Effect_Handler&amp;diff=7299</id>
		<title>HPL3/SOMA/Scripting/Highlight Effect Handler</title>
		<link rel="alternate" type="text/html" href="https://wiki.frictionalgames.com/page?title=HPL3/SOMA/Scripting/Highlight_Effect_Handler&amp;diff=7299"/>
		<updated>2026-10-02T12:32:16Z</updated>

		<summary type="html">&lt;p&gt;TiMan: Expand the practical source walkthrough and clarify how to use the handler.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{shortPageTitle}}&lt;br /&gt;
&lt;br /&gt;
The Highlight Effect Handler briefly sweeps a glow across eligible nearby objects. It scans active physics bodies, checks selected script classes and calls each entity’s _Global_CanBeHighlighted function. The response must supply a Boolean result and the entity ID in global argument 0. On-screen visibility and a minimum light level are also checked.&lt;br /&gt;
&lt;br /&gt;
The stock tool script reads the HighlightActive instance variable. Its _Global_CanBeHighlighted returns that flag and supplies mBaseObj.GetID(); disabling that flag prevents this tool from being accepted by the handler.&lt;br /&gt;
&lt;br /&gt;
== Trace a tool’s highlight setting ==&lt;br /&gt;
# Find &amp;lt;code&amp;gt;HighlightActive&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;editor/userclasses/EntityClasses.def&amp;lt;/code&amp;gt;. The tool instance variable is a Boolean with a declared default of true; its description says it controls the highlight effect when the tool is looked at.&lt;br /&gt;
# Open &amp;lt;code&amp;gt;script/props/Prop_Tool.hps&amp;lt;/code&amp;gt;. The tool reads that instance variable into &amp;lt;code&amp;gt;mbHighlightActive&amp;lt;/code&amp;gt; and returns it through the callback below.&lt;br /&gt;
# Follow &amp;lt;code&amp;gt;UpdateAddObjects&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;script/modules/HighlightEffectHandler.hps&amp;lt;/code&amp;gt;. It filters for selected stock script classes, requires a mesh and an on-screen entity, and skips entities whose measured light level is below &amp;lt;code&amp;gt;0.1&amp;lt;/code&amp;gt;. A true tool flag therefore supplies eligibility; the handler still applies those additional checks.&lt;br /&gt;
&lt;br /&gt;
== Stock tool eligibility callback ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void _Global_CanBeHighlighted()&lt;br /&gt;
{&lt;br /&gt;
    cScript_SetGlobalReturnBool(mbHighlightActive);&lt;br /&gt;
    cScript_SetGlobalArgID(0,mBaseObj.GetID());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[HPL3/Scripting/User Modules Overview|User modules]]&lt;br /&gt;
* [[HPL3/SOMA/Scripting/Modules Helper|SOMA module helpers]]&lt;br /&gt;
&lt;br /&gt;
[[Category:English]]&lt;/div&gt;</summary>
		<author><name>TiMan</name></author>
		
	</entry>
</feed>