NoMansSky:Reference Guides/HazardTable

From Step Mods | Change The Game
Nomanssky flare.png

Hazard Table

HAZARDTABLE
File Suffix: MBIN
Template Name: GcPlayerHazardData
Directory: METADATA/SIMULATION/ENVIRONMENT/
Knowledge State: Partially Understood
Summary: Handles the environmental hazards.

Hazard Table[edit | edit source]

Handles the environmental hazards that affect the player/suit. This currently includes: No hazards, no oxygen, extreme cold and heat, radiation, and toxic gas.

Data Structure[edit | edit source]

The following is the completed structure of a single entry in the HazardTable.

   <Property name="NoOxygen" value="GcPlayerHazardData.xml">
     <Property name="ProtectionInitialTime" value="10" />   Time in seconds before starting depleting protection charge
     <Property name="ProtectionTime" value="Vector2f.xml">
       <Property name="x" value="90" />   Time in seconds to deplete an amount of 100 protection charges below TriggerValue
       <Property name="y" value="90" />   Time in seconds to deplete an amount of 100 protection charges over CapValue
     </Property>
     <Property name="DamageRate" value="Vector2f.xml">
       <Property name="x" value="10" />
       <Property name="y" value="10" />
     </Property>
     <Property name="WoundRate" value="Vector2f.xml">
       <Property name="x" value="10" />
       <Property name="y" value="10" />
     </Property>
     <Property name="RechargeInitialTime" value="1" />   Time in seconds before starting replenishing protection charge
     <Property name="RechargeTime" value="10" />   Time in seconds to replenish 100 protection charges
     <Property name="Damage" value="NOOXYDAMAGE" />   Type of damages if protection falls to 0
     <Property name="Increases" value="False" />   Unknown but could increase damages if exposition is over CapValue
     <Property name="Curve" value="TkCurveType.xml">
       <Property name="Curve" value="Linear" />   Interpolation formula to compute depletion rate if exposition is between TriggerValue and CapValue
     </Property>
     <Property name="TriggerValue" value="0.5" />  Under this value, depletion rate is described by ProtectionTime.x
     <Property name="CapValue" value="1" />   Over this value, depletion rate is described by ProtectionTime.y
     <Property name="CriticalValue" value="1" />   Notification trigger
     <Property name="OutputMultiplier" value="1" />  Could be a visual effect on the UI hazard gauge
     <Property name="OutputMinAddition" value="0" />
     <Property name="OutputMaxAddition" value="0" />
   </Property>

Structure Details[edit | edit source]

Entry Start[edit | edit source]

<Property name="NoOxygen" value="GcPlayerHazardData.xml">

Name
The name of the hazard. In this case, NoOxygen, refers to running out of air.
Value
This is the template that holds the variables used within each segment.

ProtectionInitialTime[edit | edit source]

Variable: float
Description: Time in seconds before hazards begin to deplete protection.
Defined: <Property name="ProtectionInitialTime" value="10" />

ProtectionTime[edit | edit source]

Variable: Defined as Vector2f in the GcPlayerHazardData.xml template. Vector2f carries two float variables as such: vector2f(x,y).
Description: Controls the amount of protection the player has (in seconds). These reflect to the shield and life support UI gauges.
  • x = duration it takes to use 100 charge of protection starting at TriggerValue (x * 0.8)
  • y = duration it takes to use 100 charge of protection starting at CapValue (y * 0.8)
    • Default max charge is 80 (defined in the GCTECHNOLOGYTABLE), therefore, 0.8 is the default max that can be used in the equations.
  • Example: 90 * 0.8 = 72 seconds
Defined:
      <Property name="ProtectionTime" value="Vector2f.xml">
        <Property name="x" value="90" />
        <Property name="y" value="90" />
      </Property>

DamageRate[edit | edit source]

Variable: Defined as Vector2f in the GcPlayerHazardData.xml template. Vector2f carries two float variables as such: vector2f(x,y).
Description: Controls the rate of damage done by the hazard to shields.
Defined:
      <Property name="DamageRate" value="Vector2f.xml">
        <Property name="x" value="10" />
        <Property name="y" value="10" />
      </Property>

WoundRate[edit | edit source]

Variable: Defined as Vector2f in the GcPlayerHazardData.xml template. Vector2f carries two float variables as such: vector2f(x,y).
Description: Controls the rate of damage done by the hazard to life support. Needs to be confirmed
Defined:
      <Property name="WoundRate" value="Vector2f.xml">
        <Property name="x" value="10" />
        <Property name="y" value="10" />
      </Property>

RechargeInitialTime[edit | edit source]

Variable: float
Description: Once hazards are cleared, time in seconds before recharge begins.
Defined: <Property name="RechargeInitialTime" value="1" />

RechargeTime[edit | edit source]

Variable: float
Description: Time in seconds it takes to recharge protection once hazard is cleared and RechargeInitialTime has passed.
Defined: <Property name="RechargeTime" value="10" />

Damage[edit | edit source]

Variable: string
Description: Defines the type of damage taken. Types of damages are in turn determined by the GcPlayerHazardType template.
Defined: <Property name="Damage" value="NOOXYDAMAGE" />

Increases[edit | edit source]

Variable: bool
Description: Unknown, but could increase damages if exposition is over CapValue. Note this is set to "False" in all entries besides the "no hazard" entry, where it's set to "True".
Defined: <Property name="Increases" value="False" />

Curve[edit | edit source]

Variable: Defined as TkCurveType in the GcPlayerHazardData.xml template. Uses the Linear curve.
Description: Interpolation formula to compute depletion rate if exposition is between TriggerValue and CapValue.
Defined:
      <Property name="Curve" value="TkCurveType.xml">
        <Property name="Curve" value="Linear" />
      </Property>

TriggerValue[edit | edit source]

Variable: float
Description: Determines when the low-end when hazards will be triggered; triggering when under this value and using ProtectionTime.x
Defined: <Property name="TriggerValue" value="0.5" />

CapValue[edit | edit source]

Variable: float
Description: Determines the upper end when the hazard will be triggered; triggering when over this value and using ProtectionTime.y
Defined: <Property name="CapValue" value="1" />

CriticalValue[edit | edit source]

Variable: float
Description: Value at which a notification is given to the player (usually a voice warning)
Defined: <Property name="CriticalValue" value="1" />

OutputMultiplier[edit | edit source]

Variable: float
Description: Uncertain, but is believed to be the visual noise displayed on the UI hazard meter. Has no impact on how fast the meter drains.
Defined: <Property name="OutputMultiplier" value="1" />

OutputMinAddition[edit | edit source]

Variable: float
Description: Unknown
Defined: <Property name="OutputMinAddition" value="0" />

OutputMaxAddition[edit | edit source]

Variable: float
Description: Unknown
Defined: <Property name="OutputMaxAddition" value="0" />

Computing times[edit | edit source]

Thanks to Ket who worked a lot on hazards, we better know how depletion speed is computed.
Depletion speed is based on the current planet exposition value, either temperature, radioactivity or toxicity value (ie, 70°C, -60°C, 80 rad, 90 tox).
We can note 3 cases :

  1. If Exposition is below or equal the TriggerValue. Here ProtectionTime.x applies.
  2. If exposition value is over CapValue, here ProtectionTime.y applies
  3. If exposition value is between TriggerValue and CapValue, a linear interpolation (as defined by the Curve type) is applied to get the current depletion speed.

What's important to note is that original protection suit holds 80 protection charge, as defined in the GCTECHNOLOGYTABLE.
As all times are based on 100 charges, we need to make some little maths to get real depletion times:
In the example above, we can compute it as a 90 seconds for 100 charges so 90/100 = 0.9 seconds per charge. Mulitplied per our 80 charges default suit = 72 seconds.
And if we just entered water, we have to take in account the ProtectioninitialTime of 10 seconds, so all in all, we can stay 82 seconds under water without oxygen.