-
-
Notifications
You must be signed in to change notification settings - Fork 4
Custom Collisions
The feature Custom Collisions (GFA_CUSTOM_COLLISIONS
) allows to manipulate the collision behavior of projectiles (arrows and bolts) in ranged combat. It can be customized under what circumstances a projectiles bounces off of a surface, gets stuck in it or breaks on impact. Likewise the hit registration on NPCs can be customized to have projectile vanish or bounce off of an NPC armor instead of causing damage and eliciting an AI reaction.
Furthermore the damage behavior of projectiles can be altered. For example, projectiles can be set to never kill, but always only knockout a certain enemy.
List config functions GFA_GetCollisionWithNpc |
This function is called every time an NPC is hit (positive hit!) by a projectile (arrows and bolts). It can be used to define the collision behavior (or disabling hit registration and damage) on NPCs based on different criteria.
Note: Unlike most other config functions, this function is also called for NPC shooters!
Note: If GFA_TRUE_HITCHANCE == true
, this function is called for ALL hits (all hits are positive hits).
If GFA_TRUE_HITCHANCE == false
, this function is called for POSITIVE hits only.
Ideas: 'ineffective' ranged weapons, armor materials immune to arrows, disable friendly-fire, maximum range, ...
Examples are given inside the function, but commented out to serve as inspiration of what is possible.
func int GFA_GetCollisionWithNpc(C_Npc shooter, C_Npc target, C_Item weapon, int material)
shooter |
The NPC that shot the projectile. |
target |
The NPC that was hit with the projectile. |
weapon |
The ranged weapon that the shooter used (might be empty if unequipped immediately!). |
material |
Material of the armor of the target as defined as in Constants.d (MAT_METAL , MAT_WOOD , ...). -1 for no armor equipped. |
returns | The collision response, see below. |
-
DAMAGE
: Positive hit registration (projectile is put into inventory ifGFA_REUSE_PROJECTILES
is used). -
DEFLECT
: No hit registration (no damage), projectile bounces off. -
DESTROY
: No hit registration (no damage), projectile vanishes.
This function is called every time the world (static or vobs) is hit by a projectile (arrows and bolts). It can be used to define the collision behavior for different materials or surface textures.
Note: Unlike most other config functions, this function is also called for NPC shooters!
CAUTION: Unfortunately, all vobs in Gothic 1 belong to the UNDEF
material group. With descriptive texture names, however, the material can be retrieved, e.g. (STR_IndexOf(textures, "WOOD") != 1)
. At the end of this function, there is an elaborate check for all wooden textures in Gothic 1 to compensate for the lack of material groups.
Ideas: projectiles get stuck in wood, always bounce off of metal, sometimes break when hitting stone, ...
Examples are given inside the function, but commented out to serve as inspiration of what is possible.
func int GFA_GetCollisionWithWorld(C_Npc shooter, C_Item weapon, int materials, string textures)
shooter |
The NPC that shot the projectile. |
weapon |
The ranged weapon that the shooter used (might be empty if unequipped immediately!). |
materials |
Bit field for all materials attached to the surface. |
textures |
String containing all texture names of the surface, delimiter: "|". |
returns | The collision response, see below. |
-
DESTROY
: Projectile is destroyed on impact. -
STUCK
: Projectile gets stuck in the surface. -
DEFLECT
: Projectile is repelled.
This function is called every time an NPC is hit by a projectile (arrows and bolts). It can be used to define the damage behavior on NPCs based on different criteria. Damage behavior defines how much damage is eventually applied to the victim. This allows, e.g. to prevent a victim from dying, and instead knock it out with one shot (see examples inside the function).
Note: This function is only called if the player is the shooter.
Ideas: special knockout munition, NPCs that cannot be killed by ranged weapons, instant kill on critical hit, ...
Examples are given inside the function, but commented out to serve as inspiration of what is possible.
func int GFA_GetDamageBehavior(C_Npc target, C_Item weapon, int talent, int isCritialHit)
target |
The NPC that is hit by the projectile |
weapon |
The ranged weapon that the shooter used (might be empty if unequipped immediately!). |
talent |
The talent value of the shooter depending on the ranged weapon. |
isCriticalHit |
States whether the active shit is a critical hit (true/false). |
returns | The damage behavior, see below. |
-
DO_NOT_KNOCKOUT
: Gothic default: Normal damage, projectiles kill and never knockout (HP != 1). -
DO_NOT_KILL
: Normal damage, projectiles knockout and never kill (HP > 0). -
INSTANT_KNOCKOUT
: One shot knockout (1 HP). -
INSTANT_KILL
: One shot kill (0 HP).
Table of Contents
Features
Youtube Trailer
Demo Modifications
Installation & Requirements
Gothic 1
Gothic 2
Features & Configuration
Free Aiming
Ranged Combat
Spells
Re-usable Projectiles
Custom Collisions
Critical Hits
Hit Probability NEW
Creating a Mod File
Project Architecture
Debugging & Console Commands
Download
Free Aiming Patch
Settings for Players
Changelog
FAQ
Support this project
Acknowledgements
Contact & Discussion