You are viewing a potentially older version of this package. View all versions.
food-Skins-0.5.2 icon

Skins

Modular skin support (no more replacing asset files!)

Date uploaded 3 weeks ago
Version 0.5.2
Download link food-Skins-0.5.2.zip
Downloads 18
Dependency string food-Skins-0.5.2

This mod requires the following mods to function

BepInEx-BepInExPack_GTFO-3.2.2 icon
BepInEx-BepInExPack_GTFO

BepInEx pack for GTFO. Preconfigured and includes Unity Base DLLs.

Preferred version: 3.2.2
AuriRex-Clonesoft_Json-13.0.0 icon
AuriRex-Clonesoft_Json

Library - Newtonsoft.Json but in a renamed namespace.

Preferred version: 13.0.0

README

Skins Icon

Skins

Modular Skin Support for GTFO

Documentation | Repository | Latest SkinGroup Editor Build

For feedback and issues, DM @uwufood OR the feedback thread on the GTFO Modding Discord Server


Please read AT LEAST the entirety of this README before using!

How to Use

  • This mod is a library mod, which means it DOES NOT come with any skins by default. You can look at the dependants of this mod here, these are likely skin packs you can download.
    • For alternative ways of installing/obtaining skins, please refer to the documentation.
  • For creating skins packs (skin groups), refer to the documentation.

Hot Reload

  • Skins can be hot reloaded and applied mid-game. This can be done by clicking the Reload Skins button at the bottom left of the settings page.
  • A hotkey can also be used, you can enable this in the plugin config -- the key is also configurable, by default it is set to F7.

FAQ

  • Q: Do I have to reinstall skins for each modded profile?
    • Short Answer: No
    • Long Answer: When a skin is installed as a mod (i.e. from Thunderstore, local mod, in mod managers), it is installed under the per profile skins folder ({profile_name}/BepInEx/Assets/Skins/). When the mod is first launched, it attempts to move all per profile skins to the global skins folder which is shared across all profiles. If there are no complications, you should only have to install skins once and they will be available for all profiles. If there are any issues, please shoot me a message on Discord.

CHANGELOG

v0.9.3

  • fix: WeaponShellManager.OnLevelCleanup would throw because we use null as pool placeholder.
    • This causes faulty level cleanup if called by some mods, and would cause all subsequent level generations to fail until the game is restarted.
    • We now always fill the pool with a valid empty GameObjectPool to prevent this issue.
  • feat: add option to turn on mipmap generation for skin textures.
  • feat: add HarmonyWrapSafe to all patches to prevent patch failures from breaking the game.
  • refactor: initialize skins on level gen Builder.OnFactoryDone instead.

v0.9.1

  • fix: in some setups, gear might be missed in target setup
    • Now we setup all inventory gear on level start, so local player gear is guaranteed to be a target and setup.

v0.9.0

  • fix: casing is not recorded if it is not part of the gun model
  • fix: hacking Tool etc. can now be targeted because we attach at Item level
  • feat: ManagedGroupTarget that attaches to any Item
    • Things like Hacking Tool can now be targeted
  • feat: mags are now skinned
  • refactor: we don't assume MeshRenderers all have MeshFilter with it.
  • refactor: change int types for persistentID to uint.

v0.8.1 / v0.9.2

  • v0.9.2 (rollback-hotfix) points to this version
  • fix: possible security issues

v0.8.0

  • feat: support for installing skinspkg internal format packages.
  • feat: change 'Update All Material Targets' button to 'Open Global Skins Folder' button

v0.7.0

  • feat: mesh replacement via Mesh Targets
  • refactor: adjust schema to use match_groups instead of matchGroups for consistency.

v0.6.3

  • fix: premature texture unload by Unity due to no references
  • feat: manage destruction of Vanilla textures with ref count and HideFlags.DontUnloadUnusedAsset.

Dev Notes

There has been an issue where skins would sometimes stop applying correctly. Reverting to Vanilla skins after dropping in and out of level would also result in Vanilla textures being destroyed by Unity's resource management. This is because Skins' management of textures are not considered as part of Unity's reference counting system. This update fixes this issue by managing the lifecycle of textures with a ref count and HideFlags.DontUnloadUnusedAsset to prevent Unity from unloading them prematurely.

v0.6.1 / v0.6.2

  • fix: gear ID extraction can cause NRE if item has no PlayfabInstanceId
  • feat: added an "Update All Material Targets" button to settings

v0.6.0

  • fix: incorrect callsite for OnSetActive for selection item
  • fix: skin button disappearing when using LegacyLobby
  • fix: make OnAllPartsSpawned to be patched at lowest priority (might be related to skins not applying in some modded rundowns)
  • feat: skin reload indication and progress display
  • feat: French localization (thank you @Ocha!)
  • feat: Traditional Chinese localization
  • chore: suppress GTFO localization not ready warnings
  • docs: update README

v0.5.3

  • fix: material keyword restore on revert: DisableKeyword("*") was a no-op; now iterates shaderKeywords correctly
  • fix: _clean flag being set after the property loop; it is now set before so a partial-apply failure can't leave the target in an inconsistent state
  • fix: when a configured skin GUID is no longer found in the registry, the target now auto-reverts to vanilla and clears the stale entry
  • feat: auto-move from per-profile to global now replaces the existing global copy on collision rather than skipping, so per-profile is always treated as the up-to-date source

v0.5.2

  • docs: update README with Hot Reload information

v0.5.1

  • feat: initial Release