<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://developer.quantumleapstudios.org/index.php?action=history&amp;feed=atom&amp;title=GNPC</id>
	<title>GNPC - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://developer.quantumleapstudios.org/index.php?action=history&amp;feed=atom&amp;title=GNPC"/>
	<link rel="alternate" type="text/html" href="http://developer.quantumleapstudios.org/index.php?title=GNPC&amp;action=history"/>
	<updated>2026-06-28T08:28:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.0</generator>
	<entry>
		<id>http://developer.quantumleapstudios.org/index.php?title=GNPC&amp;diff=5&amp;oldid=prev</id>
		<title>Rhosyn Celyn at 01:34, 29 April 2026</title>
		<link rel="alternate" type="text/html" href="http://developer.quantumleapstudios.org/index.php?title=GNPC&amp;diff=5&amp;oldid=prev"/>
		<updated>2026-04-29T01:34:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:34, 29 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;GPhys.Abstracts.GNPC&amp;#039;&amp;#039;&amp;#039; is an abstract base class for generic NPCs in GPhys, providing health, ground checking, thinking logic, and coroutine management. It is designed to be inherited by specific NPC types and supports features like mind control, ragdoll creation, and skin management.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;GPhys.Abstracts.GNPC&amp;#039;&amp;#039;&amp;#039; is an abstract base class for generic NPCs in GPhys, providing health, ground checking, thinking logic, and coroutine management. It is designed to be inherited by specific NPC types and supports features like mind control, ragdoll creation, and skin management.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Class Hierarchy ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[UnityEngine.MonoBehaviour]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;** &#039;&#039;&#039;GPhys.Abstracts.GNPC&#039;&#039;&#039; (abstract)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*** (Inherit from this class to create custom NPCs)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Accessible Variables ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Accessible Variables ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki-wikiuser:diff:1.41:old-4:rev-5:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Rhosyn Celyn</name></author>
	</entry>
	<entry>
		<id>http://developer.quantumleapstudios.org/index.php?title=GNPC&amp;diff=4&amp;oldid=prev</id>
		<title>Rhosyn Celyn: Created page with &quot;= GPhys.Abstracts.GNPC =  &#039;&#039;&#039;GPhys.Abstracts.GNPC&#039;&#039;&#039; is an abstract base class for generic NPCs in GPhys, providing health, ground checking, thinking logic, and coroutine management. It is designed to be inherited by specific NPC types and supports features like mind control, ragdoll creation, and skin management.  == Accessible Variables ==  ; maxHealth : Maximum health value for the NPC (float). ; groundLayer : Layer mask used for ground detection (LayerMask). ; ground...&quot;</title>
		<link rel="alternate" type="text/html" href="http://developer.quantumleapstudios.org/index.php?title=GNPC&amp;diff=4&amp;oldid=prev"/>
		<updated>2026-04-29T01:32:15Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= GPhys.Abstracts.GNPC =  &amp;#039;&amp;#039;&amp;#039;GPhys.Abstracts.GNPC&amp;#039;&amp;#039;&amp;#039; is an abstract base class for generic NPCs in GPhys, providing health, ground checking, thinking logic, and coroutine management. It is designed to be inherited by specific NPC types and supports features like mind control, ragdoll creation, and skin management.  == Accessible Variables ==  ; maxHealth : Maximum health value for the NPC (float). ; groundLayer : Layer mask used for ground detection (LayerMask). ; ground...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= GPhys.Abstracts.GNPC =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GPhys.Abstracts.GNPC&amp;#039;&amp;#039;&amp;#039; is an abstract base class for generic NPCs in GPhys, providing health, ground checking, thinking logic, and coroutine management. It is designed to be inherited by specific NPC types and supports features like mind control, ragdoll creation, and skin management.&lt;br /&gt;
&lt;br /&gt;
== Accessible Variables ==&lt;br /&gt;
&lt;br /&gt;
; maxHealth : Maximum health value for the NPC (float).&lt;br /&gt;
; groundLayer : Layer mask used for ground detection (LayerMask).&lt;br /&gt;
; groundCheckDistance : Distance to check for ground beneath the NPC (float).&lt;br /&gt;
; groundCheckPoint : Transform used as the origin for ground checking (Transform).&lt;br /&gt;
; OnDeath : Event invoked when the NPC dies (System.Action&amp;amp;lt;GNPC&amp;amp;gt;).&lt;br /&gt;
; mindControl : Enables or disables mind control for the NPC (bool).&lt;br /&gt;
; NpcClass : Abstract string property representing the NPC&amp;#039;s class/type.&lt;br /&gt;
; CustomRagdollManag : Action invoked for custom ragdoll management (System.Action&amp;amp;lt;GameObject&amp;amp;gt;).&lt;br /&gt;
; isMachineryOrPowerful : Indicates if the NPC is machinery or powerful (bool).&lt;br /&gt;
; RagdollCounterpart : Prefab for the NPC&amp;#039;s ragdoll (GameObject).&lt;br /&gt;
; BakedMeshCache : Array of cached meshes for the NPC (Mesh[]).&lt;br /&gt;
; globalDisableThinking : Disables thinking for all NPCs globally (static bool).&lt;br /&gt;
; disableThinking : Disables thinking for this NPC (bool).&lt;br /&gt;
; gnpcNpcClass : Dictionary mapping types to NPC class names (Dictionary&amp;amp;lt;Type, string&amp;amp;gt;).&lt;br /&gt;
; skinnedMeshRenderers : Array of skinned mesh renderers for the NPC (SkinnedMeshRenderer[]).&lt;br /&gt;
; canThink : Returns true if the NPC is allowed to think (bool, getter).&lt;br /&gt;
; destroyRagdoll : If true, destroys the NPC&amp;#039;s colliders when ragdolling (bool).&lt;br /&gt;
; isBeingMindControlled : Returns true if the NPC is being mind controlled (bool, getter).&lt;br /&gt;
; CurrentHealth : Current health value (float, getter).&lt;br /&gt;
; IsDead : Returns true if the NPC is dead (bool, getter).&lt;br /&gt;
; IsGrounded : Returns true if the NPC is on the ground (bool, getter).&lt;br /&gt;
; IsDangerous : Returns true if the NPC is dangerous (bool, getter).&lt;br /&gt;
; IsCombine : Returns true if the NPC is a Combine type (bool, getter).&lt;br /&gt;
; Ragdoll : Returns the ragdoll counterpart GameObject (GameObject, getter).&lt;br /&gt;
; GlobalGorillaTransform : Static transform reference (static Transform).&lt;br /&gt;
&lt;br /&gt;
== Accessible Functions ==&lt;br /&gt;
&lt;br /&gt;
; ScheduleTaskPublic(System.Action task) : Schedules a task to be executed on the next think.&lt;br /&gt;
; ScheduleTaskPublic(System.Action task, float delay) : Schedules a task to be executed after a delay.&lt;br /&gt;
; TakeDamage(float damage) : Applies damage to the NPC.&lt;br /&gt;
; TakeDamage(float damage, GTHealth.DamageType type) : Applies typed damage to the NPC.&lt;br /&gt;
; TakeDamage(float damage, GTHealth.DamageType type, Vector3 hitPoint, Vector3 normalHit) : Applies typed damage at a specific point.&lt;br /&gt;
; SetHealth(float health) : Sets the NPC&amp;#039;s health to a specific value.&lt;br /&gt;
; Heal(float amount) : Heals the NPC by a specified amount.&lt;br /&gt;
; GetHealthPercentage() : Returns the current health as a percentage of maxHealth.&lt;br /&gt;
; CanTakeDamageOfType(GTHealth.DamageType type) : Returns true if the NPC can take the specified damage type.&lt;br /&gt;
; ForceKill() : Instantly kills the NPC.&lt;br /&gt;
; MakeNotKillable() : Makes the NPC invulnerable.&lt;br /&gt;
; isNPCTypeThis(string npcType) : Checks if the NPC matches a given type.&lt;br /&gt;
; Gib() : Destroys the NPC with a blood/gib effect.&lt;br /&gt;
; CreateMindControlCamera() : Creates a camera for mind control.&lt;br /&gt;
; DestroyMindControlCamera() : Destroys the mind control camera.&lt;br /&gt;
; GetTargetScore(Collider target) : Returns a score for a potential target.&lt;br /&gt;
; CalculateTargetCameraPosition() : Calculates the mind control camera&amp;#039;s position.&lt;br /&gt;
; UpdateMindControlCameraPosition() : Updates the mind control camera&amp;#039;s position.&lt;br /&gt;
; WorldSpaceCenter() : Returns the NPC&amp;#039;s center in world space.&lt;br /&gt;
; EyePosition() : Returns the NPC&amp;#039;s eye position.&lt;br /&gt;
; HandleMindControlCameraInput() : Handles input for mind control camera.&lt;br /&gt;
; FixedUpdate() : Unity physics update method.&lt;br /&gt;
; ForceChangeState(string newState) : Forces the NPC to change state.&lt;br /&gt;
; AddSkin(INPCSkin skin) : Adds a skin to the NPC.&lt;br /&gt;
; ApplySkin(INPCSkin skin) : Applies a skin to the NPC.&lt;br /&gt;
; GetCurrentSkin() : Returns the currently applied skin.&lt;br /&gt;
; GetAvailableSkins() : Returns all available skins.&lt;br /&gt;
; CreateRagdoll(Vector3 velocity, Transform parent = null) : Creates a ragdoll for the NPC.&lt;br /&gt;
; TryFindTorsoOrPelvisFromRagdoll(Transform root) : Finds the torso or pelvis transform in a ragdoll.&lt;br /&gt;
; TryFindTorsoOrPelvisFromRagdoll_RB(Transform root) : Finds the torso or pelvis rigidbody in a ragdoll.&lt;br /&gt;
; SkewerNPC(Transform skewerFoot) : Skewers the NPC and creates a ragdoll.&lt;br /&gt;
; ReleaseSkewer(Vector3 velocity) : Releases the NPC from a skewer with velocity.&lt;br /&gt;
&lt;br /&gt;
== Abstract Methods (must be implemented by derived classes) ==&lt;br /&gt;
&lt;br /&gt;
; Think() : Called periodically by the thinking system.&lt;br /&gt;
; OnDie() : Called when the NPC dies.&lt;br /&gt;
; HandleStateChange() : Handles state changes for the NPC.&lt;br /&gt;
; GetCurrentState() : Returns the current state as a string.&lt;br /&gt;
; HandleForceChangeState(string newState) : Handles forced state changes.&lt;br /&gt;
&lt;br /&gt;
== Nested Types ==&lt;br /&gt;
&lt;br /&gt;
; NPCTypeSafety : Enum for NPC safety type (Friendly, Hostile, Neutral).&lt;br /&gt;
; INPCSkin : Interface for NPC skins (Name, ApplyTo, RemoveFrom).&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;This page documents the core features and API of the GNPC base class in GPhys.&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Rhosyn Celyn</name></author>
	</entry>
</feed>