Skip to content

Terminology

This page contains definitions for various terms commonly used throughout the docs.

Internal

Refers to classes, methods or other resources that are only intended to be used directly by Epip itself, and not any mods that have it as a dependency.

Also see visiblity.

Visibility

Refers to visibility of class methods and fields in the OOP sense.

In Epip, fields prefixed with _ (single underscore) are considered "private" and meant only for internal use within the class, while fields prefixed with __ (two underscores) are considered "protected" and meant only for use within the class hierarchy. In both cases, these fields are not part of the public API and are not meant to be used within your own mod, and are subject to change without notice.

Lua does not have an explicit concept of visibility for table fields. Though it is possible to create "private" fields via upvaluing, this is avoided in Epip due to readability issues as well as the fact that private visibility is arguably a bad practice in modding - it actively prevents other modders from patching parts of your mod to achieve compatibility / interoperability. For the same reason, local functions and variables are avoided, and only used for niche cases.

As such, visibility in Epip is merely a suggestion. It is possible to use/override invisible fields as a last measure if you truly deem it necessary, however it's a better idea to first contact the Epip team to see if the public API can be adjusted to your needs, as that could lead to cleaner solutions that would better satisfy current and future developers.

Invisible Fields

Refers to usage of private, protected or package fields in a context where they trigger the invisible diagnostic.

Namespacing

As is the case for modding the base game, numerous resources in Epip use string identifiers which in turn can lead to collisions. Namespacing refers to prefixing such identifiers to avoid accidentally overwriting resources from other Epip mods.

The Library and Feature classes contain wrapper methods for certain core libraries to automatically prefix identifiers used.

Most methods in Epip do not throw nor warn when you attempt to register some resource under an ID already in use - this is by design so as to allow easy overriding.

Core Library

Refers to global library tables, such as Item, Character, Settings, or other tables that inherit from the Library class in namespaces such as Client (ex. Client.Tooltip).

Feature

Refers to either an end-user feature of the mod, or the Feature class and system.