Skip to content

Features and Configuration

szapp edited this page Dec 6, 2017 · 29 revisions

Gothic Free Aim is highly configurable. This wiki page gives an outline of all configurable sub-features.

These sub-features can be individually enabled or disabled by selective initialization or extensively configured. At the bottom of this page, there is a list of configuration examples to give you some ideas of what is possible.

Required LeGo Packages

Gothic Free Aim will initialize Ikarus and LeGo with the required packages automatically, if they are not already initialized.
Alternatively, if you initialize LeGo beforehand, append the initialization with GFA_LEGO_FLAGS, like so:

LeGo_Init(/* your desired packages */ | GFA_LEGO_FLAGS);

Initialization by Features

Gothic Free Aim comes with various features (besides free aiming itself). These features can be used completely independently, even without using free aiming itself. To use GFA with a selected set of features only, GFA can be initialized with different flags.

Flag Feature
GFA_RANGED Free aiming for ranged combat
GFA_SPELLS Free aiming for spells
GFA_REUSE_PROJECTILES Shot projectiles are collectable
GFA_CUSTOM_COLLISIONS Manipulate collision behaviors
GFA_CRITICALHITS Critical hits for ranged combat
GFA_ALL Use all features

These flags can be combined to initialize GFA selectively:

GFA_Init(GFA_ALL);                                        // Initialize all features
GFA_Init(GFA_ALL & ~GFA_REUSE_PROJECTILES & ~GFA_SPELLS); // Initialize all but re-using of projectiles and free aiming for spells
GFA_Init(GFA_RANGED | GFA_CRITICALHITS);                  // Initialize free aiming for ranged combat and critical hits only

If you have features in your mod that require GFA to be properly initialized, you can check if GFA_Init was successful with GFA_INITIALIZED (true/false).

Recommended Initialization

If you want to implement GFA into your modification without any additional work, it is recommended to initialize it without re-usable projectiles. This feature would require additional tweaking, because you would need to reduce the numbers of arrows and bolts in the world. Otherwise there would be too many (since the player can pick them up again). For more information about the problem and tips and tricks on how to easily re-balance your mod-project including a provided script to use, read on here.

GFA_Init(GFA_ALL & ~GFA_REUSE_PROJECTILES);

Aside from that feature, GFA is well-balanced and does not require any changes on the rest of your mod-project.

If you are only interested in free aiming and want no extra features, the recommended initialization is

GFA_Init(GFA_ALL & ~GFA_REUSE_PROJECTILES);

Configuration

GFA is compartmentalized into internal mechanics and configuration. These are cleanly separated into two directories (GFA/_intern/ and GFA/config/). This was done to allow high customizability for mod-teams, while at the same time ensuring stability of the core mechanics.

The way the configuration is incorporated is by designing it as "config functions". These config functions are called from the internal mechanics to apply the configuration. The content of these config functions and what they return to the internal mechanics can be freely adjusted. The only restrictions are the function signature and the type of return value. What happens inside the functions is fully up to you and makes up the "configuration".
Other settings are offered as constants that can simply be changed.

To understand more about the internal mechanics of GFA, all functions and their relation to each other have been visualized in a project architecture diagram.

The configuration is grouped by features.

Configuration Ideas

Here are a few examples/ideas of what is possible with the configuration.

  • Implementing ranged weapons that do one-shot kills or one-shot knockouts
  • Changing the trajectory of projectiles based on weapon stats, skill level, ...
  • Implementing a learn-able "quick-draw" talent
  • Changing the accuracy based on weapon stats, skill level, draw force, ...
  • Changing the base damage based on accuracy, draw force, skill level, ...
  • Changing the reticle based on draw force, accuracy, aiming distance, opponent, ...
  • Defining individual critical hit zones (body parts) based on opponent
  • Changing the damage multiplicator for critical hits based on opponent, weapon, ...
  • Defining events for critical hits, like sound jingles, screen print, hit marker, ...
  • Implementing a head shot counter that gives XP after a certain number of hits
  • Manipulation of friendly-fire for quest party members
  • Defining rules to render certain ranged weapons ineffective for some opponents
  • Defining rules of collision behavior with surface materials
  • Removing or replacing of shot projectiles (to pick up used/broken projectiles)
  • Implementing the need to learn how to regain projectiles from shot NPCs
  • And much more...

Furthermore, GFA can also be used as basis for new features. An example is the spell blink that demonstrates that quite nicely.