Penumbra.Api API methods pertaining to collection management. A list of the GUIDs of all currently installed collections together with their display names, excluding the empty collection. Returns all collections for which either the name is equal to the given identifier up to case, the identifier is parsable to a GUID and the GUID corresponds to an existing collection, or the identifier is at least 8 characters long and the GUID as a hex-string starts with the identifier. A dictionary of affected items in via GUID and known objects or null. The GUID and name of the collection assigned to the given , the empty GUID for the empty collection, or null if nothing is assigned. Return whether the object at produces a valid identifier, if the identifier has a collection assigned, and the collection that affects the object. Set a collection by GUID for a specific type. The collection type to set. The GUID of the collection to set it to, null to remove the association if allowed. Allow only setting existing types or also creating an unset type. Allow deleting existing collections if is empty. InvalidArgument if type is invalid, NothingChanged if the new collection is the same as the old,
AssignmentDeletionDisallowed if is null and is false, and the assignment exists,
or if Default, Current or Interface would be deleted.
CollectionMissing if the new collection can not be found,
AssignmentCreationDisallowed if is false and the assignment does not exist,
or Success, as well as the GUID of the previous collection (empty if no assignment existed).
Set a collection by GUID for a specific game object. The index of the desired game object in the object table. The GUID of the collection to set it to, null to remove the association if allowed. Allow only setting existing individuals or also creating a new individual assignment. Allow deleting existing individual assignments if is null. InvalidIdentifier if does not produce an existing game object or the object is not identifiable, NothingChanged if the new collection is the same as the old,
AssignmentDeletionDisallowed if is null and is false, and the assignment exists,
CollectionMissing if the new collection can not be found,
AssignmentCreationDisallowed if is false and the assignment does not exist,
or Success, as well as the name of the previous collection (empty if no assignment existed).
API methods pertaining to the editing of mods or game files. Convert the given texture file into a different type or format and potentially add mip maps. The path to the input file, which may be of .dds, .tex or .png format. The desired output path. Can be the same as input. The file type and format to convert the data to. Whether to add mip maps or not. Ignored for .png. A task for when the conversion is finished or has failed. Convert the given RGBA32 texture data into a different type or format and potentially add mip maps. The input byte data for a picture given in RGBA32 format. The width of the input picture. The height is computed from the size of and this. The desired output path. Can be the same as input. The file type and format to convert the data to. Whether to add mip maps or not. Ignored for .png. A task for when the conversion is finished or has failed. API methods pertaining to the currently tracked game state. The game object associated with the given draw object and the GUID and name of the collection associated with this game object. Obtain the parent game object index for an unnamed cutscene actor by its index. The parent game object index. Set the cutscene parent of in Penumbras internal state to a new value. The index of the cutscene actor to be changed. The new index of the cutscene actors parent or -1 for no parent. Success when the new parent could be set, or InvalidArgument if either index is out of its respective range. Checks that the new parent exists as a game object if the value is not -1 before assigning. If it does not, InvalidArgument is given, too. Please only use this for good reason and if you know what you are doing, probably only for actor copies you actually create yourself. Triggered when a character base is created and a corresponding gameObject could be found, before the Draw Object is actually created, so customize and equipdata can be manipulated beforehand. Triggered after a character base was created if a corresponding gameObject could be found, so you can apply flag changes after finishing. Triggered whenever a resource is redirected by Penumbra for a specific, identified game object. Does not trigger if the resource is not requested for a known game object. The entire API. Base interface for the API that is always available, regardless of version. The API version is staggered in two parts. The major/Breaking version only increments if there are changes breaking backwards compatibility. The minor/Feature version increments any time there is something added and resets when Breaking is incremented. Whether the API is still usable. API methods pertaining to current metadata manipulations. A base64 encoded, zipped json-string with a prepended version-byte of the current manipulations in the collection currently associated with the player. A base64 encoded, zipped json-string with a prepended version-byte of the current manipulations in the given collection applying to the given game object or the default collection if it does not exist. API methods pertaining to management of mods. A list of all installed mods. The first string is their directory name, the second string is their mod name. Try to unpack and install a valid mod file (.pmp, .ttmp, .ttmp2) as if installed manually. The file that should be unpacked. Success, MissingFile. Success does not indicate successful installing, just successful queueing for install. Try to reload an existing mod given by its name or . Reload is the same as if triggered by button press and might delete the mod if it is not valid anymore. ModMissing if the mod can not be found or Success Try to add a new mod inside the mod root directory. Note that success does only imply a successful call, not a successful mod load. The name (not full name) of the mod directory. FileMissing if does not exist, InvalidArgument if the path leads outside the root directory, Success otherwise. Try to delete a mod given by its name or . Note that success does only imply a successful call, not successful deletion. NothingDone if the mod can not be found, Success otherwise. Triggers whenever a mod is deleted. The base directory name of the deleted mod. Triggers whenever a mod is deleted. The base directory name of the new mod. Triggers whenever a mods base name is changed from inside Penumbra. The previous base directory name of the mod and the new base directory name of the mod. Get the internal full filesystem path including search order for the specified mod given by its name or . On Success, the full path, a bool indicating whether the entire path is default (true) or manually set (false), and a bool indicating whether the sort order name ignoring the folder path is default (true) or manually set (false). Otherwise, returns ModMissing if the mod can not be found. Set the internal search order and filesystem path of the specified mod given by its name or to the . InvalidArgument if is empty, ModMissing if the mod can not be found, PathRenameFailed if could not be set or Success. Get the overall changed items of a single mod given by its name or , regardless of settings. A possibly empty dictionary of affected items and known objects or null. API methods pertaining to the management of mod settings. Obtain the potential settings of a mod given by its name or . A dictionary of group names to lists of option names and the group type. Null if the mod could not be found. Obtain the enabled state, the priority, the settings of a mod given by its name or in the specified collection. Specify the collection. Specify the mod via its directory name. Specify the mod via its (non-unique) display name. Whether the settings need to be from the given collection or can be inherited from any other by it. (True: given collection only) Whether the settings need to be actual settings or can be temporary. The key for the settings lock. If is false, settings with a key greater than 0 that is different from this will be ignored. ModMissing, CollectionMissing or Success. On Success, a tuple of Enabled State, Priority, a dictionary of option group names and lists of enabled option names and a bool whether the settings are inherited (true) or not. Obtain the enabled state, the priority, the settings of all mods in the specified collection. Specify the collection. Whether the settings need to be from the given collection or can be inherited from any other by it. (True: given collection only) Whether the settings need to be actual settings or can be temporary. The key for the settings lock. If is false, settings with a key greater than 0 that is different from this will be ignored. CollectionMissing or Success, on Success, a dictionary of mod directory names to a tuple of (Enabled, Priority, Settings, Inherited, Temporary). Mods that have no settings at all are left out. Try to set the inheritance state of a mod in a collection. ModMissing, CollectionMissing, InvalidArgument (GUID is nil), NothingChanged or Success. Try to set the enabled state of a mod in a collection. ModMissing, CollectionMissing, InvalidArgument (GUID is nil), NothingChanged or Success. Try to set the priority of a mod in a collection. ModMissing, CollectionMissing, InvalidArgument (GUID is nil), NothingChanged or Success. Try to set a specific option group of a mod in the given collection to a specific value. Removes inheritance. Single Selection groups should provide a single option, Multi Selection can provide multiple. If any setting can not be found, it will not change anything. ModMissing, CollectionMissing, OptionGroupMissing, SettingMissing, InvalidArgument (GUID is nil), NothingChanged or Success. This event gets fired when any setting in any collection changes. Copy all current settings for a mod to another mod. Specify the collection to work in, leave null to do it in all collections. Specify the mod to take the settings from via its directory name. Specify the mod to put the settings on via its directory name. If the mod does not exist, it will be added as unused settings. CollectionMissing if collectionName is not empty but does not exist or Success. If the target mod exists, the settings will be fixed before being applied. If the source mod does not exist, it will use unused settings if available and remove existing settings otherwise. API methods pertaining to Penumbras own state. The full path of the current penumbra root directory. The entire current penumbra configuration as a json encoded string. Fired whenever a mod directory change is finished. The full path of the mod directory and whether Penumbra treats it as valid. True if Penumbra is enabled, false otherwise. Fired whenever the enabled state of Penumbra changes. True if the new state is enabled, false if the new state is disabled API methods pertaining to the redrawing of actors. Queue redrawing of the actor with the given object , if it exists, with the given RedrawType . Queue redrawing of all currently available actors with the given RedrawType . Triggered whenever a game object is redrawn via Penumbra. / API methods pertaining to the resolving of paths. Resolve a given via Penumbra using the Base collection. The resolved path, or the given path if Penumbra would not manipulate it. Resolve a given via Penumbra using the Interface collection. The resolved path, or the given path if Penumbra would not manipulate it. Resolve a given via Penumbra using collection applying to the given by its index in the game object table. If the object does not exist in the table, the default collection is used. The resolved path, or the given path if Penumbra would not manipulate it. Resolve a given via Penumbra using the collection currently applying to the player character. The resolved path, or the given path if Penumbra would not manipulate it. Reverse resolves a given local into its replacement in form of all applicable game paths for the collection applying to the th game object in the game object table. If the object does not exist in the table, the default collection is used. A list of game paths resolving to the modded path. Reverse resolves a given local into its replacement in form of all applicable game paths for the collection currently applying to the player character. A list of game paths resolving to the modded path. Resolve all game paths in and reserve all paths in at once. Paths to forward-resolve. Paths to reverse-resolve. A pair of an array of forward-resolved single paths of the same length as and an array of arrays of reverse-resolved paths. The outer array has the same length as while each inner array can have arbitrary length. Resolve all game paths in and reserve all paths in at once asynchronously. Can be called from outside of framework. Can theoretically produce incoherent state when collections change during evaluation. API methods pertaining to the tracking of resources in use by actors. Get the given game objects' resources, as dictionaries of actual paths (that may be FS paths for redirected resources, or game paths for swapped or vanilla resources) to game paths. The game object indices for which to get the resources. An array of resource path dictionaries, of the same length and in the same order as the given game object index array. This function is best called right after the game objects are redrawn, as it may fail to resolve paths if relevant mod settings have changed since then. Get the player and player-owned game objects' resources, as dictionaries of actual paths (that may be FS paths for redirected resources, or game paths for swapped or vanilla resources) to game paths. A dictionary of game object indices to resource path dictionaries. This function is best called right after the game objects are redrawn, as it may fail to resolve paths if relevant mod settings have changed since then. Get the given game objects' resources of a given type, as dictionaries of resource handles to actual paths and, optionally, names and icons. Type of the resources to get, for example for materials. Whether to get names and icons along with the paths. The game object indices for which to get the resources. An array of resource information dictionaries, of the same length and in the same order as the given game object index array. It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. Also, callers should not use UI data for non-UI purposes. Get the player and player-owned game objects' resources of a given type, as dictionaries of resource handles to actual paths and, optionally, names and icons. Type of the resources to get, for example for materials. Whether to get names and icons along with the paths. A dictionary of game object indices to resource information dictionaries. It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. Also, callers should not use UI data for non-UI purposes. Get the given game objects' resource tree. Whether to get names and icons along with the paths. The game object indices for which to get the resources. An array of resource tree JObjects, of the same length and in the same order as the given game object index array. It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. Also, callers should not use UI data for non-UI purposes. Get the player and player-owned game objects' resource trees. Whether to get names and icons along with the paths. A dictionary of game object indices to resource trees. It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. Also, callers should not use UI data for non-UI purposes. API methods pertaining to the management of temporary collections and mods. Temporarily set the settings of a mod in a collection to given values. The collection to manipulate. Specify the mod via its directory name. Specify the mod via its (non-unique) display name. Whether the mod should be forced to inherit from parent collections (if this is true, the other settings do not matter). Whether the mod should be enabled or disabled. The desired priority for the mod. The new settings for the mod, as a map of Group Name -> All enabled Options (should be only one for single select groups). A string to describe the source of those temporary settings. This is displayed to the user. An optional lock to prevent other plugins and the user from changing these settings. Changes in mod structure will still remove the settings. Use 0 for no lock, or negative numbers for an identification lock that does not prevent the user from editing the temporary settings, but allows you to use with the same key to only remove your settings. Success, CollectionMissing if the collection does not exist, TemporarySettingImpossible if the collection can not have settings, ModMissing if the mod can not be identified, TemporarySettingDisallowed if there is already a temporary setting with a different key, OptionGroupMissing if a group can not be found, OptionMissing if an option can not be found. If not all groups are set in , they will be set to their default settings. Temporarily set the settings of a mod in a collection to given values. The game object index of the object whose collection you want to change. Specify the mod via its directory name. Specify the mod via its (non-unique) display name. Whether the mod should be forced to inherit from parent collections (if this is true, the other settings do not matter). Whether the mod should be enabled or disabled. The desired priority for the mod. The new settings for the mod, as a map of Group Name -> All enabled Options (should be only one for single select groups). A string to describe the source of those temporary settings. This is displayed to the user. An optional lock to prevent other plugins and the user from changing these settings. Changes in mod structure will still remove the settings. Use 0 for no lock. Success, InvalidArgument if the game object does not exist, TemporarySettingImpossible if the collection can not have settings, ModMissing if the mod can not be identified, TemporarySettingDisallowed if there is already a temporary setting with a different key, OptionGroupMissing if a group can not be found, OptionMissing if an option can not be found. If not all groups are set in , they will be set to their default settings. Temporarily set the settings of a mod in a collection to given values. The collection to manipulate. Specify the mod via its directory name. Specify the mod via its (non-unique) display name. An optional key to a potential lock applied to those settings. Success, NothingDone if no temporary settings could be removed with this key, CollectionMissing if the collection does not exist, TemporarySettingDisallowed if the key did not correspond to the lock. Temporarily set the settings of a mod in a collection to given values. The game object index of the object whose collection you want to change. Specify the mod via its directory name. Specify the mod via its (non-unique) display name. An optional key to a potential lock applied to those settings. Success, NothingDone if the mod did not have temporary settings in this collection, InvalidArgument if the game object does not exist, TemporarySettingDisallowed if the key did not correspond to the lock. Temporarily set the settings of a mod in a collection to given values. The collection to manipulate. An optional key to a lock applied to those settings. All settings that use this key will be removed, all others ignored. Success, NothingDone if no temporary settings could be removed with this key, CollectionMissing if the collection does not exist. Temporarily set the settings of a mod in a collection to given values. The game object index of the object whose collection you want to change. An optional key to a lock applied to those settings. All settings that can be removed with this key will be removed, all others ignored. Success, NothingDone if no temporary settings could be removed with this key, InvalidArgument if the game object does not exist. Create a temporary collection. The name for the collection. Arbitrary and only used internally for debugging. The GUID of the created temporary collection. Remove the temporary collection of the given name. The chosen temporary collection to remove. NothingChanged or Success. Assign an existing temporary collection to an actor that currently occupies a specific slot. The chosen collection assigned to the actor. The current object table index of the actor. Whether to assign even if the actor is already assigned either a temporary or a permanent collection. Success, InvalidArgument if the actor can not be identified, CollectionMissing if the collection does not exist, CharacterCollectionExists if is false and the actor is already assigned a collection, and AssignmentDeletionFailed if is true and the existing temporary assignment could not be deleted. Set a temporary mod with the given paths, manipulations and priority and the name tag to all regular and temporary collections. Custom name for the temporary mod. List of redirections (can be swaps or redirections). Zipped Base64 string of meta manipulations. Desired priority. InvalidGamePath, InvalidManipulation or Success. Set a temporary mod with the given paths, manipulations and priority and the name tag to a specific collection. Custom name for the temporary mod. GUID of the collection the mod should apply to. Can be a temporary collection. List of redirections (can be swaps or redirections). Zipped Base64 string of meta manipulations. Desired priority. CollectionMissing, InvalidGamePath, InvalidManipulation, InvalidArgument (GUID is nil) or Success. Remove the temporary mod with the given tag and priority from the temporary mods applying to all collections, if it exists. The tag to look for. The initially provided priority. NothingDone or Success. Remove the temporary mod with the given tag and priority from the temporary mods applying to a specific collection, if it exists. The tag to look for. GUID of the collection the mod should apply to. Can be a temporary collection. The initially provided priority. CollectionMissing, NothingDone or Success. Get the current temporary settings of a mod in the given collection. The collection to query. Specify the mod via its directory name. Specify the mod via its (non-unique) display name. The key for the settings lock. The settings as (ForceInherit, Enabled, Priority, Settings) or null if none are registered, the registered source for the temporary settings or empty, and Success, CollectionMissing, ModMissing or TemporarySettingDisallowed if the used key was > 0 and different from the provided key. Get the current temporary settings of a mod in the collection assigned to a given game object. The game object index of the object whose collection you want to change. Specify the mod via its directory name. Specify the mod via its (non-unique) display name. The key for the settings lock. The settings as (ForceInherit, Enabled, Priority, Settings) or null if none are registered, the registered source for the temporary settings or empty, and Success, InvalidArgument if the game object does not exist, ModMissing, or TemporarySettingDisallowed if the used key was > 0 and different from the provided key. API methods pertaining to Penumbras UI. Triggered when the user hovers over a listed changed object in a mod tab. Can be used to append tooltips. The type of the changed item and its ID if known. Triggered when the user clicks a listed changed object in a mod tab. The mouse button clicked, the type of the changed item and its ID if known. Triggered before the settings tab bar for a mod is drawn, after the title group is drawn. The directory name of the currently selected mod, the total used width of the title bar and the width of the title box. Triggered before the content of a mod settings panel is drawn. The directory name of the currently selected mod. Triggered after the Enabled Checkbox line in settings is drawn, but before options are drawn. The directory name of the currently selected mod. Triggered after the content of a mod settings panel is drawn, but still in the child window. The directory name of the currently selected mod. Open the Penumbra main config window. Open the window at a specific tab. Use TabType.None to not change the tab. Select a mod specified via its directory name in the mod tab, empty if none. Select a mod specified via its mod name in the mod tab, empty if none. InvalidArgument if is invalid, ModMissing if or are set non-empty and the mod does not exist, Success otherwise. If is not TabType.Mods, the mod will not be selected regardless of other parameters and ModMissing will not be returned. Close the Penumbra main config window. Used when a game object is redrawn by Penumbra. The to the redrawn object and its . Used when the setting of a mod is changed in any way. The of change, the in which the setting is changed, the name of the mod, and whether the change was or not. Used before a new character base draw object is created from a . A pointer to the source , the used for the object, a pointer to the used (of type ushort*), a pointer to the array, and a pointer to the array. Used after a character base has been created from a . A pointer to the source , the used for the object, a pointer to newly created . Used when a specific game object has resolved a path to a non-default path. A pointer to the source , the original that was resolved by Penumbra, the resulting returned by Penumbra. Describes known types of changed items that could provide special care. The selection type for mod option groups. Exactly one option of this group has to be selected (if any exist). Any number of options in this group can be toggled on or off at the same time. Limits the number of options in a single group to 32 at the most. Each option is its own data container, which are independent of each other. Any number of options in this group can be toggled on or off at the same time. Affects a single IMC entry, to manipulate different parts of a model in a user-facing way. Any number of options in this group can be toggled on or off at the same time. Limits the number of options in a single group to 32 at the most. Each combination of options is its own data container, resulting in 2^N separate data containers. Describes the way a mod can change its settings. It was set to inherit from other collections or not to inherit anymore. It was enabled or disabled. Its priority was changed. A specific setting for an option group was changed. Multiple mods were set to inherit from other collections or not inherit anymore at once. Multiple mods were enabled or disabled at once. A temporary mod was enabled or disabled. A mod was edited. Only invoked on edits affecting the current players collection and for that for now. A temporary setting was added, removed or changed. Describes which mouse button was used to click an element. Error codes returned by some Penumbra.Api calls. The way a specific game object shall be redrawn. Actors can be redrawn immediately or after GPose. The different tabs of the main window that are available. The different types of textures a given texture can be converted to. Convert the texture to .png. Keep the texture format as it is but save as .tex. Keep the texture format as it is but save as .dds. Convert the texture to RGBA32 and save as .tex. Convert the texture to RGBA32 and save as .dds. Convert the texture to BC3 and save as .tex. Convert the texture to BC3 and save as .dds. Convert the texture to BC3 and save as .tex. Convert the texture to BC3 and save as .dds. Convert the texture to .tga. Specialized disposable Provider for Actions. Specialized disposable Provider for Actions. Specialized subscriber only allowing to invoke actions. Whether the subscriber could successfully be created. Invoke the action. See the source of the subscriber for details. Whether the subscriber could successfully be created. Invoke the action. See the source of the subscriber for details. A dictionary that implicitly can be converted to a read-only dictionary with different value type. The type of the keys. The actual type of the values. The read-only type of the values. A dictionary that implicitly can be converted to a read-only dictionary with different value type. The type of the keys. The actual type of the values. The read-only type of the values. Obtain the original dictionary. Conversion between values. A dictionary that implicitly can be converted to a read-only dictionary with different value type. The actual type of the keys. The read-only type of the keys. The actual type of the values. The read-only type of the values. A dictionary that implicitly can be converted to a read-only dictionary with different value type. The actual type of the keys. The read-only type of the keys. The actual type of the values. The read-only type of the values. Obtain the original dictionary. Conversion between keys. Conversion between keys. Conversion between values. Wrapper dictionary. Wrapper dictionary. Create dictionary or null. Wrapper dictionary. Wrapper dictionary. Create dictionary or null. Specialized disposable Provider for Events. Will execute the unsubscriber action on dispose if any is provided. Can only be invoked and disposed. Invoke the event. Specialized disposable Subscriber for Events. Subscriptions are wrapped to be individually exception-safe. Can be enabled and disabled. Enable all currently subscribed actions registered with this EventSubscriber. Does nothing if it is already enabled. Disable all subscribed actions registered with this EventSubscriber. Does nothing if it is already disabled. Does not forget the actions, only disables them. Add or remove an action to the IPC event, if it is valid. Specialized disposable Provider for Funcs. Specialized subscriber only allowing to invoke functions with a return. Whether the subscriber could successfully be created. Invoke the function. See the source of the subscriber for details. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a provider. Triggered when the Penumbra API is initialized and ready. The label. Create a new event subscriber. Create a provider. Triggered when the Penumbra API is fully disposed and unavailable. The label. Create a new event subscriber. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a new event subscriber. Create a provider. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a new event subscriber. Create a provider. The label. Create a provider. The label. Create a provider.